Python中不使用sort函数如何实现多参数(三个数字)排序
三数排序问题修复方案
问题原因
- 你写的
simple_sort函数仅返回单个整数,调用时尝试解包为3个变量赋值,会直接触发类型错误 - 现有判断逻辑覆盖不全,仅能返回单个符合条件的数值,完全没有完成三数排序的完整逻辑,也没有处理数值相等的边界场景
- 注意你的需求描述和代码注释存在冲突:你要求a为最大值、b为中间值、c为最小值时,直接打印a,b,c为降序;但注释要求输出升序,以下实现会先满足注释要求的打印a,b,c为升序,如果需要a为最大值,调整返回顺序即可。
修复代码
简洁实现(调用内置排序)
num1 = int(input("input an integer: ")) num2 = int(input("input another integer: ")) num3 = int(input("input another integer: ")) def simple_sort(a,b,c): # sorted默认升序,返回[最小值, 中间值, 最大值],对应a、b、c升序要求 return sorted([a,b,c]) a,b,c=simple_sort(num1,num2,num3) print(a,b,c)
如果需要满足「a为最大值、b为中间值、c为最小值」的要求,将函数返回行修改为return sorted([a,b,c], reverse=True)即可。
纯条件判断实现(不依赖内置排序)
如果要求必须用自定义判断逻辑实现排序,可以使用以下版本:
def simple_sort(a,b,c): # 先确定最小值 if a <= b and a <= c: min_v = a mid_v, max_v = (b, c) if b <= c else (c, b) elif b <= a and b <= c: min_v = b mid_v, max_v = (a, c) if a <= c else (c, a) else: min_v = c mid_v, max_v = (a, b) if a <= b else (b, a) # 升序返回return min_v, mid_v, max_v;降序(a最大)返回return max_v, mid_v, min_v return min_v, mid_v, max_v
内容的提问来源于stack exchange,提问作者altalio
相关产品推荐
相关产品推荐

