python中的初学者,if语句

时间:2014-10-17 18:34:48

标签: python if-statement nested

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,我一直盯着这段代码超过一个小时,我无法弄清楚我的生活为什么它不起作用。谢谢。

3 个答案:

答案 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)