如何修改此代码

时间:2016-07-15 11:14:17

标签: python

score = raw_input("Enter Score:___ (between 0.0 and 1.0)")
try:
    y = float(score)
except:
    print 'Type a Number'      
try:
    if y > 1 or y < 0:
        y = 'Not in Score Range'
    x = int(y)
except:
    print 'Not in Score Range'
else:
    if y >= 0.9:
        print 'A'
    elif y >= .8:
        print 'B'
    elif y >= .7:
        print 'C' 
    elif y >= .6:
        print 'D'       
    else:
        print 'F'

我试图消除用户的无效输入。使用此代码,如果输入不在(0,1)中,则结果显示&#34;不在分数范围&#34;中,这是好的。

但是,当输入不是数字时,结果显示&#34;键入数字&#34;和&#34;不在分数范围&#34;。

我希望它只显示&#34;键入数字&#34;。谁能告诉我怎么做?我正在考虑使用&#34; elif&#34;,但只是不知道如何处理它。

3 个答案:

答案 0 :(得分:2)

您只需添加flag变量

即可
score = raw_input("Enter Score:___ (between 0.0 and 1.0)")

flag = 0
try:
    y = float(score)
except:
    print 'Type a Number'      
    flag = 1

if flag == 0:
    try:
        if y > 1 or y < 0:
            y = 'Not in Score Range'
        x = int(y)
    except:
        print 'Not in Score Range'
    else:
        if y >= 0.9:
            print 'A'
        elif y >= .8:
            print 'B'
        elif y >= .7:
            print 'C' 
        elif y >= .6:
            print 'D'       
        else:
            print 'F'

更新1:

我也不是flag的粉丝。所以这是一种无标记的方式:

score = raw_input("Enter Score:___ (between 0.0 and 1.0)")

try:
    y = float(score)
except:
    print 'Type a Number'      
else:
    try:
        if y > 1 or y < 0:
            y = 'Not in Score Range'
        x = int(y)
    except:
        print 'Not in Score Range'
    else:
        if y >= 0.9:
            print 'A'
        elif y >= .8:
            print 'B'
        elif y >= .7:
            print 'C' 
        elif y >= .6:
            print 'D'       
        else:
            print 'F'
  

try ... except语句有一个可选的else子句,当存在时,必须遵循所有except子句。如果try子句不引发异常,则必须执行的代码很有用。例如:

来源:link

如有任何问题,请发表评论。

希望有所帮助:)

答案 1 :(得分:2)

我个人更喜欢在没有旗帜的情况下工作,只需将其包装在一个函数中。

vtkNAME-7.0

答案 2 :(得分:0)

要添加另一个变体,您可以区分不同的异常。对于这个问题可能有点过头了,但我认为一般来说这更优雅:

class OutOfRangeException(Exception):
    pass

def stringToScore(string):
    x = float(string)
    if not ( 0 < x < 1):
        raise OutOfRangeException()


score = raw_input("Enter Score:___ (between 0.0 and 1.0)")
try:
    y = stringToScore(score)

    if y >= 0.9:
        print 'A'
    elif y >= .8:
        print 'B'
    elif y >= .7:
        print 'C'
    elif y >= .6:
        print 'D'
    else:
        print 'F'
except ValueError:
    print 'Type a Number'
except OutOfRangeException:
    print 'Not in Score Range'