Python程序异常:10被误判为小于2的最小值求助排查
问题排查:程序误判10为最小数字的原因及修复方案
你的代码核心问题是把字符串当成数字做比较了:
你虽然用int(num)做了输入合法性校验,但没有把转换后的整数保存下来,后续的largest < num、smallest > num都是在对比字符串,而非数字。
字符串比较是按字符ASCII码逐位来的:'10'的第一个字符是'1'(ASCII码49),'2'的第一个字符是'2'(ASCII码50),所以字符串层面'10' < '2'会返回True,这就导致程序错误认定10比2小,最终把它设成了最小值。
修复后的代码
largest = None smallest = None while True: print('largest:', largest) print('smallest:', smallest) num_str = input('Enter a number: ') if num_str == 'done': break try: # 关键:把转换后的整数存下来,后续用这个数字做所有比较 num = int(num_str) except: print('Invalid input') continue if largest is None and smallest is None: print('if largest == None and smallest == None :', largest is None and smallest is None) print("Setting value of largest to", num) largest = num print("Setting value of smallest to", num) smallest = num elif largest < num: print("Largest < num") largest = num elif smallest > num: print("smallest > num") smallest = num else: print("Something else") print(num) print("Maximum", largest) print("Minimum", smallest)
关键修改点
- 拆分输入字符串和数字:将原始输入存为
num_str,转换后的整数存为num,后续所有比较、赋值都用数字类型的num - 用
is None替代== None,这是Python中判断空值更规范的写法
内容的提问来源于stack exchange,提问作者Clayton Collins
相关产品推荐
相关产品推荐

