#1

Oops, try again. get_class_average([alice]) resulted in an error: list indices must be integers, not str

``````Oops, try again. get_class_average([alice]) resulted in an error: list indices must be integers, not str

Replace this line with your code. Do not remove the backticks that are above or below this line.
lloyd = {
"name": "Lloyd",
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"homework": [100.0, 92.0, 98.0, 100.0],
"quizzes": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"name": "Tyler",
"homework": [0.0, 87.0, 75.0, 22.0],
"quizzes": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}

def average(numbers):
total = sum(numbers)
total = float(total)

def get_average(student):
homework = (average(student["homework"]))
quizzes = (average(student["quizzes"]))
tests = (average(student["tests"]))
x = 0.10 * homework + 0.30 * quizzes + 0.60 * tests
return x

if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "F"

def get_class_average(students):
results = []
for student in students:
results.append(get_average(students))
return average(results)``````

#2

I think you meant student not students here.

#3

You must get average of a student not students

#4

Hello Bonjour

My English is very bad but if anyone can help me I try my luck ... I have to spend my afternoon yesterday without success and the message I posted on the forum remains unanswered. Thank you in advance for your help !

I can not get a pass this year! Despite the fact that I was gone from forum to forum in anything I get stuck!

A solution ? Merci !

Here is my code !!

lloyd = {
"noms": "Lloyd",
"devoirs": [90.0, 97.0, 75.0, 92.0],
"quiz": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"noms": "Alice",
"devoirs": [100.0, 92.0, 98.0, 100.0],
"quiz": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"noms": "Tyler",
"devoirs": [0.0, 87.0, 75.0, 22.0],
"quiz": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}

def moyenne(nombres):
somme = sum(nombres)
somme = float(somme)
taille = len(nombres)
taille = float(taille)
total = somme/taille

def average(nombres):
total = sum(nombres)
total = float(total)
average = total / len(nombres)
return average

def calcule_moyenne(etudiant):
devoirs = average(etudiant['devoirs'])
quiz = average(etudiant['quiz'])
tests = average(etudiant['tests'])
note = 0.1 * devoirs + 0.3 * quiz + 0.6 * tests
return note

def ecrire_lettre_note(note):
if note >= 90:
return "A"
elif note >= 80:
return "B"
elif note >= 70:
return "C"
elif note >= 60:
return "D"
else:
return "F"
print ecrire_lettre_note(calcule_moyenne(lloyd))

def calcule_classe_moyenne(etudiants):
resultats = []
for etudiant in etudiants:
resultats.append(calcule_classe_moyenne(etudiant))
return moyenne(resultats)

print calcule_classe_moyenne(resultats)
print ecrire_lettre_note(note)

and this is what gives me the console :

B
Traceback (most recent call last):
File "python", line 61, in
NameError: name 'resultats' is not defined

#5

I think the problem is here. resultats is only defined inside of the calcule_classe_moyenne() function.

#6

I have therefore replaced by this ?

print calcule_classe_moyenne()resultats
print ecrire_lettre_note()note

#7

You can't call `calcule_classe_moyenne(resultats)` because there is no variable resultats. I think you should make a list students = [lloyd, alice, tyler] and call `calcule_classe_moyenne(students)`.

#8

Sniff @eveat
It does not work !!

#9

What happens now? Do you get an error?

#10

Yes the console displays the same mistake ... I do not know why: /

#11

tiens, voici mon code

lloyd = {
"noms": "Lloyd",
"devoirs": [90.0, 97.0, 75.0, 92.0],
"quiz": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"noms": "Alice",
"devoirs": [100.0, 92.0, 98.0, 100.0],
"quiz": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"noms": "Tyler",
"devoirs": [0.0, 87.0, 75.0, 22.0],
"quiz": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}

# Ajoutez votre fonction ci-dessous !

def moyenne(nombres):
total = sum(nombres)
total = float(total)
total = total / len(nombres)

def calcule_moyenne(etudiant):
devoirs = moyenne(etudiant["devoirs"])
quiz = moyenne(etudiant["quiz"])
tests = moyenne(etudiant["tests"])
return 0.1*devoirs + 0.3*quiz + 0.6*tests

