Python开发多玩家轮流答题乘法游戏遇循环逻辑问题求助
Python 多人乘法答题游戏修复方案
原代码存在的问题
- 仅使用for循环遍历玩家积分,仅执行一轮答题就自动终止,缺少控制多轮答题的外层循环
- 答题后修改积分时错误使用
d[keys],keys是初始化时最后输入的玩家姓名,所有玩家的答题积分都会错误累计到最后一名玩家账户下 - 遍历玩家时仅获取积分数值,没有和对应玩家绑定,答题时无法对应到当前作答用户
- 没有设置正确的游戏终止判断逻辑,盲目添加while循环就会出现无限循环问题
修正后可运行代码
import random as r n = int(input("请输入玩家人数:")) player_score = {} # 初始化玩家信息 for i in range(n): name = input("请输入玩家姓名:") player_score[name] = 0 # 输出所有玩家名 print("所有参与玩家:") for name in player_score: print(name) # 外层循环控制多轮答题 while True: # 遍历所有玩家轮流答题 for name, score in player_score.items(): print(f"\n当前轮到玩家【{name}】答题") # 随机生成两个0-9的整数作为题目 num1 = r.randint(0,9) num2 = r.randint(0,9) print(f"请计算两个数的乘积:{num1} × {num2}") correct_ans = num1 * num2 # 处理用户输入,兼容非数字输入场景 try: user_ans = int(input("请输入你的答案:")) except ValueError: print("输入内容不是有效数字,按答错处理") user_ans = -1 # 计算积分 if user_ans == correct_ans: print("回答正确!积分+1") player_score[name] += 1 else: print(f"回答错误!正确答案是{correct_ans},积分-2") player_score[name] -= 2 # 输出当前玩家最新积分 print(f"玩家【{name}】当前积分:{player_score[name]}") # 校验是否达到游戏结束条件 if player_score[name] >= 30: print(f"\n游戏结束!恭喜玩家【{name}】积分达到30分,获得胜利!") exit()
逻辑说明
- 外层使用
while True控制多轮答题流程,每一轮所有玩家轮流作答一次 - 遍历玩家时同时获取姓名和当前积分,答题前提示当前作答玩家姓名,避免计分错位
- 每次更新玩家积分后立刻校验是否≥30,达标后直接终止游戏,无需完成本轮剩余玩家的答题
- 新增非数字输入异常处理,避免用户输入非法内容直接导致程序崩溃
内容的提问来源于stack exchange,提问作者Oscar Petersen
相关产品推荐
相关产品推荐

