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,我一直盯着这段代码超过一个小时,我无法弄清楚我的生活为什么它不起作用。谢谢。
答案 0 :(得分:1)
您需要将float()
电话的返回值分配给score
:
score = float(score)
score
以字符串形式开始,是一个不可变对象,并且它不会就地转换。 float()
返回 new float对象,而忽略该返回值。
您可以使用bisect
module将值映射到字母,而不是使用5 if
个语句:
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 :(得分:1)
这实际上并未将变量score
更改为float
float(score)
您必须将其分配回score
score = float(score)
或者只是在输入变量
时这样做score = float(raw_input("Enter a score between 0.0 and 1.0:"))
答案 2 :(得分:0)
再次将该值保存在分数中。
score = float(score)