Pyhton为什么这么厉害?无意中从一道奥数题发现Python真的爽翻了
在小編我剛接觸Python的時候,心里就在想:Python的代碼寫這么少,就可以實現(xiàn)一個小功能了!確實也有點方便啊!或許出于程序員,我很想將每一門語言都學(xué)一遍,不管學(xué)好學(xué)差,至少我都了解,心里有個底,總是好的!
之前在一個平臺有看到這么一張圖片,引發(fā)了我的興趣:
這個題目有點意思!不過對于做這題的小朋友來說,確實難度有點大!
這道題本身不難,只需要簡單的推理就可以做出來:
3位數(shù)+3位數(shù)等于4位數(shù),那么“要”只能是1。
同上,“好”+“要”>=10,因此“好”只能是9,“做”是0。
個位是兩個“好”相加,于是“事”是8。
所以答案是,“要做好事”=1098。不過今天的重點并不在這里,因為我這張圖片下方貼了一段代碼,大概是有哪位家長無聊寫的:
這里有我自己整理了一套最新的python系統(tǒng)學(xué)習(xí)教程,包括從基礎(chǔ)的python腳本到web開發(fā)、 爬蟲、數(shù)據(jù)分析、數(shù)據(jù)可視化、機器學(xué)習(xí)等。 小編這里推薦加小編的python學(xué)習(xí)群:895,817, 687
程序員現(xiàn)在已經(jīng)很普遍了,隨便一個什么事情,或許程序員都可以以代碼的形式解答了!
不過仔細(xì)看看這段代碼貌似是Arduino的C吧!
Anyway,程序的思路很簡單,用窮舉法把所有的數(shù)字都試一遍,找出滿足條件(加法等式)的組合。作為一個Python粉,我覺得這樣的代碼實在缺乏美感,特別是套了4層循環(huán),而且還用了一個特別low的判斷來檢查4個數(shù)字是不是相互重復(fù)(根據(jù)題目,每個漢字代表一個不同的數(shù)字,所以相互之間不應(yīng)該重復(fù))。這道題目只是4位數(shù),要是位數(shù)更多的話,這么寫真的要累死啦。
那么用Python寫這樣一個程序,能不能簡潔一點呢?我們換個思路,4個漢字,每個漢字的取值范圍都是0-9,且相互之間不重復(fù),這相當(dāng)于從包含10個元素的集合[0,9]中任取4個元素的排列(permutation),即P(10,4)。學(xué)過排列組合的話我們就可以計算出P(10,4) = 10x9x8x7 = 5040,也就是說一共有5040種不同的排列方式。
Python里面有一個神器叫迭代器(iterator),而且Python還自帶了itertools標(biāo)準(zhǔn)庫,用來產(chǎn)生各種各樣的迭代器,其中就包括排列組合迭代器。這樣一來事情就簡單了,我們先產(chǎn)生一個排列迭代器,然后再用for迭代它,就可以找出滿足條件的排列了,不需要寫4層循環(huán),也不需要檢查4個數(shù)字是否相互重復(fù):
只需要5行代碼!而且其實最后一行break沒有也無所謂,上面那段C的代碼也沒有做循環(huán)跳出嘛。運行一下看結(jié)果:
YAO:1, ZUO:0, HAO:9, SHI:8
完美!
總結(jié)
以上是生活随笔為你收集整理的Pyhton为什么这么厉害?无意中从一道奥数题发现Python真的爽翻了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI实战:从入门到精通系列——用感知器实
- 下一篇: 手握价值70万录用书的程序员提离职,领导