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

为什么我的Python排序程序无法正确输出全部从小到大排序的数字?

问题排查及解决

根因分析

你当前的代码仅输出最小数字的原因有两点:

  • displaySortedNumbers函数的逻辑仅计算了三个数中的最小值,完全没有处理中间值、最大值的排序逻辑,最终也只返回了smallest这一个值
  • 打印语句仅拿到了函数返回的单个最小值,自然只能输出这一个数

修复方案

方案1:调用Python内置排序方法实现(最简写法)

将三个数放入列表后调用sort()方法即可完成升序排序,代码如下:

def displaySortedNumbers(num1, num2, num3):
    # 把三个数存入列表
    num_list = [num1, num2, num3]
    # 对列表做升序排序
    num_list.sort()
    # 返回排序后的完整列表
    return num_list

def main():
    # 这里将eval替换为split+类型转换,避免eval存在的代码注入安全隐患
    num_input = input("请输入三个用逗号分隔的数字:")
    num1, num2, num3 = map(float, num_input.split(','))
    sorted_nums = displaySortedNumbers(num1, num2, num3)
    # 打印排序后的所有数字
    print("从小到大排序后的数字为:", ', '.join(map(str, sorted_nums)))

main()

方案2:手动实现三数排序逻辑(无需调用内置排序方法)

通过三次比较直接确定三个数的大小顺序再返回,代码如下:

def displaySortedNumbers(num1, num2, num3):
    # 先确定最小值
    if num1 > num2:
        num1, num2 = num2, num1
    if num1 > num3:
        num1, num3 = num3, num1
    # 此时num1已经是最小值,只需比较剩下两个数确定顺序
    if num2 > num3:
        num2, num3 = num3, num2
    # 按从小到大顺序返回三个值
    return num1, num2, num3

def main():
    num1, num2, num3 = eval(input("请输入三个用逗号分隔的数字:"))
    print("从小到大排序后的数字为:", displaySortedNumbers(num1, num2, num3))

main()

效果验证

输入5,2,7后,两个方案都会输出完整排序结果:从小到大排序后的数字为: 2, 5, 7

内容的提问来源于stack exchange,提问作者alabasta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:05