On Thu, Sep 9, 2010 at 5:42 PM, Joel Goldstick <joel.goldst...@gmail.com>wrote:
> > > On Thu, Sep 9, 2010 at 4:51 PM, lists <li...@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 > > I looked into this a little more, and although I'm ok with my comments, I did some experimenting and looked into the stuff in random. I came up with this. It may not be helpful since you may be learning about loops and randint, but this works: import random #LIST words = ["one", "two", "three", "four", "five", "six", "seven", "eight", "four", "nine", "ten", "eleven"] word_set = list(set(words)) # this removes duplicates since set contains one of each value. Then convert back to a list print "original words: ", words # just wanted to see my original list print "removed duplicates with set:", word_set # this shows that I don't have duplicates random.shuffle(word_set) # this shuffles the list in place. Now word_set is shuffled (randomized!) print "randomized: ", word_set # see! -- Joel Goldstick
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor