Python Hangman游戏出现"Too many values to unpack"错误求助
Hangman游戏报错排查求助
报错信息
Traceback (most recent call last): File "C:\Users\alfre\PycharmProjects\pythonProject\Coin flip.py", line 4, in <module> for k, v in dictonary: ValueError: too many values to unpack (expected 2)
问题背景
我尝试不参考YouTube制作Hangman游戏,却卡在这个错误上很久。起初我把长单词列表移到了单独的Python文件:
from words import words
但问题没解决,减少单词数量也没用。以下是当前的游戏代码和单词列表:
当前游戏代码
import random from words import words # set up hang_man = [] lose_game = \ [''' O /|\ | / \ '''] stage_1 = \ [''' O '''] stage_2 = \ [''' O /|\ '''] stage_3 = \ [''' O /|\ | '''] stage_4 = \ [''' O /|\ | / \ '''] scale = 0 # random word def random_word(): return random.choice(words) # actions def word_action(player_pick): if player_pick == random_word(): return True else: return False def letter_action(player_choice): if player_choice in random_word(): return True else: return False # update def update_hangman(scale1): if scale1 == 0: hang_man = stage_1[:] print(stage_1) scale1 = scale1 + 1 elif scale1 == 1: hang_man = stage_2[:] print(stage_2) scale1 = scale1 + 1 elif scale1 == 2: hang_man = stage_3[:] print(stage_3) scale1 = scale1 + 1 elif scale1 == 3: hang_man = stage_4[:] print(stage_4) print('Sorry you lost') quit() return scale1 # main def main(): while True: print('Hang Man Game') user = input('''We have our word. Guess a letter or a word:'''.strip) if len(user) == 1: if letter_action(user) == True: pass else: pass elif len(user) > 1: if word_action(user) == True: print('That is the correct word.') print('Good job you win.') quit() else: update_hangman(scale) print('Sorry that was the wrong word') print('Try again') elif user == int: print('Please type a letter.') else: print('Please retype.')
单词列表(words.py)
words = ["aback","abaft","abandoned","..."] # 还有更多单词
错误分析及解决建议
当前报错的直接原因:
报错里的for k, v in dictonary:语句在你贴出的代码里不存在,说明你实际运行的Coin flip.py文件和当前代码不一致。这个错误的本质是:你试图遍历一个列表(或非字典的可迭代对象),却用了k, v这种需要每次迭代返回两个值的写法——只有遍历字典的.items()方法时才会返回键值对,直接遍历列表的话每次只返回一个元素,无法拆成两个变量。当前代码的其他潜在问题:
random_word()每次调用都会重新选一个随机单词,导致word_action和letter_action判断的不是同一个目标单词,应该在游戏开始时就固定一个目标单词并存储起来。input语句里的.strip是错误的,应该改为.strip(),否则会把strip方法对象作为提示文本显示。elif user == int:这个判断无效,user是字符串类型,永远不会等于int类,应该用user.isdigit()来判断是否输入了数字。scale是全局变量,但update_hangman里修改的是局部变量scale1,返回后没有更新全局的scale,导致错误次数无法累计。- 猜字母的逻辑没有任何反馈,也没有记录已猜字母、显示单词进度(比如用下划线代替未猜字母)的逻辑,用户无法知道自己猜的对错和当前游戏状态。
内容的提问来源于stack exchange,提问作者Ultra Legend
相关产品推荐
相关产品推荐

