python输出1000以内回文数_「答案」python每日一题20201108
生活随笔
收集整理的這篇文章主要介紹了
python输出1000以内回文数_「答案」python每日一题20201108
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
質數是指在大于1的自然數中,除了1和它本身以外不再有其他因數的自然數。用python輸出1000以內的所有質數。
#####方法一#####def isPrime(n): if n <=1: return False for k in range(2,round(n**0.5)+1): if n%k==0: return False return Truefor i in range(2,1001): if isPrime(i): print(i,end=",")【評析】
這是常規解法,定義一個質數判斷函數,用每一個待檢測數除以從2到該數的平方根區間內的數,如果發現存在余數為0情況則斷定該數不是質數。
#####方法二#####print([i for i in range(2,1001) if 0 not in [i%n for n in range(2,round(i**0.5)+1)] ])【評析】
如果看過昨天的題目評析,應該對這個形式并不陌生。這就是用for生成一個數列并自動賦值,當然這個還帶了一個if的異形表達。
在這里我放上第二解法的目的倒不是為了顯得很酷,實際是我要指出在python中直接生成列表,然后一起打印輸出,比判斷一個輸出一個效率要高很多(執行了很多次print)。因為涉及外設的輸入和輸出都是有開銷的,能合并進行的就要合并進行,這個在實際應用時還是要注意。
下面是我對這兩個例子做了修改,以便于打印輸出不同方法執行的時間。
#####方法一#####from datetime import datetimett=datetime.now()#=================def isPrime(n): if n <=1: return False for k in range(2,round(n**0.5)+1): if n%k==0: return False return Truefor i in range(2,1001): if isPrime(i): print(i,end=",")#=================print()print (datetime.now()-tt)#####方法二#####tt=datetime.now()#=================print([i for i in range(2,1001) if 0 not in [i%n for n in range(2,round(i**0.5)+1)] ])#=================print()print (datetime.now()-tt)結果如下:
沒有對比就沒有傷害,效率相差實在巨大。
進而如果我們對方法一進行修改,把所有判斷出的質數加入列表,最后一次性輸出,情況會有改觀嗎?
#####方法一修改#####from datetime import datetimett=datetime.now()#=================pp=[]def isPrime(n): if n <=1: return False for x in range(2,round(n**0.5)+1): if n%x==0: return False pp.append(n)#添加到列表中 return Truefor i in range(2,1001): isPrime(i)print(pp)#只輸出一次#=================print()print (datetime.now()-tt)運行結果:
可見,這個效率提升是顯而易見的。
總結
以上是生活随笔為你收集整理的python输出1000以内回文数_「答案」python每日一题20201108的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea启动tomcat提示占用了端口8
- 下一篇: package.json、tsconfi