Python猜数字游戏while循环条件为false仍被执行问题求助
问题成因
- 逻辑混用错误:同时使用了
while循环和递归两种重复执行逻辑,二者相互冲突。每次在循环内调用guess(lives-1)时,会进入新的函数递归层,上层函数的lives和guess_number变量不会被修改,递归层退出后,上层的while循环仍会按旧的变量值继续执行,导致lives为0的判断无法终止上层循环。 - 循环内未更新输入值:
guess_number = int(input(...))写在了while循环外部,进入循环后永远不会重新读取用户的新输入,也不会更新lives变量的值,导致循环判断条件永远不会触发false退出。 - 猜对分支逻辑不可达:
while循环的准入条件是guess_number!= number,因此循环内部的else: print(f"You got it...")分支永远不会被执行。
修复方案
方案1:改为纯循环实现(推荐)
去掉递归逻辑,所有重复执行逻辑用循环实现,代码如下:
import random print("Welcome to the Number Guessing Game!") number = random.randint(1,100) print("I'm thinking of a number between 1 and 100.") # 调试用,正式运行可删除下一行 # print(number) def set_lives(): level = input("Choose a difficulty.Type 'easy' or 'hard': ") return 10 if level == "easy" else 5 def guess(lives): while lives > 0: guess_number = int(input("Make a guess: ")) if guess_number == number: print(f"You got it! The answer was {number}") return elif guess_number > number: print("Too High") else: print("Too Low") lives -= 1 if lives > 0: print(f"You have {lives} attempts remaining to guess the number") else: print("You are out of moves.You loose") print(f"The correct number is {number}") guess(set_lives())
方案2:改为纯递归实现
如果要保留递归逻辑,就删除冗余的while循环:
import random print("Welcome to the Number Guessing Game!") number = random.randint(1,100) print("I'm thinking of a number between 1 and 100.") # 调试用,正式运行可删除下一行 # print(number) def set_lives(): level = input("Choose a difficulty.Type 'easy' or 'hard': ") return 10 if level == "easy" else 5 def guess(lives): if lives <= 0: print("You are out of moves.You loose") print(f"The correct number is {number}") return guess_number = int(input("Make a guess: ")) if guess_number == number: print(f"You got it! The answer was {number}") return elif guess_number > number: print("Too High") else: print("Too Low") print(f"You have {lives-1} attempts remaining to guess the number") guess(lives-1) guess(set_lives())
内容的提问来源于stack exchange,提问作者sumathi
相关产品推荐
相关产品推荐

