第二十节:如何用一行代码让运行速度提高近10倍
上节课我们讲了使用一行代码就把程序的运算性能提升了将近10倍,在文章末尾老师给大家留了个思考,怎么样能够使得程序的性能更加地优化呢?
在讲授之前先给大家做下思想的引导。举个例子,还是说打印100以内的质数,如果是要判断100,利用上节课的思想,程序只需要判断100是否可以整除2就行了,这种类型的数字这么判断都是没有问题的,那么对于97来说呢,是不是还是需要从2~96进行判断,但是结合实际情况来看,96有没有可能被97整除,显然是不合理的,95、94、93、、、等也都是如此。那该如何更加优化这个情况?
继续跟着老师的思路往下走: 咱们先拿一个合数来举个例子,假如说是36,他的因数都有什么,1,36,2,18,3,12,4,9,6,有没有发现它的因数都是成对出现的,除了6*6这么一种情况。那其实咱们只需要判断j小于i的算术平方根的位置就没必要再往下算了,但是为了避免漏掉像是6这种数字,还是要使得j<=i**0.5
,就可以保证97这种情况进一步的优化了。代码如下:
from time import*
begin=time()
i=2
while i<=10000:
flag = True
j=2
while j <= i ** 0.5:
if i % j == 0 :
flag = False
break
j += 1
if flag :
pass
i+=1
end=time()
print("程序运行的时长为:",end-begin,"秒")
执行结果为:
此时同样判断2~10000以内的质数就只需要0.0418秒了。即使是将数字改为100000,程序执行也只需要1.009秒。
看起来只是三个符号的改变,却让程序的性能得到了极大的提升,这是对我们的数学能力和分析能力的双重考核,但是现在想不出来这种方式也不需要担心,随着后面的学习,会更加频繁的进行这种思考,慢慢的就耳濡目染自己也学会了。
入门课程到这里就基本结束了,在进行进阶教程之前先来带大家开发一个小游戏:唐僧大战白骨精!带大家感受一下python的趣味之处。
第二十二节:游戏的运行逻辑概述