Pourquoi cette impression même notation pour tout?
-
02-01-2020 - |
Question
Ma mission est de créer un programme qui ouvre et lit à partir d'un fichier texte, calcule les grades, y compris les poids moyens, donne une note finale, il prend la forme d'une note, puis les enregistre dans un nouveau fichier texte.Tout a bien fonctionné jusqu'à la conversion des points pour les notes lettres.Tous les grades sont entre 70-89, je n'ai donc pas la peine de mettre tout autre code pour A,B ou E(F).Chaque fois que j'essaie de convertir la teneur de la lettre de qualité, il change tout le monde est de qualité pour un C.Où ai-je s'est mal passé?
infile = open("c:\\Python34\\MyFiles\\ClassGradebook.txt","r")
outfile = open("c:\\Python34\\myfiles\\ClassGrades.txt","w")
aline = infile.readline() # uses readline method to read the first line of the file
def quizsum():
quizsum1 = quiz1 + quiz2 + quiz3
quizavg = (quizsum1 / 30) * .3
return float(quizavg)
def midtermsum():
midtermsum1 = midterm1 + midterm2
midtermavg = (midtermsum1 / 200) * .4
return float(midtermavg)
def finalsum():
finalsum1 = final1
finalavg = (finalsum1 / 100) * .3
return float(finalavg)
def lettergrade():
if printedgrade >= 70 <= 79:
return "C"
else:
return "B"
while aline:
items = aline.split()
dataline = items[0] + " " + items[1]
quiz1 = int(items[2])
quiz2 = int(items[3])
quiz3 = int(items[4])
midterm1 = int(items[5])
midterm2 = int(items[6])
final1 = int(items[7])
quizavg = quizsum()
midtermavg = midtermsum()
finalavg = finalsum()
gradetotal = quizavg + midtermavg + finalavg
printedgrade = gradetotal * 100
printedgrade2 = lettergrade()
print(dataline)
print(printedgrade2)
outfile.write(printedgrade2 + '\n') newline character
aline = infile.readline()
infile.close()
outfile.close()
La solution
Parce que votre if
est toujours l'évaluation de vrai parce qu'il est hors de commande.Il devrait être:
70 <= printedgrade <= 79
Votre énoncé est toujours l'évaluation comme vrai, car comme vous l'avez dit tous les grades sont 70-89 donc printedgrade
sera supérieur ou égal à 70 et 70 est inférieur à 79 il en sera toujours ainsi True
.
Bien que je suggère fortement de faire votre travail de code pour tous les grades.Vous ne pouvez pas assumer parce que cette fois, les notes sont dans une certaine gamme qu'ils y en aura toujours.
Autres conseils
if printedgrade >= 70 <= 79:
devrait être
if printedgrade >= 70 and printedgrade <= 79:
Vous pouvez aussi faire quelque chose comme:
if printedgrade >= 90:
return "A"
elif printedgrade >= 80:
return "B"
elif printedgrade >= 70:
return "C"
...