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

Python数字猜谜游戏开发求助:新手按需求实现遇问题

数字猜谜游戏代码优化求助

我是编程新手,正在修第一门编程课。课程项目要求实现一个数字猜谜游戏,需满足以下要求:

  • 包含类(class)、函数(function)
  • 使用字典或列表
  • 用到for循环和while循环
  • 猜测范围是0-10之间的数字
  • 最多2次猜测机会

我尝试写了代码,但可能有不符合要求或者需要改进的地方,恳请各位帮忙指正:

import random 

class Player:
  player = ""
  playerscore = 0

  def gamestart(self):
    self.number = random.randint(0,7)
    self.guesss = 0
    self.list = []
    self.limit = 3
    print()
    print("Guess what number I'm thinking off")
    print()
    print("Might even give you a hit if you do well enough")
    print()

    while self.limit > 0:
      self.player_guess = int(input("Well? What are you waiting for? Start guessing:"))
      print()

      if self.player_guess > 7 or self.player_guess < 0:
        print("Wow that was a terrible guess, think harder or we might be here all week long")
        print("also,", self.player_guess , "is not in the range...")
        print("Becareful though, you only have", self.limit, "guesss left")
        
      elif self.player_guess > self.number:
        self.guesss += 1
        self.limit-= 1
        print("WRONG")
        print(self.player, "You only have", self.limit, "guesss left")
        self.list.append(self.player_guess)
        
      elif self.player_guess < self.number:
        self.guesss += 1
        self.limit -= 1 
        print("oh oh... wrong again!")
        print()
        print(self.player, "You only have", self.limit, "guesss left.")
        self.list.append(self.player_guess)
        
      else:
        self.limit -= 1
        self.playerscore += 1
        self.list.append(self.player_guess)
        print()
        print("wow, you actually got it right")
        print()
        print(self.player_guess, "IS THE CORRECT ANSWER!")
        print()
        print("you only had",self.limit,"left too...")
        print("Lets see all the numbers you guessed")
        print()
        
        for i in self.list:
          print(i)
        self.list.clear()

问题与优化建议

1. 匹配项目核心要求

  • 猜测范围需从0-7改为0-10(对应代码:random.randint(0,10))
  • 猜测次数上限从3次改为2次(对应代码:self.limit = 2)

2. 类属性初始化修正

当前直接在类内定义的player和playerscore是类属性,会被所有玩家实例共享。需改成实例属性,保证每个玩家数据独立:

def __init__(self, player_name):
    self.player = player_name
    self.playerscore = 0

3. 无效猜测的逻辑处理

目前输入超出范围时不消耗次数,可根据需求调整:

  • 若要让无效输入消耗次数,在范围判断分支里添加self.limit -=1
  • 若不消耗,保持现有逻辑即可,但建议明确提示用户

4. 细节修正

  • 拼写错误:guesss改为guesses,hit改为hint
  • 列表命名优化:self.list改为self.guess_history,提升可读性

5. 补充循环结束反馈

玩家用完所有次数未猜对时,需添加正确答案提示和历史猜测展示,避免流程突兀


优化后的完整代码

import random 

class Player:
    def __init__(self, player_name):
        self.player = player_name
        self.playerscore = 0

    def show_remaining_guesses(self, remaining):
        print(f"{self.player}, 你还剩 {remaining} 次猜测机会")

    def gamestart(self):
        # 符合项目要求:0-10的猜测范围
        self.number = random.randint(0, 10)
        self.guesses = 0
        # 存储猜测记录的列表
        self.guess_history = []
        # 最多2次猜测机会
        self.limit = 2

        print("\n猜猜我心里想的数字是多少")
        print("如果表现不错,我可能会给你提示哦\n")

        while self.limit > 0:
            try:
                self.player_guess = int(input("别等了,开始猜吧:"))
                print()
            except ValueError:
                print("请输入有效的整数!")
                continue

            # 检查输入是否在合法范围内
            if self.player_guess > 10 or self.player_guess < 0:
                print("这猜测太离谱了,好好想想范围!")
                print(f"{self.player_guess} 不在0-10的范围内...")
                self.show_remaining_guesses(self.limit)
                print()
                continue

            # 记录本次猜测
            self.guess_history.append(self.player_guess)
            self.guesses += 1
            self.limit -= 1

            if self.player_guess > self.number:
                print("错啦!猜大了")
                self.show_remaining_guesses(self.limit)
            elif self.player_guess < self.number:
                print("错啦!猜小了")
                self.show_remaining_guesses(self.limit)
            else:
                self.playerscore += 1
                print("\n哇,你居然猜对了!")
                print(f"{self.player_guess} 就是正确答案!")
                print(f"你还剩 {self.limit} 次机会没用呢...")
                print("看看你猜过的所有数字:")
                for guess in self.guess_history:
                    print(guess)
                return

        # 用完所有次数未猜对的情况
        print("\n你用完了所有猜测机会!")
        print(f"正确答案是 {self.number}")
        print("你猜过的数字有:")
        for guess in self.guess_history:
            print(guess)
        self.guess_history.clear()

# 示例运行
if __name__ == "__main__":
    player1 = Player("小明")
    player1.gamestart()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:54:12