Python 我怎样才能改变我的输出,使分数在名字后面?

Python 我怎样才能改变我的输出,使分数在名字后面?,python,python-3.x,Python,Python 3.x,首先,我是一个完全的编程高手,但我必须完成这个小作业才能通过学校的考试,所以如果有人能给我最后一个问题的答案,这对我会很有帮助。顺便说一句,我正在使用最新的PYTHON 因此,我将对作业进行总结:我收到了一个.txt文件,其中列出了10名学生,每个学生的名字后有3个年级,最低年级可以是1,最高年级可以是10 列表外观的小示例: 汤姆·邦巴迪尔(Tom Bombadil)6.5 5.5 4.5 Dain IJzervoet 6.7 7.2 7.7 Thorin Eikenschild______6

首先,我是一个完全的编程高手,但我必须完成这个小作业才能通过学校的考试,所以如果有人能给我最后一个问题的答案,这对我会很有帮助。顺便说一句,我正在使用最新的PYTHON

因此,我将对作业进行总结:我收到了一个.txt文件,其中列出了10名学生,每个学生的名字后有3个年级,最低年级可以是1,最高年级可以是10

列表外观的小示例:

汤姆·邦巴迪尔(Tom Bombadil)6.5 5.5 4.5

Dain IJzervoet 6.7 7.2 7.7

Thorin Eikenschild______6.8 7.8 7.3

现在,我需要键入一个代码,当我运行程序时,该代码将准确地给出此输出:

Report for group 2b

Tom Bombadil has an average grade of 5.5

Dain IJzervoet has an average grade of 7.2

Thorin Eikenschild has an average grade of 7.3

Meriadoc Brandebok has an average grade of 4.6

Sam Gewissies has an average grade of 4.5

Gollem has an average grade of 1.8

Frodo Ballings has an average grade of 6.8

Gandalf de Grijze has an average grade of 9.5

Peregrijn Toek has an average grade of 6.2

Radagast de Bruine has an average grade of 8.8

End of report
这是我现在的代码:

NUMBER_OF_GRADES = 3

def print_geo_grades(input_grades):
    all_grades = list(map(float, input_grades.split(" ")))

    first_grade = all_grades[0]
    second_grade = all_grades[1]
    third_grade = all_grades[2]

    average_grade = (first_grade + second_grade + third_grade) / NUMBER_OF_GRADES

    print("%.1f" % average_grade)

def print_student(all_students):
    student_details = all_students.split("_")

    full_name_student = student_details[0]
    all_grades = student_details[-1]

    print("%s has an average grade of " % full_name_student, print_geo_grades(all_grades))

'''Start Program'''
print("Report for group 2b")
students = open('geo_grades1.in.txt').readlines()

for each_student in students:
    print_student(each_student)

print("End of report")
这是它现在给我的输出:

Report for group 2b
5.5
Tom Bombadil has an average grade of  None
7.2
Dain IJzervoet has an average grade of  None
7.3
Thorin Eikenschild has an average grade of  None
4.6
Meriadoc Brandebok has an average grade of  None
4.5
Sam Gewissies has an average grade of  None
1.8
Gollem has an average grade of  None
6.8
Frodo Ballings has an average grade of  None
9.5
Gandalf de Grijze has an average grade of  None
6.2
Peregrijn Toek has an average grade of  None
8.8
Radagast de Bruine has an average grade of  None
End of report

Process finished with exit code 0

正如你所看到的,名字前面是平均分数,在平均值应该是多少的地方,上面写着“无”。伙计们,我快到了,我需要在周五23:59之前完成。请帮帮一个兄弟

您需要从函数print\u geo\u grades返回等级,而不是打印等级。只需在函数中添加return和remove print,它就可以工作了:

def print_geo_grades(input_grades):
    all_grades = list(map(float, input_grades.split(" ")))

    first_grade = all_grades[0]
    second_grade = all_grades[1]
    third_grade = all_grades[2]

    average_grade = (first_grade + second_grade + third_grade) / NUMBER_OF_GRADES

    return round(average_grade,1)

你忘了返回你的平均分,只需添加一个

将average_grade语句返回到函数,例如

def print_geo_grades(input_grades):
    all_grades = list(map(float, input_grades.split(" ")))

    first_grade = all_grades[0]
    second_grade = all_grades[1]
    third_grade = all_grades[2]

    average_grade = (first_grade + second_grade + third_grade) / NUMBER_OF_GRADES

    return average_grade

希望这对你有帮助

您正在调用的函数不返回任何值。 您可以通过两种方式解决此问题

不打印,只返回平均分数

在print语句之外调用print_geo_grades

使用任何一个

在print语句中使用的字符串格式非常过时,请参考下面的代码

    NUMBER_OF_GRADES = 3

def print_geo_grades(input_grades):
    all_grades = list(map(float, input_grades.split(" ")))

    first_grade = all_grades[0]
    second_grade = all_grades[1]
    third_grade = all_grades[2]

    average_grade = (first_grade + second_grade + third_grade) / NUMBER_OF_GRADES
#just return python will not consider the zeroes after decimal
    return average_grade                                                                                        

def print_student(all_students):
    student_details = all_students.split("_")

    full_name_student = student_details[0]
    all_grades = student_details[-1]
 #new way of writing
    print("{} has an average grade of {}".format(full_name_student, print_geo_grades(all_grades)))             

'''Start Program'''
print("Report for group 2b")
students = open('geo_grades1.in.txt').readlines()
for each_student in students:
    print_student(each_student)

print("End of report")



>Report for group 2b
>Tom Bombadil has an average grade of 5.5
>Dain IJzervoet has an average grade of 7.2
>Thorin Eikenschild has an average grade of 7.3
>End of report

基本上,最简单的解决方案是:

import re
from statistics import mean


with open("marks.txt") as fd:
    for line in fd:
        name, raw_marks = re.split(r"_+", line)
        marks = map(float, raw_marks.split())
        print(f"{name} has average grade {mean(marks)}")

David这确实有效,但现在唯一的问题是它没有将平均分数四舍五入到小数点后一位。我能把%.1f放回那条线后面吗?顺便说一句,非常感谢您的回答,我真的很费劲。@Atmtje您只想再次指定%.1f:print%s的平均分数为%.1f%full\u name\u student,打印地理等级所有等级。@Atmtje它和以前在同一个位置。@Guimoute我可能会很烦,但你能告诉我哪一部分可以复制并粘贴在这里吗?因为我尝试了所有地方,但对我来说都不管用:'.欢迎你!您可以按照@Guimoute的建议执行,也可以使用python函数round see updated answer。。。这看起来太夸张了。是的,回报确实起到了作用,但它并没有将分数四舍五入到小数点后一位。无论如何,我可以解决这个问题吗?Python会自动进行舍入。实际上,使用f字符串很快就会被弃用。当你在实际操作中使用python时,你必须使用format,还要了解format提供了什么。兄弟,非常感谢你的帮助。唯一的问题是它没有四舍五入的成绩为我在输出非常奇怪。事实上,我接管了你的代码并用我的角色替换了它,但它仍然没有达到分数。非常感谢兄弟的帮助,非常感谢!我们不要向仍在学习印刷术的人扔两个模块。斯普利特和斯普利特在这里很好。