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

如何在Python数字游戏中输出获胜玩家名称并自动扣除失败者分数

4人数字游戏代码修复方案

这是一款4人参与的数字游戏,规则如下:

  • 获取每位玩家输入的0-100区间内的数字
  • 计算所有数字的平均值并乘以0.8,与该结果最接近的玩家获胜
  • 其余3位玩家为失败者,失败者分数需减1

现有代码存在两个问题:

  1. 仅能输出与目标值最接近的数字,无法输出对应获胜玩家的名称
  2. 无法自动为失败者扣除1分

修改后的完整代码

# 初始化玩家信息,用列表存储字典关联名称、输入数字和分数
players = [
    {"name": "Player1", "number": 0, "score": 0},
    {"name": "Player2", "number": 0, "score": 0},
    {"name": "Player3", "number": 0, "score": 0},
    {"name": "Player4", "number": 0, "score": 0}
]

# 获取玩家输入并做合法性验证
for player in players:
    while True:
        try:
            num = int(input(f"{player['name']} please enter number(0-100): "))
            if 0 <= num <= 100:
                player["number"] = num
                break
            else:
                print(f"{player['name']}, You should enter between 0 and 100!")
        except ValueError:
            print(f"{player['name']}, Please enter a valid integer!")

# 计算目标值:平均值*0.8
total = sum(p["number"] for p in players)
average = total / len(players)
target = average * 0.8

# 找到与目标值最接近的获胜玩家
min_diff = float('inf')
winner = None
for player in players:
    diff = abs(player["number"] - target)
    if diff < min_diff:
        min_diff = diff
        winner = player

# 为失败者执行扣分操作
for player in players:
    if player != winner:
        player["score"] -= 1

# 输出最终结果
print(f"The nearest number is: {winner['number']}, winner is {winner['name']}")
print("\nCurrent player scores:")
for player in players:
    print(f"{player['name']}: {player['score']}")

关键修改说明

  • 关联玩家信息:用字典列表整合玩家的名称、输入数字和分数,解决了原代码中信息分离的问题,方便后续对应操作
  • 优化输入验证:改用循环验证逻辑,确保玩家输入合法后才继续流程,避免无效输入干扰计算
  • 定位获胜玩家:遍历玩家时直接计算差值并记录获胜者,可直接获取获胜玩家的名称
  • 实现扣分逻辑:遍历所有玩家,给非获胜玩家的分数减1,满足规则要求的扣分机制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:25:18