You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

关键修改说明

  1. 变量名修正:将函数内的循环变量统一为num,避免未定义变量的错误。
  2. 条件判断优化:用elif替代多个独立if,逻辑更严谨(一个数字只会被归类一次)。
  3. 输入验证增强:通过try-except处理非数字输入,确保用户输入符合要求;添加循环直到用户输入有效的数字个数。
  4. 循环简化:用for _ in range(n)直接循环n次收集输入,替代原有的冗余while逻辑。
  5. 输出格式化:使用f-string让输出更简洁易读。

内容的提问来源于stack exchange,提问作者Bing Chilling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:50:30