我有一个简单的程序可以将数字分数转换为字母分数,但是条件score_int >=0 and score_int <= 100
不起作用。它让我输入值< 0
和> 100
,并且不显示错误消息“请输入有效的数字”。
while True :
score_str = input('Enter your numerical score:')
try:
score_int = int(score_str)
score_int >= 0 and score_int <= 100 # this condition isn't working for some reason**
except:
print('Enter a valid number')
continue
if score_int >= 90 and score_int <= 100 :
print('A')
continue
elif score_int >= 80 and score_int < 90 :
print('B')
continue
elif score_int >= 70 and score_int < 80 :
print('C')
continue
elif score_int >= 60 and score_int <= 70 :
print('D')
continue
elif score_int <= 60 :
print('F')
continue
应为值〈0和〉100时显示错误消息的代码
3条答案
按热度按时间mm9b1k5b1#
若要在表达式不是
True
时引发异常,可以使用assert
关键字:如果带有
assert
的表达式为False
,则它将使AssertionException
自乘。此外,您应该避免使用裸except子句。请参见What is wrong with using a bare 'except'?相反,请指定您希望
try
块中的代码引发的异常。在这种情况下,您的代码可以引发ValueError
(如果score_str
是无效整数,则引发AssertionError
,如果上面的assert
失败。您的代码为:
我还删除了条件中不必要的
continue
,因为它们是elif
条件,并且在if..elif
块之后的循环中没有任何内容mfuanj7w2#
当你运行这个表达式
score_int >= 0 and score_int <= 100
时,你并没有对它的值做任何事情。Try块只在异常被引发时才失败,而不是在真或假的情况下。这就是if语句的作用。必须在if语句的条件中使用表达式。
所以我的方法是把你写的条件反过来,如果用户给出一个小于0或者大于100的数字,我们要求他们输入一个0到100之间的数字。
我还删除了所有的
continue
语句,因为它们不是必需的,但是如果您愿意,也可以保留它们。fdbelqdn3#
考虑
if
/elif
条件都不通过的情况。剩下的是什么?分数福尔斯预期值的情况。因此,只需添加一个else
来捕获这些情况。此外,由于循环将继续,因此不需要所有continue
语句。以下是一种方法:这还允许您将最少的代码量放在
try
块中,这对较大的项目调试很有帮助,并允许您捕获预期的特定错误。要获得一种简洁的分数到等级Map方法,请查看bisect模块中的第一个示例。