Warum wird hier für alles die gleiche Buchstabennote gedruckt?
-
02-01-2020 - |
Frage
Meine Aufgabe besteht darin, ein Programm zu erstellen, das eine Textdatei öffnet und daraus liest, Noten einschließlich der Durchschnittsgewichte berechnet, eine Abschlussnote vergibt, diese in eine Buchstabennote umwandelt und sie dann in eine neue Textdatei schreibt.Bis zur Umrechnung der Punkte in Buchstabennoten hat alles gut funktioniert.Alle Noten liegen zwischen 70 und 89, daher habe ich mir nicht die Mühe gemacht, einen anderen Code für A, B oder E(F) einzugeben.Immer wenn ich versuche, die Note in eine Buchstabennote umzuwandeln, ändert sich die Note aller in eine C.Was habe ich falsch gemacht?
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()
Lösung
Weil du if
wertet immer true aus, weil es nicht in Ordnung ist.Es sollte sein:
70 <= printedgrade <= 79
Ihre Aussage wird immer als wahr bewertet, da alle Noten, wie Sie sagten, zwischen 70 und 89 liegen printedgrade
wird größer oder gleich 70 sein und 70 ist kleiner als 79, also wird es immer so sein True
.
Allerdings würde ich dringend empfehlen, dass Ihr Code für alle Klassenstufen funktioniert.Da die Noten dieses Mal in einem bestimmten Bereich liegen, kann man nicht davon ausgehen, dass dies immer der Fall sein wird.
Andere Tipps
sollte
sein generasacodicetagpre.Sie könnten auch etwas tun:
generasacodicetagpre.