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

类与函数开发求助:双人猜数字游戏功能优化

双人猜数字游戏优化方案

需求回顾

  • 玩家可持续猜测直到猜对数字,猜对后再打印双方分数
  • 提示当前轮到哪位玩家猜测
  • 完成3轮游戏后结束

现有代码问题分析

  1. 类职责混淆:Players类既维护玩家属性,又负责游戏核心逻辑(生成随机数、处理猜测),不符合面向对象单一职责原则
  2. 猜测逻辑错误:每次调用game()只允许猜一次,且每次调用都会重新生成随机数,无法实现“持续猜直到猜对”的需求
  3. 轮次控制混乱:用每个玩家的counter控制轮次,导致轮次判断逻辑不准确
  4. 缺少玩家提示:没有明确告知当前轮到哪位玩家进行猜测

优化后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:24:23