Python:从列表中选择随机单词然后将其删除

时间:2014-01-19 19:57:56

标签: python list random

问题是从您定义的单词列表中选择一个随机单词,然后从列表中删除该单词。计算机应该显示混乱的单词并要求用户猜出单词是什么。一旦玩家猜到了这个单词,就应该从列表中选择另一个随机单词,然后游戏继续进行,直到单词列表为空。

当我运行它时,我有一个错误。

Traceback (most recent call last):
   File "F:\Computer Science\Unit 3\3.6\3.6 #5.py", line 21, in <module>
     word_jamble (random_word)
   File "F:\Computer Science\Unit 3\3.6\3.6 #5.py", line 14, in word_jamble
    word = list(word)
TypeError: 'list' object is not callable

这是我的程序

list = ['mutable', 'substring', 'list', 'array', 'sequence']

from random import shuffle

def word_jamble(word):
   word = list(word)
   shuffle(word)
   print ''.join(word)

from random import choice

random_word = choice(list)
word_jamble (random_word)
user_input = raw_input("What's the word? ")
if user_input == choice(list):
   del list[index(choice(list))]

4 个答案:

答案 0 :(得分:2)

您应该将第一个变量list更改为其他变量。它与内置列表类型混淆,您的list对象当然不可调用。

答案 1 :(得分:1)

主要问题是变量的名称list。它是内置类型构造函数的名称。当您使用说list时,它会隐藏内置类型的名称。除此之外,你可以使用pop这样的方法轻松地从列表中取出随机单词

words_list = ['mutable', 'substring', 'list', 'array', 'sequence']
import random
while words_list:
    print words_list.pop(random.randrange(len(words_list)))

答案 2 :(得分:0)

这正是它所说的:

TypeError: 'list' object is not callable

抱怨

word = list(word)

因为此时,

list = ['mutable', 'substring', 'list', 'array', 'sequence']

已经发生了。

为{1}提供该特定列表的名称后,它就不再是内置list类的名称。一个名字一次只能命名一件事。

答案 3 :(得分:0)

代码存在一些基本问题:

list = ['mutable', 'substring', 'list', 'array', 'sequence']

list是列表构造函数。你应该从不在python关键字后命名你的变量。


del list[index(choice(l))]
python中很少需要

del。我的建议是,如果你是一个初学者,你应该完全忘掉它。从列表中删除元素的正确方法是使用list.remove(基于元素相等)或list.pop(基于索引)


def word_jamble(word):
   word = list(word)
   shuffle(word)
   print ''.join(word)

在这里,您正在使用一个函数来实现不同的任务:改变一个单词并打印它。通常,将每个函数仅执行特定任务是一种很好的做法 - 这会导致更多可重用和有组织的代码。不要在结果中打印结果,而是考虑将其返回,然后将其打印到外面。


from random import shuffle
# some code
from random import choice

将您的导入保持在一起以及程序的开始是一种很好的做法。如果要从同一模块导入两个元素,可以使用逗号分隔它们:

from random import shuffle, choice

最后,既然你想重复游戏直到没有剩下的话,你需要使用一个循环:

while len(word_list)>0: # can be written simply as "while len(word_list):"
    #your code here