类与函数开发求助:双人猜数字游戏功能优化
双人猜数字游戏优化方案
需求回顾
- 玩家可持续猜测直到猜对数字,猜对后再打印双方分数
- 提示当前轮到哪位玩家猜测
- 完成3轮游戏后结束
现有代码问题分析
- 类职责混淆:
Players类既维护玩家属性,又负责游戏核心逻辑(生成随机数、处理猜测),不符合面向对象单一职责原则 - 猜测逻辑错误:每次调用
game()只允许猜一次,且每次调用都会重新生成随机数,无法实现“持续猜直到猜对”的需求 - 轮次控制混乱:用每个玩家的
counter控制轮次,导致轮次判断逻辑不准确 - 缺少玩家提示:没有明确告知当前轮到哪位玩家进行猜测
优化后的代码
import random class Player: def __init__(self, name): self.name = name self.score = 0 # 更直观的变量命名 def __str__(self): return f"{self.name}'s score is {self.score}" def add_score(self): self.score += 1 def play_round(current_player): """处理单个玩家的一轮猜测,直到猜对为止""" random_num = random.randint(1, 10) print(f"\n=== 轮到 {current_player.name} 猜测 ===") print("我想的数字在1-10之间,请猜!") while True: try: guess = int(input("请输入你的猜测:")) if guess < 1 or guess > 10: print("请输入1-10之间的数字!") continue if guess == random_num: print(f"恭喜 {current_player.name} 猜对了!") current_player.add_score() break elif guess > random_num: print("猜大了!再试试") else: print("猜小了!再试试") except ValueError: print("请输入有效的整数!") def main(): player1 = Player("Ana") player2 = Player("Ryan") total_rounds = 3 # 全局控制总轮次 current_round = 0 print("欢迎来到双人猜数字游戏!") while current_round < total_rounds: # 轮流让玩家完成一轮猜测 play_round(player1) current_round += 1 if current_round >= total_rounds: break play_round(player2) current_round += 1 # 所有轮次结束后统一打印分数 print("\n=== 最终分数 ===") print(player1) print(player2) print("游戏结束!") if __name__ == "__main__": main()
关键改动说明
- 类职责拆分:
Player类仅维护玩家的名字与得分,游戏流程(轮次控制、猜测逻辑)拆分到独立函数中,符合面向对象设计规范 - 实现持续猜测:
play_round函数通过while True循环,让玩家持续猜测直到猜对才退出,满足需求 - 明确轮次控制:用全局变量
total_rounds和current_round控制总轮次,每完成一位玩家的猜对流程计为一轮,逻辑清晰 - 添加玩家提示:每轮开始时明确提示当前轮到哪位玩家猜测
- 提升代码健壮性:增加输入验证,处理非整数输入和超出范围的数字,避免程序崩溃
- 优化命名规范:将类名改为
Player(单数更符合命名逻辑),变量名gamesWon改为score,更直观易懂
内容的提问来源于stack exchange,提问作者Janet
相关产品推荐
相关产品推荐

