Python数字从小到大排序实现及代码报错排查求助
我来帮你解决这两个问题哈:
问题1:如何在Python中实现数字从小到大打印?
根据不同场景,有几种简单的实现方式:
- 已有数字列表,直接排序打印:用Python内置的
sorted()函数快速排序,然后遍历打印就行:
nums = [5, 2, 9, 1, 5, 6] # sorted()返回新的排序后的列表,不修改原列表 sorted_nums = sorted(nums) for num in sorted_nums: print(num)
- 生成指定范围的数字并打印:如果是要打印连续的数字,直接用
range()就好,它本身就是从小到大生成的:
# 打印1到10的整数(左闭右开,所以写11) for num in range(1, 11): print(num)
- 手动实现排序算法(比如冒泡排序):如果需要自己写排序逻辑(比如作业要求),可以用冒泡排序的思路:
nums = [5, 2, 9, 1, 5, 6] n = len(nums) # 冒泡排序核心逻辑 for i in range(n): # 每轮把当前最大的元素移到列表末尾 for j in range(0, n - i - 1): if nums[j] > nums[j+1]: # 交换两个元素位置 nums[j], nums[j+1] = nums[j+1], nums[j] # 排序完成后打印 for num in nums: print(num)
问题2:修复你的排序代码错误
先帮你拆解代码里的几个坑:
append()方法用错了:list.append()是直接修改原列表,它的返回值是None!你写datas = list1.append(h)会让datas变成None,后面调用disp_data()遍历datas肯定会报错。应该直接执行list1.append(h),之后用list1来操作就行。- 输入没转成数字:
input()拿到的是字符串,直接存列表里的话,排序会按字符串的ASCII码来排(比如"10"会比"2"小,这不是你要的数字排序),必须转成int或者float。 - 冒泡排序代码没写完:你写到
for j in ra...就断了,得补全冒泡排序的循环逻辑。 - 函数作用域问题:
disp_data()里用的datas没有在函数内定义,改成传入列表参数会更规范,也不容易出错。
修复后的完整代码:
# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. """ list1 = [] def disp_data(data_list): # 传入列表参数,避免作用域问题 for item in data_list: print(item, end=" ") print() while True: h = input("input a number(press enter to exit):") if h == "": break # 加个异常处理,防止用户输入非数字内容 try: num = int(h) # 如果需要支持小数,改成float(h)就行 list1.append(num) except ValueError: print("请输入有效的数字哦!") print('before:', end=" ") disp_data(list1) # 补全冒泡排序的逻辑 n = len(list1) for i in range(n): # 每轮循环后,末尾的i个元素已经是有序的,不用再比较 for j in range(0, n - i - 1): if list1[j] > list1[j + 1]: # 交换两个元素的位置 list1[j], list1[j + 1] = list1[j + 1], list1[j] print('after:', end=" ") disp_data(list1)
内容的提问来源于stack exchange,提问作者viclee
相关产品推荐
相关产品推荐

