Python无限循环获取用户输入最值的问题修复请求
问题分析与修复方案
问题根源
你碰到的问题核心是字符串比较逻辑和数值比较逻辑搞混了:
input()返回的是字符串,你虽然用float(num)做了有效性校验,但没把转换后的数值存下来,后续的num > largest、num < smallest都是在比字符串,不是比数字大小。- 单数字的字符串(比如"7"、"2")的ASCII顺序刚好和数值大小一致,所以前两次输入看起来正常;但多数字的字符串(比如"10")是按字符逐个比的,"1"的ASCII码比"7"小,所以"10"会被判定为比"7"小,就出现了你看到的错误。
修复后的代码
largest = None smallest = None while True : num_str = input('Enter a number: ') if num_str == 'done' : break try : num = float(num_str) # 把输入的字符串转成数值存起来 except : print('Invalid input') continue # 所有比较和赋值都用数值类型的num if largest is None : largest = num elif num > largest: largest = num if smallest is None : smallest = num elif num < smallest : smallest = num print(num, largest, smallest) print('Maximum is', largest) print('Minimum is', smallest)
关键改动
- 把输入的字符串单独存为
num_str,转换后的数值存在num里,后续所有比较、赋值操作都用这个数值类型的变量。 - 让
largest和smallest始终存储数值而非字符串,这样比较逻辑才符合我们对数字大小的预期。
内容的提问来源于stack exchange,提问作者James Hill
相关产品推荐
相关产品推荐

