我是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
解析为name
和grades
:
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)}')