2014-10-17 82 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

這實際上並不改變變量scorefloat

float(score) 

您必須分配回score

score = float(score) 

或者只是做所以你輸入變量

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

只是將該值再次保存在分數中。

score = float(score)