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

Python011

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

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

1. 使用装饰器来衡量函数执行时间有一个简单方法,那就是定义一个装饰器来测量函数的执行时间,并输出结果: import time from functoolsimport wraps import random def fn_timer(function):   @wraps(function)   def function_timer(*args, **kwargs):       t0= time.time()       result= function(*args, **kwargs)       t1= time.time()       print("Total time running %s: %s seconds" %           (function.__name__, str(t1- t0)) )       return result return function_timer @fn_timer def random_sort(n):   return sorted([random.random() for i in range(n)]) if __name__== "__main__":   random_sort(2000000) 输出:Total time running random_sort: 0.6598007678985596 seconds 使用方式的话,就是在要监控的函数定义上面加上 @fn_timer 就行了 或者 # 可监控程序运行时间 import time import random def clock(func):     def wrapper(*args, **kwargs):         start_time= time.time()         result= func(*args, **kwargs)         end_time= time.time()         print("共耗时: %s秒" % round(end_time- start_time, 5))         return result return wrapper @clock def random_sort(n):   return sorted([random.random() for i in range(n)]) if __name__== "__main__":   random_sort(2000000) 输出结果:共耗时: 0.65634秒2. 使用timeit模块另一种方法是使用timeit模块,用来计算平均时间消耗。 执行下面的脚本可以运行该模块。这里的timing_functions是Python脚本文件名称。 在输出的末尾,可以看到以下结果:4 loops, best of 5: 2.08 sec per loop 这表示测试了4次,平均每次测试重复5次,最好的测试结果是2.08秒。 如果不指定测试或重复次数,默认值为10次测试,每次重复5次。3. 使用Unix系统中的time命令然而,装饰器和timeit都是基于Python的。在外部环境测试Python时,unix time实用工具就非常有用。 运行time实用工具: 输出结果为: Total time running random_sort: 1.3931210041 seconds real 1.49 user 1.40 sys 0.08 第一行来自预定义的装饰器,其他三行为:     real表示的是执行脚本的总时间     user表示的是执行脚本消耗的CPU时间。     sys表示的是执行内核函数消耗的时间。 注意:根据维基百科的定义,内核是一个计算机程序,用来管理软件的输入输出,并将其翻译成CPU和其他计算机中的电子设备能够执行的数据处理指令。 因此,Real执行时间和User+Sys执行时间的差就是消耗在输入/输出和系统执行其他任务时消耗的时间。4. 使用cProfile模块 5. 使用line_profiler模块6. 使用memory_profiler模块7. 使用guppy包