如何在Python数字游戏中输出获胜玩家名称并自动扣除失败者分数
4人数字游戏代码修复方案
这是一款4人参与的数字游戏,规则如下:
- 获取每位玩家输入的0-100区间内的数字
- 计算所有数字的平均值并乘以0.8,与该结果最接近的玩家获胜
- 其余3位玩家为失败者,失败者分数需减1
现有代码存在两个问题:
- 仅能输出与目标值最接近的数字,无法输出对应获胜玩家的名称
- 无法自动为失败者扣除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
相关产品推荐
相关产品推荐

