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

如何在Mastermind游戏代码中统计玩家尝试次数?求优化方案

解决Mastermind游戏尝试次数统计的问题

伙计,你这问题大概率是变量作用域搞的鬼——要么是attempts被局部作用域覆盖了,要么每次调用函数时都被重新初始化了,所以才一直卡在0。下面给你两种实现方式,优先推荐面向对象的封装方案,这也是游戏类程序更专业的写法:

方案1:面向对象封装(最优解)

把游戏的核心状态(秘密代码、尝试次数、玩家猜测等)封装到一个类里,所有方法都能直接访问和修改attempts,逻辑清晰还能避免全局变量的混乱,后续扩展功能也更方便:

import random

class MastermindGame:
    def __init__(self):
        self.secret_code = self.generate_secret_code()
        self.attempts = 0  # 初始化尝试次数
    
    def generate_secret_code(self):
        # 生成4个1-6的随机数作为秘密代码,可根据需求调整
        return [random.randint(1,6) for _ in range(4)]
    
    def get_guess_from_user(self):
        # 获取用户输入的猜测,替换成你原有逻辑即可
        while True:
            guess = input("请输入4位1-6的数字作为猜测:")
            if len(guess) == 4 and guess.isdigit() and all(1 <= int(g) <=6 for g in guess):
                return [int(g) for g in guess]
            print("输入无效,请输入4个1-6的数字!")
    
    def display_feedback(self, player_guess):
        self.attempts += 1  # 每次调用反馈函数就递增尝试次数
        # 计算反馈:位置正确的数量 + 数字正确但位置错误的数量
        correct_position = sum(1 for s, g in zip(self.secret_code, player_guess) if s == g)
        correct_number = len(set(self.secret_code) & set(player_guess)) - correct_position
        print(f"第{self.attempts}次尝试:位置正确{correct_position}个,数字正确但位置错误{correct_number}个")
    
    def play(self):
        print("欢迎来到Mastermind猜数字游戏!")
        while True:
            guess = self.get_guess_from_user()
            self.display_feedback(guess)
            if guess == self.secret_code:
                print(f"恭喜你猜对了!总共用了{self.attempts}次尝试!")
                break

# 启动游戏
if __name__ == "__main__":
    game = MastermindGame()
    game.play()

方案2:全局变量快速修复(不推荐长期使用)

如果你不想重构代码,也可以用全局变量的方式快速解决,但这种方式会让代码逻辑耦合度变高,后续维护麻烦:

import random

player_guess = []
attempts = 0  # 全局变量存储尝试次数

def getGuessFromUser(guess):
    global player_guess
    player_guess.clear()
    for g in guess:
        player_guess.append(g)
    return player_guess

def display_feedback():
    global attempts  # 声明使用全局的attempts变量
    attempts += 1
    # 这里写你的原有反馈逻辑
    print(f"当前尝试次数:{attempts}")

# 游戏主逻辑示例
def play_game():
    # 生成秘密代码,替换成你的原有逻辑
    secret_code = ["1","2","3","4"]
    while True:
        guess = input("请输入你的猜测:")
        getGuessFromUser(guess)
        display_feedback()
        if player_guess == secret_code:
            print(f"你赢了!总共用了{attempts}次尝试!")
            break

play_game()

为什么你的attempts始终为0?

大概率是这两个原因之一:

  • attempts是在函数内部定义的,每次调用函数都会重新初始化为0;
  • 没有用global关键字声明(如果是全局变量的话),导致函数里创建了一个局部的attempts变量,和全局的不是同一个。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:44:20