Python中因sort函数未定义引发NameError的解决求助
修复数字排序器的NameError及其他问题
嘿,这个问题很好解决,咱们一步步来搞定它!
首先说说你遇到的NameError: name 'sort' is not defined——Python里没有全局的sort()函数,你想给列表排序的话,得用列表自带的.sort()方法,或者内置的sorted()函数,这俩才是正确的用法。
不过除了这个错误,你的代码还有几个小问题,我一起帮你修正:
主要问题点及修复方案
- 错误的排序调用:把
sort(numbers)改成numbers.sort()(原地修改列表排序),或者如果想保留原列表用sorted(numbers)返回新列表,但这里用.sort()更合适。 - 输入数字的类型错误:你现在把输入的字符串
num3直接加入列表,排序时会按字符串规则排序(比如"10"会比"2"小),应该把验证后的整数val加入列表。 - 输入验证不严谨:当前代码只重新输入一次,如果用户还是输入非数字会崩溃,应该用循环直到输入有效数字。
- 排序时机不对:没必要每次输入一个数字就排序,等所有数字都输入完再排序更合理。
- 列表初始化冗余:
numbers=([])可以简化成numbers = []。
修正后的完整代码
numbers = [] amount = input("How many numbers are in your list? ") # 先验证输入的数量是否是有效数字 while not amount.isdigit(): amount = input("Please enter a valid number for the amount: ") amount = int(amount) print("") for ran in range(1, amount + 1): while True: num_input = input(f"{ran}. Input: ") try: val = int(num_input) break # 输入有效,跳出循环 except ValueError: print("That's not a valid number, please try again.") numbers.append(val) # 所有数字输入完成后再排序 numbers.sort() print("\nSorted numbers:", numbers)
代码说明
- 先验证列表数量的输入是否为有效数字,避免后续转换出错。
- 用
while True循环确保用户输入的是有效的整数,直到输入正确才继续。 - 将整数
val加入列表,保证排序是按数字大小进行。 - 所有数字输入完成后调用
numbers.sort()进行原地排序,最后输出结果。
这样运行代码就不会再出现NameError,而且排序逻辑也正确啦!
内容的提问来源于stack exchange,提问作者Zilgem8364
相关产品推荐
相关产品推荐

