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
相关产品推荐
相关产品推荐

