Python终端无法显示已赋值的x、y变量值问题排查
问题根源
你的代码有3个核心错误,直接导致变量只显示一次、逻辑跑不通:
- 缩进完全混乱:定义
game()函数后,你没有把生成随机数、猜数字的核心逻辑缩进放到函数体里,导致调用game()时根本不会重新生成x、y,也不会重置猜测次数,所有逻辑只在脚本第一次运行时执行一次。 int()参数用法错误:你写的int(input('add these numbers '),print(x,y))完全不符合语法,int()的第二个参数是指定数字转换的进制(比如传2代表把输入按二进制转整数),print(x,y)的返回值是None,传在这里会触发隐式错误,你要先打印x、y的值,再弹出输入提示。- 冗余无效代码:重复导入
random、itertools,写了itertools.repeat(1)但既不赋值也不调用,完全不生效。
修正后的可运行代码
import random def playagain(): playagain_opt = input('Would you like to play again? Write YES or NO: ').lower() if playagain_opt == 'yes': game() elif playagain_opt == 'no': print('Ok, Bye!!') else: print('So you dumbass really cannot even follow simple instructions huh') def game(): # 所有游戏逻辑都放到game函数里,每次调用都会重新生成数字、重置次数 x = random.randint(1,100) y = random.randint(1,200) guessTrials = 3 secret_num = x + y while guessTrials >= 1: try: # 先打印要计算的两个数,再接收输入 print(f"请计算两个数的和:{x} + {y} = ?") guess = int(input('请输入你的答案:')) except ValueError: print('Thats not a whole number!') # 输错格式不扣次数,直接进下一轮循环 continue if guess < secret_num: print('TOO LOW') elif guess > secret_num: print('TOO HIGH') else: print('You got it mate!') playagain() return # 猜错才扣次数 guessTrials -= 1 print(f'Thats not it. You have {guessTrials} tries left') if guessTrials == 0: print(f'My number was {secret_num}') playagain() if __name__ == "__main__": playgame = input('Would you like to play an addition game? Write yes or no: ').lower() if playgame == 'yes': game() elif playgame == 'no': print('Ok, Bye!!') else: print('why u gotta try me like that man')
改动说明
- 把所有游戏核心逻辑全部缩进放到
game()函数内部,每次重开游戏都会重新生成随机数、重置3次猜测机会,x和y也会每轮猜题前都打印。 - 把
print(x,y)从int()参数里移出来,放到每次循环接收输入之前,保证每轮猜的时候都能看到两个加数。 - 删掉了没用的
itertools相关代码和重复导入语句,加了输入非数字时的continue逻辑,避免输错格式平白扣次数。 - 给输入统一加了
.lower()转小写,用户输入YES/Yes/yes都能识别,不会因为大小写误触发错误提示。
内容的提问来源于stack exchange,提问作者FujiwaraBunta
相关产品推荐
相关产品推荐

