Python求输入数字最值时报错:int与str比较的TypeError问题
问题:输入数字求最大最小值时出现类型错误
我尝试编写代码找出输入数字中的最大值和最小值,但运行时出现错误。代码如下:
largest = None smallest = None while True: num = input("Enter a number: ") if (num == "done"): break try: int(num) except: print("Invalid input") continue if largest == None or int(num) > largest: largest = num elif smallest == None or int(num) < smallest: smallest = num print("Maximum is", largest) print("Minimum is", smallest)
例如,输入33再输入8时,出现如下报错:
Traceback (most recent call last): File "/home/td/tmp/g/test.py", line 16, in <module> if largest == None or int(num) > largest: TypeError: '>' not supported between instances of 'int' and 'str'
错误原因
核心问题是类型不匹配:你在try块里把输入的字符串转成了int,但没有保存这个转换后的值。后续比较时,int(num)是整数类型,而largest被赋值为原始的字符串num,整数和字符串无法直接比较大小,所以抛出了TypeError。另外,最小值判断用elif会导致第一次输入数字时,smallest无法被赋值,逻辑存在漏洞。
修正后的代码
把转换后的整数保存到变量里,后续的比较和赋值都使用这个整数变量,同时调整最小值的判断逻辑:
largest = None smallest = None while True: num_input = input("Enter a number: ") if num_input == "done": break try: num = int(num_input) # 保存转换后的整数 except ValueError: print("Invalid input") continue if largest is None or num > largest: largest = num if smallest is None or num < smallest: # 改用独立的if判断,确保第一次输入时最小值也能被赋值 smallest = num print("Maximum is", largest) print("Minimum is", smallest)
额外优化点
- 输入变量和转换后的变量分开命名(
num_input和num),避免混淆 - 异常捕获更精准,只捕获
ValueError而非所有异常,避免掩盖其他问题 - 用
is None替代== None,这是Python中判断空值的标准写法
内容的提问来源于stack exchange,提问作者Nihal Jha
相关产品推荐
相关产品推荐

