为什么我的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
相关产品推荐
相关产品推荐

