2014-10-17 4 views
-2
score = raw_input("Enter a score between 0.0 and 1.0:") 

float(score) 

#if score < 0.0: 
    #print "Invalid input." 
    #exit 

#elif score > 1.0: 
    #print "Invalid input." 
    #exit 

if score >= .9: 
    print "A" 

elif score >= .8: 
    print "B" 

elif score >= .7: 
    print "C" 

elif score >= .6: 
    print "D" 

elif score < .6: 
    print "F" 

else: 
    print "Invalid input." 

У меня возникли проблемы с вышеуказанным кодом python; что-то кажется неправильным с моим первоначальным выражением if, но я не могу понять, что. Независимо от того, какой вход я тестирую, он всегда возвращает A в качестве вывода. Любые указания на то, что я делаю неправильно, были бы замечательными, извините за такой простой вопрос, но я только начал изучать python, я смотрел на этот код более часа, и я не могу понять жизнь меня почему он не работает. Спасибо.новичок в python, если оператор

ответ

1

Вам необходимо присвоить возвращаемое значение float() вызова назад к score:

score = float(score) 

score начинается в виде строки, неизменный объект, и он не будет преобразован в месте. float() возвращает новый плавающий объект, и вы игнорируете это возвращаемое значение.

Вместо того чтобы использовать 5 if заявления, вы можете использовать bisect module для отображения значения в письмо:

import bisect 

score = float(raw_input("Enter a score between 0.0 and 1.0:")) 

scores = [0, .6, .7, .8, .9] 
grades = ['F', 'D', 'C', 'B', 'A'] 

print grades[bisect.bisect(scores, score) - 1] 

Для любого счета, bisect.bisect() возвращает точку вставки в scores список после в ближайшее нижнее или равное значение; поэтому для .9 он вернет 5, чтобы вставить значение в конец, но ни для чего от 0 до (но не включая) 0.6 оно вернется 1.

Все, что вам нужно сделать, это вычесть 1 и использовать тот же самый индекс в списке grades, чтобы получить соответствующий класс.

Демо:

>>> import bisect 
>>> scores = [0, .6, .7, .8, .9] 
>>> grades = ['F', 'D', 'C', 'B', 'A'] 
>>> bisect.bisect(scores, .75) 
3 
>>> grades[bisect.bisect(scores, .75) - 1] 
'C' 
>>> grades[bisect.bisect(scores, .25) - 1] 
'F' 
>>> grades[bisect.bisect(scores, .9) - 1] 
'A' 
1

Это не изменяет переменную score к float

float(score) 

Вы должны назначить его обратно score

score = float(score) 

Или просто сделать так как вы вводите переменную

score = float(raw_input("Enter a score between 0.0 and 1.0:")) 
0

просто сохраните это значение в счете еще раз.

score = float(score)