You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 09:06:00