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()  
Était-ce utile?

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"
...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top