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;,但只是不知道如何处理它。
答案 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'