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()  
War es hilfreich?

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

generasacodicetagpre.

sollte

sein generasacodicetagpre.

Sie könnten auch etwas tun:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top