如何解决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
运行过程:
- 输入"12":P1得分+3(1+2),非双数,切换到P2
- 输入"31":P2得分+4(3+1),非双数,切换到P1
- 输入"23":P1得分+5(2+3),非双数,切换到P2
- 输入"0":输出
P1:8 P2:4,与示例结果一致
内容的提问来源于stack exchange,提问作者Gr1mMount
相关产品推荐
相关产品推荐

