Python猜数字游戏输入'c'触发ValueError: invalid literal for int()问题求助
问题原因分析
你遇到的报错核心原因是代码读取用户输入时直接做了强制整数转换:user = int(input("xxx")),当用户输入字母c时,字符串c无法被解析为十进制整数,直接触发了该ValueError。
除此之外原代码还有两个隐藏逻辑问题:
- 输入被强制转成整数后,再判断
user == 'c'的逻辑永远不成立,奇偶提示功能完全无法触发 - 就算跳过转换报错,触发提示逻辑后代码还会继续执行后续的数值大小比较,字符串和整数对比会抛出类型错误
修正方案
修改逻辑如下:
- 先保留用户输入的原始字符串格式,先判断是否为
c,确认输入是数字后再转换为整数 - 触发奇偶提示逻辑后用
continue直接进入下一轮猜测,跳过后续的数值判断流程 - 增加非法输入的异常捕获,避免用户输入其他非数字、非
c内容时程序崩溃
修正后的完整代码
import random print('我正在想一个1-20之间的数字……\n你要不要猜猜看?') computer = random.randint(1,20) for i in range(1,4): # 先取原始字符串输入 input_content = input("要提示请输入字母'c'\n请输入1-20之间的数字:") # 先判断是不是要提示 if input_content == 'c': if computer %2 == 0: print('这个数字是偶数') else: print('这个数字是奇数') # 提示后直接进入下一轮,不执行后面的判断 continue # 不是c的话尝试转成整数 try: user = int(input_content) except ValueError: print('输入非法,请输入数字或者字母c') continue # 数值判断逻辑 if user > computer : print('你猜的数字比我想的大\n再试一次') elif user < computer: print('你猜的数字比我想的小\n再试一次') else: break if user == computer: print('猜对了!你真棒!') else: print("运气不太好哦,我想的数字是:" + str(computer))
内容的提问来源于stack exchange,提问作者נועם סלע
相关产品推荐
相关产品推荐

