999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Python求解“棋盤米粒倍增”問題

2020-12-15 06:56:50牟曉東
電腦報 2020年47期

牟曉東

印度有個古老傳說:舍罕王打算獎賞國際象棋的發明人——西薩宰相,在被問及想要得到的賞賜時,西薩回答說:“在棋盤的第1格放1粒大米,第2格放2粒,第3格放4粒,之后的每一格中的米粒數目都是相鄰前一格的兩倍,一直放到最后的第64格,我只要這一棋盤的大米。”

最初國王不以為意,但最終的結果卻是舉全國之力都無法填滿這個棋盤。果真是這樣嗎?我們使用Python編程來解決這個“棋盤米粒倍增”問題。

1.常規的循環求和法

首先通過“sum = 0”語句建立并為變量sum賦值為0,準備存放最終的米粒數目;接著使用for循環:“for i in range(64):”,其中的range()函數負責提供從0到63共64個循環計數;由于每格中米粒的數目可表示為“2的(n-1)次方”,所以循環體語句為“sum += 2 ** i”,將每次循環得到的該格子中米粒的數量與之前所有格子中米粒的數量和進行求和;循環結束后通過print語句將求和結果輸出。

將程序保存為chessrice1.py,運行后得到結果(如圖1):

棋盤米粒的總數為:184467440737

09551615 粒。

2.使用列表推導式計算

Python的列表推導式在邏輯上等同于循環語句,優點是形式簡潔且速度快,它能夠以非常簡潔的方式對列表(或其他可迭代對象)中的元素進行遍歷、過濾或再次計算,從而快速生成滿足特定需求的列表。

Python的列表推導式可分解為“表達式+循環”兩部分,比如通過“sum = sum([2**i for i in range(64)])”這一個語句即可完成所有64格子中米粒的數量求和,其中的“2**i”即“表達式”部分,作用是計算每格中的米粒數量;后面的“for i in range(64)”是“循環”部分,作用是控制完成從0到63共64次循環;sum變量的賦值,是通過內置求和sum()函數來完成的。

之前使用常規循環求和法得到的結果是一個20位長的天文數字,單位是“粒”,不夠直觀。經查詢,1千克大米約有52000粒,通過“mass = int(sum / 52000000)”語句,將這些大米的數目轉換成單位為“噸”并進行求整,賦值給mass變量,最后打印輸出。

將程序保存為chessrice2.py,運行后得到結果(如圖2):

棋盤米粒的總數為:184467440737

09551615 粒。

這些米粒的總質量為:3547450783

40 噸。

米粒總數的計算結果與循環求和法一致,它們的總質量是個12位數字,約是3547.5億噸!中國目前每年產大米約2億噸,所以國王無論如何也拿不出數量如此龐大的大米,根本就填不滿宰相的棋盤。

3.兩種方法打印“九九乘法表”

不管是使用常規循環求和還是使用列表推導式,我們都可以正確求解“棋盤米粒倍增”問題,二者在各種問題的求解過程中都比較方便,包括循環的嵌套,比如打印“九九乘法表”。

(1)常規的雙層循環嵌套

外層循環語句為“for i in range(1,10):”,作用是從1到9循環;內層循環語句為“for j in range(1,i+1):”,同樣是使用range()進行對應次數的循環;循環體語句為“print(‘{0}*{1} = {2}.format(j,i,i*j),end=‘ ) ”,這個print語句用到了Python的format()方法進行字符串格式化,其中的“{0}”、“{1}”和“{2}”是位置參數,作用是將后面“format(j,i,i*j)”中的三個變量的對應數值進行占位輸出;“end=‘ ”的作用是設置末尾不換行,而不是print的默認“換行”值;內層循環結束后是一個“print()”空語句,作用是換行,即打印完同一個乘數(比如同是乘以3)的一行循環后,回車換行。

將程序保存為ninenine1.py,運行后得到“九九乘法表”(如圖3)。

(2)列表推導式循環嵌套

外層循環語句仍為“for i in range(1,10):”,內層直接就是一個列表推導式(因為本身就是一層循環):“print(“”.join([“%d*%d=%-2d”%(j,i,j*i) for j in range(1,i+1)]))”。這個print語句中的“join()”方法是將序列中的元素以指定的字符連接生成一個新字符串,依次連接到前面的“”空串后面;其中的“%d”的作用是將數據按照整型格式化輸出,“-”表示左對齊,“2”表示數字不足兩位時進行位數補齊(不足位置用空格)。列表推導式后面的循環部分是“for j in range(1,i+1)”語句,與常規雙層循環嵌套的內層循環語句完全相同。

將程序保存為ninenine2.py,運行后,同樣也得到了“九九乘法表”(如圖4)。

主站蜘蛛池模板: 五月激激激综合网色播免费| аⅴ资源中文在线天堂| 国产成人h在线观看网站站| 国产欧美日韩在线一区| 四虎免费视频网站| 91亚洲精选| 欧美综合区自拍亚洲综合天堂| 91精品国产自产在线老师啪l| 国产成人精品亚洲日本对白优播| 日本欧美成人免费| AV不卡无码免费一区二区三区| 国产成人精品在线1区| 亚洲中文无码av永久伊人| 视频国产精品丝袜第一页| 99精品欧美一区| 国产99视频免费精品是看6| 国产乱子伦一区二区=| 男人天堂伊人网| 成人国产精品一级毛片天堂| 亚洲人成网7777777国产| 国产成人高清精品免费| 成·人免费午夜无码视频在线观看 | 天天综合网亚洲网站| 亚洲精品综合一二三区在线| 自拍中文字幕| 欧美日韩国产系列在线观看| 久久无码高潮喷水| 日本少妇又色又爽又高潮| 午夜无码一区二区三区| 伊人91视频| 波多野结衣AV无码久久一区| 日韩中文精品亚洲第三区| 欧美va亚洲va香蕉在线| 亚洲毛片网站| 老司机精品久久| 一级做a爰片久久免费| 国产99热| 婷婷激情亚洲| 国产欧美日韩18| 99精品国产自在现线观看| 五月丁香在线视频| 黄色在线不卡| 欧美日韩一区二区在线免费观看 | 国产欧美日韩在线在线不卡视频| 亚卅精品无码久久毛片乌克兰| 激情综合网激情综合| 国产免费精彩视频| 欧美成人午夜视频| 高清无码一本到东京热| 99久久国产精品无码| 午夜a视频| 中国黄色一级视频| 97超级碰碰碰碰精品| 99在线小视频| 久久精品中文字幕少妇| 一级毛片a女人刺激视频免费| 国产成人亚洲无码淙合青草| 国产成在线观看免费视频| 亚洲V日韩V无码一区二区 | 亚洲成人一区二区三区| 男女男精品视频| 亚洲色图欧美一区| 九色综合伊人久久富二代| 亚洲制服丝袜第一页| 中文字幕无码制服中字| 久久中文电影| 中文字幕啪啪| 无码有码中文字幕| 色悠久久久久久久综合网伊人| a毛片免费在线观看| 日韩欧美综合在线制服| 高潮毛片免费观看| aⅴ免费在线观看| 国产免费好大好硬视频| 国产一在线| 97亚洲色综久久精品| 91精品国产自产91精品资源| 国产女人在线视频| 久久公开视频| 亚卅精品无码久久毛片乌克兰| 日韩国产亚洲一区二区在线观看| 少妇极品熟妇人妻专区视频|