2013-12-20 2 views
-1
a = 4.0 
b = 3.0 
c = 2.0 
d = 1.0 
f = 0.0 
counter = 0 
gpa = 0 
while True: 
    grade = input("what is your grade ") 
    if(grade == "A" or "a"): 
     counter += 1 
     gpa += a 
    elif(grade == "B" or "b"): 
     counter += 1 
     gpa += b 
    elif(grade == "C" or "c"): 
     counter += 1 
     gpa += c 
    elif(grade == "D" or "d"): 
     counter += 1 
     gpa += d 
    elif(grade == "F" or "f"): 
     counter += 1 
     gpa += f 
    elif (grade == ""): 
     finalgrade = (gpa/counter) 
     print(finalgrade) 
     break 
    else: 
     print ("invalid input") 

Так что я пытался получить эту работу, но независимо от того, что я делаю, я не могу понять это ..... когда я использую отладчик это не очень помогает, но говорит, что идет мимо всех Элиф заявленийGPA калькулятор ошибка не может исправить

+1

возможно дубликат [если х или у, г == бла] (http://stackoverflow.com/questions/15112125/if-x-or-y-or-z-blah) – aIKid

+0

Проходит мимо всех 'elif', потому что 'if' всегда' True' –

ответ

0

Вместо

grade == "A" or "a" #always True, since "a" is truthy 

использования

grade == "A" or grade == "a" 

или

grade.upper() == "A" 

Аналогичным образом измените другие утверждения.

Хотя я бы

import itertools 

points = {'A':4, 'B':3, 'C':2, 'D':1, 'F':0} 

total = 0. 
for count in itertools.count(): 
    grade = input('What is your grade ') 
    if not grade: 
     break 
    try: 
     total += points[grade] 
    except KeyError: 
     print('invalid input') 
print(total/count) 
+0

должен исправить это прямо над утверждениями elif ? – user3121633

+0

@ пользователь3121633, да. Прямо сейчас, он всегда застревает в первом 'if'. –

+0

ok позвольте мне попробовать и посмотреть, работает ли он – user3121633

1

Эта:

if grade == "A" or "a" 

ли на самом деле не делать то, что вы думаете, что он делает. Из-за приоритета оператора в python он вычисляет grade=="A", а затем or с "a". Это всегда будет оцениваться до True.

Используйте in оператор вместо:

if grade in ("A", "a"): 

Или еще лучше:

if grade.lower() == "a": 
Смежные вопросы