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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:39:00