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

如何解决Python掷骰子游戏中‘expected 2, got 1’输入错误?

问题修复方案

不需要完全重写代码,只要修正几个关键错误就能解决问题,具体步骤如下:

1. 解决输入"0"的解包错误

当前代码一开始直接把输入解包成两个变量,输入"0"时只有1个字符,必然触发解包错误。正确做法是先读取完整输入,优先判断是否为"0",再处理骰子点数:

  • 读取输入后先去除首尾空格(避免输入带换行或空格干扰)
  • 如果输入是"0",直接输出得分并退出循环
  • 若不是"0",再将输入拆分成两个骰子点数进行解包

2. 修正拼写错误

把代码里的plscore改成p1score,这是笔误导致的变量未定义问题。

3. 修复玩家切换逻辑

当前代码结构是死循环处理P1,永远不会执行P2的代码块,逻辑完全错误。应该用一个变量标记当前玩家,每次掷骰子后根据是否是双数决定是否切换:

  • 初始化current_player = "p1"标记当前操作的玩家
  • 处理当前玩家的掷骰子操作并累加得分
  • 若掷出的不是双数,切换玩家(p1与p2互转)

修正后的完整代码

p1score = 0
p2score = 0
current_player = "p1"  # 标记当前进行操作的玩家

while True:
    user_input = input().strip()  # 读取输入并去除首尾空格
    if user_input == "0":
        print(f'P1:{p1score} P2:{p2score}')
        break
    
    # 拆分骰子点数(假设输入均为合法的两位数字)
    roll1, roll2 = list(user_input)
    roll1_num = int(roll1)
    roll2_num = int(roll2)
    total = roll1_num + roll2_num

    # 根据当前玩家累加得分
    if current_player == "p1":
        p1score += total
    else:
        p2score += total
    
    # 非双数则切换玩家
    if roll1 != roll2:
        current_player = "p2" if current_player == "p1" else "p1"

代码验证(对应示例输入)

输入:

12 
31
23
0

运行过程:

  1. 输入"12":P1得分+3(1+2),非双数,切换到P2
  2. 输入"31":P2得分+4(3+1),非双数,切换到P1
  3. 输入"23":P1得分+5(2+3),非双数,切换到P2
  4. 输入"0":输出P1:8 P2:4,与示例结果一致

内容的提问来源于stack exchange,提问作者Gr1mMount

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:17:22