Python文本游戏开发:用户输入与随机变量值相等判断报错修复
问题背景
我是Python初学者,目前正在开发一款文字类游戏,需求为向玩家展示随机生成的密码片段,提示玩家输入正确的密码组合。
我的实现逻辑为:将数字存入safecode列表,打乱列表元素顺序后拼接生成4位随机数字作为正确密码;由于密码为随机生成,无法预先硬编码校验值,我尝试将用户输入与存储4位密码的变量做相等性判断,但功能始终异常:要么无法识别正确的输入值,要么抛出'int' object is not callable报错。
原始实现代码如下:
coderan = random.sample(safecode, len(safecode)) def convert(coderan): num = [str(n) for n in coderan] code = int("".join(num)) return code compcode = (convert(coderan)) print(type(compcode)) print(compcode) c2 = int(input()) time.sleep(1) ans = 'incorrect' while(ans=='incorrect'): if(c2()==compcode): time.sleep(1) print(SCENE6COMP) ans = 'correct' else: time.sleep(1) print("That's not the right combination. Try again! ") c2 = input()
错误原因
代码里有两处核心问题:
- 触发
'int' object is not callable报错的原因:判断条件里写了c2(),把存储用户输入值的整数型变量c2当成了函数调用,普通变量后面加括号就会触发该类报错。 - 无法识别正确输入的原因:第一次读取用户输入时将内容转成了整数类型,但循环内重新读取输入的语句
c2 = input()没有做整数转换,拿到的是字符串类型值,字符串和整数做相等判断永远不会返回True;同时第一次输入读取放在循环外,用户首次输错后,新输入的值类型不匹配,校验逻辑完全失效。
修正后可运行代码
import random import time # 替换为你实际定义的safecode列表即可 safecode = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 如果需要生成4位密码,sample第二个参数直接传4即可;如果你的safecode本身只有4个元素,保留len(safecode)也可 coderan = random.sample(safecode, 4) def convert(coderan): num = [str(n) for n in coderan] code = int("".join(num)) return code compcode = convert(coderan) # 正式上线游戏可注释掉下面这行调试打印 print(compcode) time.sleep(1) ans = 'incorrect' while ans == 'incorrect': # 输入读取移入循环内部,每次重试都重新获取输入,统一转成整数类型 c2 = int(input()) if c2 == compcode: time.sleep(1) # 替换为你实际定义的通关场景变量 print(SCENE6COMP) ans = 'correct' else: time.sleep(1) print("That's not the right combination. Try again! ")
内容的提问来源于stack exchange,提问作者Kaiden
相关产品推荐
相关产品推荐

