On 2011-11-27 23:17, myles broomes wrote:
#get the users input for the list of words, one by one
first_word = input("Please enter your first word: ")
second_word = input("Please enter your second word: ")
third_word = input("Please enter your third word: ")
fourth_word = input("Please enter your fourth word: ")
fifth_word = input("Please enter your fifth word: ")

#create a tuple containing the users words of the words
word_list = (first_word,second_word,third_word,fourth_word,fifth_word)

You could shorten the input procedure by using a for-loop and appending every word to a list instead using five different "word"-variables and building a tuple with them.

#create an empty list that the words will go into to be returned in a random 
order
random_word_list = []

print("Now your list will be displayed in a random order.")

#random order list
while len(random_word_list) != len(word_list):
         word = random.choice(word_list)
         if word not in random_word_list:
                 random_word_list += word

Bob told you already that you are creating an infinite-loop. Try this:

Python 3.2 (r32:88445, Mar 25 2011, 19:28:28)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> l = []
>>> s = "test"
>>> l += s
>>> l
['t', 'e', 's', 't']

Do you see your problem? You want to "add" a string to a list but with the inplace operator "+=" "word" is interpreted as a sequence (a list of letters). You can't "add" a string to a list:

>>> l = l + s
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

If you want to add an element to a list you should use the ".append"-method of lists:
http://docs.python.org/py3k/tutorial/datastructures.html#more-on-lists

Bob mentioned also the problem with your algorithm. Everytime you get a word from "random.choice" which is already in "random_word_list" you have to loop again:

>>> counter = 0
>>> random_word_list = []
>>> word_list = ["a", "b", "c", "d", "e"]
>>> while len(random_word_list) != len(word_list):
...   counter += 1
...   word = random.choice(word_list)
...   if word not in random_word_list:
...     random_word_list.append(word)
...
>>> print(counter)

If you are lucky, "counter" is close to the minimum 5. But in one of my test runs it was 25. This is unnecessary because you don't need more iterations than the length of "word_list" (5 in your case)

Anyways, there is already a shuffle-method in the "random"-module:
docs.python.org/py3k/library/random.html

Bye, Andreas
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to