[Tutor] Random list exercise

Joel Goldstick joel.goldstick at gmail.com
Thu Sep 9 23:42:54 CEST 2010


On Thu, Sep 9, 2010 at 4:51 PM, lists <lists at justuber.com> wrote:

> Hi tutors,
>
> Still on my Python learning journey! I've just competed an exercise
> which asks the student to "Create a program that creates a list of
> words in random order. This program should print all the words and not
> repeat any." I've printed the list for my own needs. The list
> randwords aims to answer the specific request of the exercise author.
>
> If anyone has the inclination and a minute to spare, please run your
> eyes over my answer. It works, but is it an OK way to approach the
> exercise?
>
> Thanks again :-D
>
> Chris
>
> import random
>
> #LIST
> words = ["one", "two", "three", "four", "five", "six", "seven",
> "eight", "nine", "ten", "eleven"]
> randwords = []
>
> while words: #has entries in it
>    wordslen = len(words) #get the length of the list
>    index = random.randint(0, wordslen -1) #get a random index
>    chosenword = words[index]
>    randwords.append(chosenword) #append the random word to a new list
>    del words[index] #del the word from the old list
>
> for word in randwords:
>    print word # print them
>

Several small and not so small points:

1. you assign wordslen each pass through your loop.  While it doesn't matter
in a small loop, it wastes time on the order of the size of your list.
Instead move wordslen = len(...  above your while loop.  Any time you put
code in a loop that doesn't change in each iteration, you should move it out
of the loop.

2. since you only use chosenword once in your loop, you could remove
chosenword = words[index] line and replace chosenword in the append(... with
words[index]

3. your list doesn't contain any duplicate words.  Since  your program is
supposed to catch this, you should add a duplicate to see if it works.
(No!)

4. I think your line del words[index] is supposed to help out with item 3
but it doesn't.  It just removes the word you just used selected.

5. And finally, I think you want to print

Just minor points.  nice job -- getting there
-- 
Joel Goldstick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20100909/851a2093/attachment.html>


More information about the Tutor mailing list