Python循环使用random实现无重复单词Bingo游戏报错求助
单词Bingo游戏问题修复方案
问题原因解析
- random.shuffle引发NonType错误:
random.shuffle()是原地修改列表的函数,执行后返回None,你尝试遍历None自然会触发错误。正确用法是先调用它打乱列表,再遍历原列表。 - random.sample导致单词重复:
random.sample(list, 1)每次都从原始列表中选取元素,不会移除已选中的单词,所以会出现重复。
修正后的代码
import random print "Let's play Bingo!" print # 获取用户输入的单词列表 bingo_words = raw_input("First enter your bingo words: ") word_list = bingo_words.split() # 随机打乱单词顺序 random.shuffle(word_list) print print "Okay, let's go! Press Enter to show a word, type anything to quit." # 遍历打乱后的单词,逐个展示 for word in word_list: user_input = raw_input() if user_input == "": print(word) else: print "That's the end of the game ^.^" break # 所有单词展示完毕后的提示 else: print "\nAll bingo words are shown! Game over ^.^"
关键改动说明
- 变量名规范:把
list改为word_list,避免和Python内置类型重名,防止潜在问题。 - 输入处理优化:用
raw_input()替代input(),Python2中input()会解析输入为表达式,raw_input()直接获取字符串更安全。 - 遍历逻辑修正:先打乱列表,再直接遍历打乱后的列表,确保每个单词只被展示一次,无重复。
- 交互流程简化:移除多余的等待回车操作,用户按一次回车就展示下一个单词,逻辑更流畅。
- 完整结束提示:添加
for-else结构,当所有单词展示完毕时,自动提示游戏结束。
内容的提问来源于stack exchange,提问作者Sgathach
相关产品推荐
相关产品推荐

