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

Python函数返回数组报错:NameError未定义全局名称names

解决Python函数返回数组时的NameError问题

我来帮你搞定这个问题!你遇到的NameError本质是在函数里使用了未定义的变量——names和percentages既没有在GetInput函数内部初始化,也没有声明为全局变量,Python根本找不到它们,自然就报错了。

修正方案1:预先初始化固定长度的列表

因为你明确要输入10个学生的信息,可以先创建长度为10的列表,再通过索引赋值:

# function to ask user to input name and score
def GetInput():
    # 初始化两个长度为10的列表,解决未定义问题
    names = [None] * 10
    percentages = [None] * 10
    
    for counter in range(0, 10):
        names[counter] = input("Please enter the student's name: ")
        valid = False
        while not valid:
            # 新增try-except,防止输入非整数导致崩溃
            try:
                score = int(input("Please enter the student's score %: "))
                if 0 <= score <= 100:
                    percentages[counter] = score
                    valid = True
                else:
                    print("Please enter a valid % [0-100]")
            except ValueError:
                print("Oops! Please enter an integer for the score.")
    
    return names, percentages

# 调用函数并接收返回值
name_list, mark_list = GetInput()

# 测试输出
print("Student Names:", name_list)
print("Student Scores (%):", mark_list)

修正方案2:用append动态添加元素(更灵活)

如果后续可能调整学生数量,这种方式不需要预先定义列表长度,更灵活:

def GetInput():
    names = []
    percentages = []
    
    # 不需要计数器的话,用_代替变量名更规范
    for _ in range(10):
        student_name = input("Please enter the student's name: ")
        names.append(student_name)
        
        valid = False
        while not valid:
            try:
                score = int(input("Please enter the student's score %: "))
                if 0 <= score <= 100:
                    percentages.append(score)
                    valid = True
                else:
                    print("Please enter a valid % [0-100]")
            except ValueError:
                print("Invalid input! Please enter a whole number.")
    
    return names, percentages

name_list, mark_list = GetInput()

为什么原来的代码报错?

在Python中,函数内部默认只能访问自己定义的局部变量,或者显式声明的全局变量。你原来的代码直接写names[counter] = ...,但names既没在函数里创建,也没加global names声明,Python就会认为这是未定义的变量,抛出NameError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:31:55