def ecrire_lettre_note(note):
if note >= 90:
return "A"
elif note >= 80:
return "B"
elif note >= 70:
return "C"
elif note >= 60:
return "D"
else: return "F"

def calcule_classe_moyenne(etudiants):
resultats = []
for x in etudiants:
resultats.append(calcule_moyenne(x))
return moyenne(resultats)

etudiants = [lloyd,alice,tyler]
print calcule_classe_moyenne(etudiants)
print ecrire_lettre_note(calcul_classe_moyenne(etudiants))

#12

Merci, c'est a peu prés le même que le mien mais... ça ne fonctionne toujours pas

La console dit :

File "python", line 52
SyntaxError: 'return' outside function

#13

Il y a une erreur dans ce que je t'ai donné, le dernier print c'est "calcule".
Pour ce que dit ta console, je ne sais pas ce que tu as en ligne 52, si tu as copié collé ce que je t'ai donné, fais attention à l'indentation.

def calcule_classe_moyenne(etudiants):
----resultats = []
----for x in etudiants:
--------resultats.append(calcule_moyenne(x))
----return moyenne(resultats)

#14

hello

l'indentation est bonne... mais j'ai "None" dans la console et ça me demande si j'ai bien défini "calcule_classe_moyenne" ...

toujours coincée donc

#15

lloyd = {
"noms": "Lloyd",
"devoirs": [90.0, 97.0, 75.0, 92.0],
"quiz": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"noms": "Alice",
"devoirs": [100.0, 92.0, 98.0, 100.0],
"quiz": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"noms": "Tyler",
"devoirs": [0.0, 87.0, 75.0, 22.0],
"quiz": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}

def moyenne(nombres):
somme = sum(nombres)
somme = float(somme)
taille = len(nombres)
taille = float(taille)
total = somme/taille

def calcule_moyenne(etudiant):
devoirs = average(etudiant['devoirs'])
quiz = average(etudiant['quiz'])
tests = average(etudiant['tests'])
note = 0.1 * devoirs + 0.3 * quiz + 0.6 * tests
return note

def ecrire_lettre_note(note):
if note >= 90:
return "A"
elif note >= 80:
return "B"
elif note >= 70:
return "C"
elif note >= 60:
return "D"
else:
return "F"

def calcule_classe_moyenne(etudiants):
resultats = []
for etudiant in etudiants:
resultats.append(calcule_classe_moyenne(etudiant))
return moyenne(resultats)

def etudiants (lloyd,alice,tyler):
print calcule_classe_moyenne(etudiants)
print ecrire_lettre_note(calcule_classe_moyenne(etudiants))`texte préformaté indenté par 4 espaces`

#16

Salut dans ton for loop tu as appele la function que tu a creé au lieux d appele la function `calcul_moyen()`
Ici

``````def calcule_classe_moyenne(etudiants):
resultats = []
for etudiant in etudiants:
resultats.append(calcule_classe_moyenne(etudiant))
return moyenne(resultats)``````

Le for loop

``````for etudiant in etudiants:
resultats.append(calcule_classe_moyenne(etudiant))``````

essay de change `calcule_classe_moyenne()` par `calcule_moyenne()`

E que veut tu faire avec ici?

``````def etudiants (lloyd,alice,tyler):
print calcule_classe_moyenne(etudiants)
print``````

#17

j'ai mis le

pour que toutes les notes des 3 étudiants soit prises en comptes (sinon j'avais une erreur soit sur "lloyd" soit sur "alice"

le changement
calcule_classe_moyenne() par calcule_moyenne()
ne fonctionne pas non plus ...

#18

Alora essay sa ajout la list des etudiants dans le co de just avant le `def calcule_classe_moyenne`

``etudiants = [lloyd, alice, tyler ]``

Et enleve cet parti du code

``````def etudiants (lloyd,alice,tyler):
print calcule_classe_moyenne(etudiants)
print``````

#19

PUNAISE fini !! ça a fonctionné !!

Merci beaucoup !