输入10后Python代码中最小变量从2变为10的逻辑错误排查请求
代码逻辑错误排查:最值统计异常问题
问题场景
你编写的Python代码用于收集用户输入的数字,直到输入done为止,同时过滤非数字输入并记录输入数值的最大/最小值。但在依次输入7、2、bob、10、4时,输入10后发现smallest变量从2变成了10,还触发了第四个if pick < smallest语句。
错误原因
核心问题是你一直在用字符串做数值比较:
- 虽然你把输入的
pick转换成了整数x,但后续所有判断最值的逻辑用的都是原始字符串pick,而非转换后的整数x - 字符串的比较规则是按ASCII码逐字符对比,比如字符串
"10"和"2"比较时,第一个字符'1'的ASCII码小于'2',所以"10" < "2"会返回True,导致smallest被错误更新为"10" - 初始化
largest和smallest时,你赋值的也是字符串pick,而非整数x,进一步加剧了类型不匹配的问题
修正后的代码
largest = None smallest = None while True: pick = input("Please Enter a number: ") try: if pick == "done": break x = int(pick) except ValueError: print("Invalid Input") continue # 初始化最值 if largest is None: largest = x if smallest is None: smallest = x # 更新最值 if x > largest: largest = x if x < smallest: smallest = x print("largest:", largest) print("smallest:", smallest) print("Maximum is", largest) print("Minimum is", smallest)
关键修改点
- 所有涉及最值判断、赋值的操作,全部使用转换后的整数
x,而非原始字符串pick - 用
is None替代== None,是Python中判断空值的更规范写法 - 保留核心逻辑的同时,移除了测试用的打印语句(若需要可自行加回)
内容的提问来源于stack exchange,提问作者dayBYday
相关产品推荐
相关产品推荐

