问题是从您定义的单词列表中选择一个随机单词,然后从列表中删除该单词。计算机应该显示混乱的单词并要求用户猜出单词是什么。一旦玩家猜到了这个单词,就应该从列表中选择另一个随机单词,然后游戏继续进行,直到单词列表为空。
当我运行它时,我有一个错误。
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))]
答案 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