Pregunta

Mi tarea es la de crear un programa que se abre y se lee desde un archivo de texto, calcula los grados, incluyendo los pesos medios, le da una calificación final, cambia a una calificación de letra y, a continuación, escribe en un archivo de texto nuevo.Todo ha funcionado bien hasta la conversión de los puntos a las calificaciones de letras.Todos los grados están entre 70-89, así que todavía no se molestan en poner cualquier otro código para a,B, o E(F).Siempre que se intenta convertir el grado de calificación de letra, cambia todos los grados del C.¿De dónde me salió mal?

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()  
¿Fue útil?

Solución

Debido a su if siempre está evaluando la verdad porque está fuera de orden.Debe ser:

70 <= printedgrade <= 79

Su declaración es siempre evaluar como verdadero porque, como usted dijo que todos los grados son 70-89 así printedgrade será mayor que o igual a 70 y 70 es menor que el 79 por lo que siempre será True.

Aunque me gustaría sugerir fuertemente que el código de trabajo para todos los grados.No se puede asumir, porque esta vez las calificaciones están en un cierto intervalo que siempre será.

Otros consejos

if printedgrade >= 70 <= 79:

debe ser

if printedgrade >= 70 and printedgrade <= 79:

También podrías hacer algo así:

if printedgrade >= 90:
    return "A"
elif printedgrade >= 80:
    return "B"
elif printedgrade >= 70:
    return "C"
...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top