Python猜数字游戏部分逻辑不执行:范围内错误值未输出对应提示
问题原因
- 问题根源为变量作用域混淆:
f1()函数中读取的y是全局作用域下初始值为0的变量,而你在f3()函数内部修改的是作为参数传入的局部变量y,二者是完全独立的两个变量。全局的y永远保持初始值0,所以每次f1()判断都会触发Out of range的分支,不会打印错误重试提示。
修复方案
最优方案是调整函数设计,将当前用户输入的猜测值作为参数传入f1(),避免依赖不稳定的全局变量,修改后的完整代码如下:
import random from ast import literal_eval x = random.randint(1,10) y = 0 # 给f1增加y参数,接收当前猜测值 def f1(y): if y not in range(1,11): print('Out of range') else: print('Wrong! Try again. You can exit anytime by pressing Ctrl + C') def f2(): print('Well done!') def f3(x,y): while x != y: try: y = literal_eval(input('Guess a number from 1 to 10:\n')) if x != y: # 调用时传入当前的y值 f1(y) continue else: f2() break except ValueError: print('This is not a number') except SyntaxError: print('This is not a number') except KeyboardInterrupt: break f3(x,y)
修改点说明:
- 给
f1函数新增入参y,使其直接使用调用方传入的最新猜测值做判断 - 在
f3中调用f1时,把用户刚输入的y作为参数传入,保证判断逻辑匹配当前输入
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

