Tout d'abord je suis un noob de programmation complet mais je devais faire ce petit devoir pour que l'école réussisse donc ça m'aiderait vraiment si quelqu'un pouvait me donner la dernière réponse à ma question. (BTW J'UTILISE LE DERNIER PYTHON)

Je vais donc résumer le devoir: j'ai reçu un fichier .text avec une liste de 10 étudiants, après chaque nom d'élève, il y a 3 notes (la note la plus basse peut être 1 et la note la plus élevée un 10).

Petit exemple de l'apparence de la liste:

Tom Bombadil __________ 6,5 5,5 4,5

Dain IJzervoet ________ 6,7 7,2 7,7

Thorin Eikenschild ____ 6,8 7,8 7,3

Maintenant, je dois taper un code qui donnera exactement cette sortie lorsque j'exécute le programme:

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

Voici mon code maintenant:

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")

Et voici le résultat qu'il me donne maintenant:

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

Comme vous pouvez le voir, il y a les notes moyennes devant les noms et où les moyennes devraient être, il est dit «Aucune». Je vous en prie les gars, j'y suis presque et je dois terminer ça avant vendredi 23h59. VEUILLEZ AIDER UN FRÈRE!

0
Atmtje 18 juin 2020 à 11:54

4 réponses

Meilleure réponse

Vous devez renvoyer la note de la fonction print_geo_grades au lieu de l'imprimer. Ajoutez simplement le retour et supprimez l'impression de la fonction et cela devrait fonctionner:

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)
1
DavideBrex 18 juin 2020 à 09:25

La fonction que vous appelez ne renvoie aucune valeur. vous pouvez résoudre ce problème de deux manières

  1. au lieu d'imprimer uniquement return average_grade

  2. appeler print_geo_grades() en dehors de l'instruction d'impression

    utilisez n'importe lequel.

Le formatage de chaîne que vous utilisez dans l'instruction print est vraiment démodé, reportez-vous plutôt au code ci-dessous

    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
0
Nikhil Ghule 18 juin 2020 à 09:33

Fondamentalement, la solution la plus simple est:

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)}")
0
user4756260 18 juin 2020 à 09:14

Vous avez oublié de renvoyer votre average_grade, ajoutez simplement un,

return average_grade instruction à votre fonction telle que,

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

J'espère que cela vous aide!

0
Prathamesh Jadhav 18 juin 2020 à 09:07