Python猜数字游戏:调用game函数无法重启游戏问题求助
猜数字游戏重玩失效问题解决
问题根源
- 全局变量状态残留:第一次游戏结束后,
guesses_made已达到max_guesses(5次),再次调用game()时,while guesses_made < max_guesses条件不成立,循环直接跳过,导致游戏未启动。 - 秘密数字未更新:重玩时仍使用第一次生成的
secret_number,不符合游戏逻辑。 - 输入处理冗余且不严谨:
end()函数中重复的输入判断代码易出错,第二次输入未统一处理大小写。
修复后的代码
import random import time max_guesses = 5 # 固定参数可保留全局 def game(): # 重置变量放在函数内部,避免全局状态残留 secret_number = random.randint(1, 100) guesses_made = 0 while guesses_made < max_guesses: guess = int(input("Enter your guess: ")) guesses_made += 1 if guess == secret_number: print("You guessed the correct number! You win!") break elif guess > secret_number: print("Your guess is too high. Try again.") elif guess < secret_number: print("Your guess is too low. Try again.") if guess != secret_number and guesses_made == max_guesses: print("You have run out of guesses. The secret number was", secret_number) def end(): while True: print("Play again?") user = input().casefold() if user == "yes": print("okay!") print() game() elif user == "no": print("okay, goodbye!") break else: print("That's not an option. Please say yes or no.") time.sleep(1) # 初始引导内容 print("Hello player, let's play a guessing game.") time.sleep(1.5) print("I will pick a number between 1-100 and you have to try to guess it.") time.sleep(1.5) print() print("I will give you five chances to guess the number. If you guess correctly I will give you a treat. If at the end you still cannot guess the number then I will tell you and we will play again.") time.sleep(2) print() print("I hope you are ready!") time.sleep(.5) print("Ready...") time.sleep(.25) print("Set...") time.sleep(.25) print("GUESS!!!") print() game() end()
关键修改点
- 将
secret_number和guesses_made移至game()函数内部,每次调用都会重新生成秘密数字并重置猜测次数,彻底解决状态残留问题。 - 重构
end()为循环结构,统一用casefold()处理输入大小写,避免重复代码,确保用户输入错误时持续提示直到输入有效选项。 - 移除不必要的全局变量,让函数逻辑更独立,减少全局状态引发的bug。
内容的提问来源于stack exchange,提问作者human_1278
相关产品推荐
相关产品推荐

