Python3猜数字游戏报错:无法比较int与string问题求助
猜数字游戏的错误原因及修复方案
核心错误原因
- 参数名与函数名重名冲突:你给
game函数的第一个参数命名为userInput,和你定义的获取用户输入的userInput()函数同名了。进入game函数后,局部的userInput会覆盖全局的函数引用,此时userInput是传入的整数值,后续尝试调用userInput()时,相当于调用一个整数,会触发TypeError: 'int' object is not callable错误,你误以为是int和string比较,实际是调用对象类型错误引发的问题。 - 未更新用户输入变量:就算参数名不冲突,你在循环里调用
userInput()后,没把返回的新输入赋值给变量,导致后续比较的还是最初传入的旧值,永远无法匹配电脑的猜测值。
修复后的代码
PROMPT = "Please enter an integer: " WELCOME = "THE GUESSING GAME" # 获取用户输入 def get_user_input(): return int(input(PROMPT)) # 获取电脑猜测值 def computer_guess(): import random return int(random.random() * 6) def game(user_input, computer_input): while user_input != computer_input: print("Try again") # 更新用户输入变量,用新输入覆盖旧值 user_input = get_user_input() if user_input == computer_input: print("You win!!") break # 猜对后直接退出循环 def main(): # 获取用户初始输入 the_input = get_user_input() # 生成电脑的猜测值 computer = computer_guess() # 启动游戏逻辑 game(the_input, computer) main()
修复说明
- 修改命名避免冲突:把获取用户输入的函数改名为
get_user_input,game函数的参数改为user_input,既解决了命名冲突,也符合Python的PEP8命名规范(小写字母加下划线)。 - 更新用户输入变量:循环里调用
get_user_input()后,把返回的新值赋值给user_input,确保每次循环都用最新的输入和电脑值比较。 - 添加循环退出逻辑:猜对后用
break跳出循环,避免无用的循环执行。
内容的提问来源于stack exchange,提问作者Larry Loch
相关产品推荐
相关产品推荐

