题目
按照规定,在高速公路上行使的机动车,超出本车道限速的10%则处200元罚款;若超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
①输入格式:
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
②输出格式:
若属于正常行驶,则输出“OK”;
若应处罚款,则输出“Exceed x%. Ticket 200”;
若应吊销驾驶证,则输出“Exceed x%. License Revoked”
问题描述
>>> speed =list(map(float,input().split()))
110 100
>>> x=speed[1]*1.1
>>> x
110.00000000000001
多出的那0.000000000001导致判断语句失效
解决方法
外面套上round()取整
speed =list(map(float,input().split()))#输入字符串转换为列表
more = round((speed[0]/speed[1] -1) * 100) #取整
if speed[0] < round(speed[1]*1.1):
print('OK')
else:
if speed[0] >= round(speed[1] *1.5):
print('Exeed '+str(more)+'%. License Revoked')
else:
print('Exeed '+str(more)+'%. Ticket 200')
精确计算问题
究其原因是因为我们输入的是十进制,他要把十进制转换为二进制,再进行运算。但是,再转华中,浮点数转化为二进制就出问题了。
例如十进制的0.1,转化为二进制是0.00011001100110011001100110011001100……
转化为二进制后不会精确的等于十进制的0.1
解决方法:decimal模块,fractions模块,由SciPy提供的Numerical Python包