You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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","..."]  # 还有更多单词

错误分析及解决建议

  1. 当前报错的直接原因:
    报错里的for k, v in dictonary:语句在你贴出的代码里不存在,说明你实际运行的Coin flip.py文件和当前代码不一致。这个错误的本质是:你试图遍历一个列表(或非字典的可迭代对象),却用了k, v这种需要每次迭代返回两个值的写法——只有遍历字典的.items()方法时才会返回键值对,直接遍历列表的话每次只返回一个元素,无法拆成两个变量。

  2. 当前代码的其他潜在问题:

    • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:24:17