[Tutor] Random list exercise
lists
lists at justuber.com
Fri Sep 10 00:04:01 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
>
Ah, back to the drawing boards! I'll fix and post back!
Chris
More information about the Tutor
mailing list