try / except构造python中的更多条件

时间:2015-01-15 18:37:19

标签: python

我正在尝试使用try / except运行一个小程序。它应该在A和F之间返回一个标记,输入值(得分)在0和1之间。当我运行时它按预期工作,即输入0.6它返回D,输入0.72它返回C等等上。如果我输入一个字符串,我会在except语句之后打印错误,因为它应该是。但是,如果我输入一个大于1的数字(超出范围(0-1)),我想在except语句后得到相同的错误,但我得到了A.似乎

score_float >=0.0 and score_float <= 1.0

不起作用。我该怎么解决?感谢

这是脚本:

 score = raw_input('Enter score: ')

try:
    score_float = float(score)
    score_float >=0.0 and score_float <= 1.0
    if score_float < 0.6:
        print 'F'
    elif score_float >= 0.6 and score_float < 0.7 :
        print 'D'
    elif score_float >= 0.7 and score_float < 0.8 :
        print 'C'
    elif score_float >= 0.8 and score_float < 0.9 :
        print 'B'
    else:
        print 'A'    
except:
print 'Error, the score has to be a float number between 0.0 and 1.0'       

1 个答案:

答案 0 :(得分:3)

使用比较运算符测试浮点值不会引发异常,因此永远不会到达异常处理程序。 if语句只是false,并且未选中该分支。

手动提出异常(使用raise ValueError('Value out of range')或使用其他print明确处理该情况。

您需要关注引发异常的唯一声明是float()函数调用。您应该将处理程序限制为仅 的语句,而捕获在给定的输入不是float时引发的ValueError异常。您可以将该点的范围检查组合为仅包含一个打印语句:

score = raw_input('Enter score: ')

try:
    score_float = float(score)
    if not (0.0 <= score_float <= 1.0):
        raise ValueError('Number out of range')
except ValueError:
    print 'Error, please enter a valid number between 0.0 and 1.0'
else:
    if score_float < 0.6:
        print 'F'
    elif 0.6 >= score_float < 0.7:
        print 'D'
    elif score_float < 0.8:
        print 'C'
    elif score_float < 0.9:
        print 'B'
    else:
        print 'A'    

我简化了你的考试;您不需要测试早期ifelif测试已经打折的下限。

您可以使用bisect module将浮点值转换为更简单的字母:

import bisect

names = ['F', 'D', 'C', 'B', 'A']
values = [0.6, 0.7, 0.8, 0.9, float('inf')]
print names[bisect.bisect(values, score_float)]

由于1.0 包含包含在<{1}}中以使二分行正常工作的值,我使用无穷大来匹配最后一个条目。

演示:

'A'