Python含循环、函数与列表的代码运行异常求助(新手)
调试指导:统计列表中正数、负数、零的数量
代码中的核心问题
- 变量名错误:函数
three的循环里遍历的是y,但判断正负和零的时候用了未定义的x,运行时会触发NameError。 - 范围判断错误:原代码中输入数量的判断条件
n>3 and n<6只允许输入4或5个数字,不符合任务要求的「3-6个数字」,应该调整为n >= 3 and n <= 6。 - 无效输入未处理:使用
eval处理输入存在安全风险,且未对非数字输入做容错;如果用户输入的n不在3-6范围内,会直接跳过数字输入步骤,导致列表为空。 - 循环逻辑冗余:外层的
while循环完全多余,只需根据用户指定的n值,循环n次收集输入即可。
修正后的代码
def count_numbers(num_list): positive = 0 negative = 0 zero = 0 for num in num_list: if num < 0: negative += 1 elif num > 0: positive += 1 else: zero += 1 print(f"正数数量:{positive}") print(f"负数数量:{negative}") print(f"零的数量:{zero}") return (positive, negative, zero) num_list = [] # 处理输入数量的验证 while True: try: n = int(input("请输入要输入的数字个数(3-6之间):")) if 3 <= n <= 6: break else: print("输入的数字必须在3到6之间,请重新输入!") except ValueError: print("请输入有效的整数!") # 收集用户输入的数字 for _ in range(n): while True: try: num = float(input("请输入一个数字:")) num_list.append(num) break except ValueError: print("请输入有效的数字!") # 调用函数并输出结果 count_numbers(num_list)
关键修改说明
- 变量名修正:将函数内的循环变量统一为
num,避免未定义变量的错误。 - 条件判断优化:用
elif替代多个独立if,逻辑更严谨(一个数字只会被归类一次)。 - 输入验证增强:通过
try-except处理非数字输入,确保用户输入符合要求;添加循环直到用户输入有效的数字个数。 - 循环简化:用
for _ in range(n)直接循环n次收集输入,替代原有的冗余while逻辑。 - 输出格式化:使用f-string让输出更简洁易读。
内容的提问来源于stack exchange,提问作者Bing Chilling
相关产品推荐
相关产品推荐

