Python 不使用数组获取第二小数字的异常代码调试求助
原有代码的问题
- 第二小值更新逻辑错误:仅在新输入小于当前最小值时才尝试更新第二小,完全遗漏了「新输入大于最小值但小于当前第二小」的场景
- 更新顺序错误:当新输入成为新的最小值时,原来的最小值才应该变成新的第二小,现有逻辑反过来判断新最小值大于第二小才更新,永远不会触发
- 边界场景未覆盖:多个相同值、前两个输入为降序/升序的场景都无法正确处理
正确实现代码
numbers = 5 print('Enter your numbers\n') # 初始值设为无穷大,不用单独处理第一个输入的分支 small = float('inf') second = float('inf') for x in range(numbers): use = int(input(f'Enter #{x + 1}: ')) # 处理新输入小于当前最小值的情况 if use < small: second = small small = use # 处理新输入介于最小值和第二小值之间的情况,排除和最小值重复的数值 elif use < second and use != small: second = use # 兼容所有输入都相同的边界场景 if second == float('inf'): print('\n所有输入数字均相同,不存在第二小值') else: print(f'\nSecond smallest number is {second}')
逻辑说明
- 初始将最小值、第二小值都设为无穷大,简化循环分支逻辑
- 每次输入优先判断是否为新的最小值:如果是,将原最小值降级为第二小,再更新最小值
- 再判断输入是否满足「大于最小值且小于当前第二小」的条件,满足则更新第二小值,同时过滤和最小值相同的重复值
- 额外增加全相同输入的判断,避免输出无穷大的异常结果
内容的提问来源于stack exchange,提问作者user15242190
相关产品推荐
相关产品推荐

