python高速公路超速处罚以及精确计算问题

题目

按照规定,在高速公路上行使的机动车,超出本车道限速的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包

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容