Python代码分裂成多个函数后出现错误



我是python的新手,我从做一些练习开始。我带来了一个工作代码,但在将代码分成多个函数后,我得到了一个错误。

TypeError: averages()缺少1个必需的位置参数:'average_grades'

这是我的代码:

def averages(line, average_grades):
if line == '':
return
name_grades = line.split('_')
student_name = name_grades[0]
grades = [float(n) for n in name_grades[-1].split(' ')]
average_grades(student_name, grades)
print('{} has an average grade of {:.2}'.format(student_name, average_grade))

def average_grades(grades):
average_grade = sum(grades) / len(grades)
averages(average_grade)
return

file = open('geo_grades_1_input.txt').read().split('n')
print("Report for group 2b")
for line in file:
averages(line)
print("End of report")

感谢您的宝贵时间!

当您将代码拆分为多个函数时,请确保您清楚地了解每个函数的功能——它接受什么作为输入,产生什么作为输出。如果你给它一个反映这个目的的名字,它会有所帮助。

在这种情况下,您可能希望有一个函数返回一组特定成绩的平均值:

def average(grades):
return sum(grades) / len(grades)

和另一个打印特定行的平均分数的函数:

def print_average_grades(line):
if line == '':
return
name_grades = line.split('_')
student_name = name_grades[0]
grades = [float(n) for n in name_grades[-1].split(' ')]
print(f'{student_name} has an average grade of {average(grades)}')

print_average_grades函数中,我们调用average(grades)来得到grades列表中的average。请注意,我们没有将average函数student_name作为参数传递,因为它不知道如何处理它。average只关心成绩列表,而不关心来自哪个学生的名字。

我们不从average内部调用print_average_grades,因为average的唯一工作是计算平均值并返回它,而不是打印它(而且它无法访问print_average_grades所依赖的line)——print_average_grades需要调用average来完成它的工作,但反之亦然。

您可以进一步拆分print_average_grades,也许,通过使用一个函数,其工作是将line解析为namegrades:

def parse_name_grades(line):
name_grades = line.split('_')
return name_grades[0], [float(n) for n in name_grades[-1].split(' ')]
def print_average_grades(line):
if not line:
return
name, grades = parse_name_grades(line)
print(f'{name} has an average grade of {average(grades)}')

最新更新