1
votes

Calcul du score moyen et renvoi d'une chaîne

Je suis nouveau en python et j'essaie de faire un exercice dans lequel je dois calculer un score moyen et renvoyer une chaîne "Votre score moyen est XX"

def report_exam_avg(a, b, c):
    return (str("your score is"), round((a+b+c)/3,1))

report_exam_avg(2,5,9)

Quand je lance ceci, rien est renvoyé et je ne sais pas comment renvoyer une chaîne sans utiliser une instruction d'impression. Merci.


1 commentaires

5 Réponses :


0
votes

renvoie "votre score est" + str (round (a + b + c) / 3, 1))

Le meilleur moyen est d'utiliser l'une des options de format, soit % ou "string" .format () . Mais cette méthode est la plus simple et la plus intuitive. Vous pouvez ajouter des chaînes, alors convertissez le nombre en chaîne et ajoutez-le à "votre score est".


3 commentaires

Le meilleur moyen ne serait-il pas de l'imprimer dans la fonction comme je l'ai détaillé dans ma réponse?


@ AaronD.Rodriguez Je suis d'accord avec DYZ. Votre solution fonctionne bien, mais il est préférable de garder la logique de calcul et l'impression séparées les unes des autres.


@JaneBugai Assurez-vous de le marquer comme la bonne réponse.



0
votes

Vous pouvez renvoyer une chaîne et l'imprimer en cas de besoin. Vous devez soit utiliser le formatage de chaîne pour placer des nombres dans une chaîne:

def report_exam_avg(a, b, c):
    return "your score is " + str(round((a+b+c)/3,1))

print(report_exam_avg(2,5,9)) # your score is 5

Ou, utiliser l'ajout de chaîne, mais après avoir converti les nombres en chaîne:

def report_exam_avg(a, b, c):
    return "your score is %.1f" % (round((a+b+c)/3,1))

print(report_exam_avg(2,5,9)) # your score is 5


0 commentaires

0
votes

Vous devez imprimer la valeur de retour. Vous pouvez également utiliser la mise en forme de chaîne pour la sortie (elle peut également arrondir pour vous).

your score is 5

def report_exam_avg(a, b, c):
    return "your score is {:.0f}".format((a+b+c) / 3)

print(report_exam_avg(2,5,9))


3 commentaires

Si vous utilisez Python 3.6+, vous pouvez renvoyer f "votre score est {((a + b + c) / 3) :. 0f}" en utilisant des f-strings


@Jaba Vous avez tout à fait raison, mais juste pour des raisons de compatibilité, j'ai utilisé la syntaxe normale du format .


Pas de soucis, c'est dommage qu'ils ne soient pas rétrocompatibles, ils sont si agréables à travailler que d'autres.



0
votes

Vous devez imprimer la valeur retournée, ou l'imprimer dans la fonction, il serait plus facile de l'imprimer dans la fonction.

Meilleure solution:

def report_exam_avg(a, b, c):
  return("Your score is " + str(round((a+b+c)/3,1)))

print(report_exam_avg(2,5,9))

ou cela fonctionne également:

def report_exam_avg(a, b, c):
    print("Your score is", round((a+b+c)/3,1))

report_exam_avg(2,5,9)


2 commentaires

Imprimer une valeur dans une fonction au lieu de la renvoyer n'est jamais une meilleure solution. Une telle valeur ne peut plus être réutilisée.


@DYZ "Jamais" est un mot fort.



-1
votes

La meilleure solution est de séparer le calcul et la présentation. Laissez votre fonction calculer et renvoyer la moyenne. Laissez l'appelant l'imprimer.

def report_exam_avg(a, b, c):
    return (a + b + c) / 3

score = report_exam_avg(2, 5, 9)
print("Your average score is {:.0f}".format(score))

Notez que format fait également l'arrondi, donc l'appel à round () n'est pas nécessaire.


0 commentaires