Python猜数字游戏Bug求助:始终校验首次用户输入值
Python猜数字游戏Bug修复方案
问题描述
开发的Python猜数字游戏接近完成,但存在Bug:尽管在函数内重新赋值了用户输入的新数值,程序始终基于首次输入的数值进行条件校验。调整check函数的调用位置后问题依旧,以下是原代码及修复方案。
原代码
import random number = random.randint(1,101) print(f"the no is {number}") def check(user_guess): global level global game_over if level <= 0: print("you ran out of guesses...") return False if user_guess > number: print("too high") level -= 1 print(f"guesses left: {level}") user_guess = int(input("guess again ")) game_over = False elif user_guess < number: print("too low") level -= 1 print(f"guesses left: {level}") user_guess = int(input("guess again ")) elif user_guess == number: print("you guessed right") return False level = 0 def levels(): '''assigns the level to the user''' global game_over global level print("Welcome to the number guessing game...") difficulty = input("enter a difficulty: Easy or Hard? ").lower() if difficulty == 'easy': level = 10 print(f"guesses: {level}") elif difficulty == 'hard': level = 5 print(f"guesses : {level}") else: print("error") game_over = False levels() user_guess = int(input("make a guess ")) while not game_over: check(user_guess) if check(user_guess) == False: game_over = True
问题原因
check函数内的user_guess是局部变量,修改它不会影响外部全局变量user_guess的值,循环始终使用第一次输入的数值- 循环内两次调用
check(user_guess),第一次调用获取新输入但未更新全局变量,第二次仍用旧值校验,逻辑混乱 game_over控制逻辑不清晰,函数返回值和全局变量混用,容易触发错误的终止条件
修复后的代码
import random number = random.randint(1, 101) print(f"the no is {number}") level = 0 game_over = False def levels(): '''assigns the level to the user''' global level print("Welcome to the number guessing game...") difficulty = input("enter a difficulty: Easy or Hard? ").lower() if difficulty == 'easy': level = 10 print(f"guesses: {level}") elif difficulty == 'hard': level = 5 print(f"guesses : {level}") else: print("error") def check(user_guess): global level if level <= 0: print("you ran out of guesses...") return True # 返回True表示游戏结束 if user_guess > number: print("too high") level -= 1 print(f"guesses left: {level}") return False # 返回False表示继续游戏 elif user_guess < number: print("too low") level -= 1 print(f"guesses left: {level}") return False elif user_guess == number: print("you guessed right") return True levels() user_guess = int(input("make a guess ")) while not game_over: game_over = check(user_guess) if not game_over: user_guess = int(input("guess again "))
关键修改点
- 将用户输入逻辑从
check函数移出,放到循环内统一处理,确保user_guess每次都更新为最新输入 - 让
check函数只负责校验逻辑,返回布尔值表示游戏是否结束,避免局部变量与全局变量混淆 - 简化循环逻辑,仅调用一次
check函数,根据返回值决定是否继续循环并获取新输入 - 移除
check函数内对game_over全局变量的依赖,改用返回值控制游戏状态
内容的提问来源于stack exchange,提问作者rokari19
相关产品推荐
相关产品推荐

