回覆列表
-
1 # 慕課網
-
2 # Alpha阿發
有一定準備工作之後,一行程式碼的樂趣會更多
先看最終效果
獲取資料下面的命令可以從CoinRanking抓取所有虛擬貨幣的列表:整理列表顯然資料的內容看得很不清楚,我們可以把資料的部分轉換成DataFrame:列排序可以看到現在是按照字母表順序排列,而不是按照資料本身的順序排列,看得比較費力。如果我們想讓列的順序保持和原始資料一致,可以:抓取更多資料由於API限制,網站一次只能抓取50條資料,如果想抓取前150個,可以分3次抓取:統計分析拿到了資料,我們想看看資料之間的關係,比如過去的變化率和市值的關係:統計分析虛擬貨幣存在大量人為控盤的情況,我們首選要把變化太大的去掉(漲跌超過100%的)。另一方面,市值一般都要取對數才好進行比較。歷史資料我們還可以看排在前10的虛擬貨幣最近一段時間的價格走勢:歷史資料2由於資料的尺度相差甚遠,我們還可以把資料起始點統一轉換成100:所有import在這裡:
繼“你看過/寫過哪些有意思的程式碼”後,小慕又收到關於Python的戰帖,這怎麼能慫?快快接招吧!
發功之前友情提示:部分案例適用於Python3,在Windows下面可以用Python命令代替,具體請根據自己的修行選擇。
一、江湖純情版1、 愛心
先來個高贊愛心的中英文結合版:
print"\n".join(["".join([(u"ILoveChina愛"[(x-y)%11]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else" ")for x in range(-30,30)])for y in range(15,-15,-1)])如果換成純漢字的版本,則可能會出現較明顯的變形,所以為保證妹子不理解成“變心”,建議使用中英文結合的方式。你get到了嗎?
2、 美麗的螺旋
或許你覺得心型圖案太俗套,那麼試試下面這個美麗的螺旋?在python編譯器中輸入下面的程式碼,接下來讓我們來見證奇蹟吧!
exec """\nfrom turtle import *\nfor i in range(500): \n forward(i)\n left(91)\n"""二、娛樂縱情版1、猜數字
無聊的時候,猜猜數字也是很有樂趣的嘛。1~99範圍內的整數,如果猜對了會給你一個“Y”,如果猜高了會給出一個“H”;猜低了,你會得到一個“L”(Y、H、L可以根據你希望它給出的提示進行更換),你有六次機會猜出正確的結果哦!
python3 -c "import random;n=random.randint(1,99);[(lambda a:print("Y" if a==n else "H" if a>n else "L"))(int(input())) for i in range(6)]”2、老虎機
猜數字不過癮?不如再來試試迷你老虎機,用隨機的unicode字元打樣出來,完美模擬了老虎機的效果!
python3 -c "import random;p=lambda:random.choice("7");[print("|".join([p(),p(),p()]),end="\r") for i in range(8**5)]”3、 一行程式碼幫你選彩票號碼
當然,還有更刺激的彩票搖號,不過與其將命運交給彩票站的投注機器,不如自己寫一行程式碼,喏,彩票選號程式碼瞭解一下:
python -c "from random import sample; print "Lotto numbers: %s" % sample(range(1, 50), 6)"友情提示:彩票有風險,出手須謹慎,至於這行程式碼給出的結果是否能夠中獎,那就只能看你的運氣啦!
三、學府深造版1、一行程式碼實現GUI使用者介面
一行程式碼實現GUI使用者介面有木有!
2、一行程式碼啟動一個http伺服器
一行程式碼可以啟動一個HTTP伺服器,這一點真的非常好用,所以儘管有其他答主提到過,還是忍不住要再分享一下!
python3 -m http.server 8888在本地,輸入網址 localhost:8888即可訪問,預設會列出你的本地目錄:
3、Python的哲學
每次讀到Python之禪的時候,總是情不自禁地陷入優美的意境不能自拔,恨不能隨時隨地都能拿來拜讀?下面這行程式碼能夠滿足你的願望:
python -c "import this"回車!然後,你便會發現你的螢幕上已然出現了心心念唸的Python的ZEN(禪意)。神不神奇?驚不驚喜?
4、 簡易計算器
print(eval(input()))這個單行程式碼只用了預設引入的函式,其意義也是單純而透明:讀入一個python表示式並求值,將其結果輸出到螢幕,當個簡單計算器綽綽有餘。
5、今天距離明年元旦還有多少天?
不會跟妹子搭訕?教你一招搭訕大法:故作神秘地問她知不知道還有多少天就是明年的元旦了,趁妹子一臉懵掉你開啟編譯器,瀟灑地敲出以下這行程式碼,然後看著結果告訴她:你看,距離明年元旦還有XX天!
python -c """import datetime;today = datetime.date.today();someday = datetime.date(2019, 1, 1);diff = someday - today;print str(diff.days)+" days" “""妹子接下來可能會有一波感嘆:哎呀,還有XX天了? 日子過得真快啊!
然後你轉手將程式碼一改,把元旦的時間改為你和妹子認識的時間,然後跟妹子說:你看,我們都認識這麼久了,還沒一起吃過飯呢,不如今晚下班請你吃個飯?
接下來,一定要記得按時下班啊!
其實,就單行而言,Python並不會比其它的多正規化語言更強,實際上由於lambda表現能力弱,導致Python本身要更弱一些。
但是,存在lambda就存在無限可能。Python中的import語句是可以透過呼叫__builtin__模組中的__import__來代替的,更有意思的是,__builtin__模組內的所有內容均是自動import的。
四、附加武功秘籍1、換臉術
這個10進位制轉換16進位制的單行程式碼就是lambda無限可能的有力論證:
print("#"+"".join(["{:0>2}".format(hex(int(a))[2:])for a in __import__("sys").argv[1:]]))2、星羅陣
這樣的畫圖,只是簡單的用到了呼叫時傳遞引數而已。
[print("\n".join(" "*abs(c)+"* "*(a-abs(c))for c in range(-a+1,a))) for a in[int(__import__("sys").argv[1])]]3、操控術
如果呼叫更復雜的功能呢?例如用Flask來個Hello world?
[y[0].run() for y in [(x, x.route("/")(lambda :"Hello, world!")) for x in [__import__("flask").Flask(__name__)]]]使用列表生成的實現看起來可能不太優雅,但並不會影響效果。
4、凌波微步
或者你還想看看帶視窗的心形曲線?不要看那個黑黑的ASCII顏藝的話可以這樣(需要numpy和matplotlib)
[plt.show() for _, __, ___, plt in [(plt.plot(x, y1, color="r"), plt.plot(x, y2, color="r"), np, plt) for x, y1, y2, np, plt in [(x, 0.618*np.abs(x) - 0.8* np.sqrt(64-x**2), 0.618*np.abs(x) + 0.8* np.sqrt(64-x**2), np, plt) for x, np, plt in [(np.linspace(-8, 8, 1024), np, plt) for np, plt in [(__import__("numpy"), __import__("pylab"))]]]]]5、吸星大法
如果你是深度學習煉丹師,那不妨來個一行預測?
[print(decode(model.predict(x))) for model, x, decode in [(ResNet50(weights="imagenet"), preprocess_input(np.expand_dims(image.img_to_array(image.load_img("elephant.jpg", target_size=(224, 224))), axis=0)), decode) for ResNet50, image, preprocess_input, np, decode in [(kav.applications.resnet50.ResNet50, kp.preprocessing.image, kav.applications.resnet50.preprocess_input, np, kav.applications.resnet50.decode_predictions) for kav, kp, np in [(__import__("keras.applications.resnet50"), __import__("keras.preprocessing.image"), __import__("numpy"))]]]]按照這樣的方法,幾乎所有的程式碼最終都能壓到同一行裡;配合Python各種強大的包,寫出個一行人臉識別、一行機器學習、一行網頁爬蟲等都不會有什麼問題。
綜上,“一行程式碼”可供修煉的“功夫”多種多樣,雖然有趣,但並沒有太多的實際意義,在實際工作中沒有必要強行把所有的程式碼都壓縮到一行中實現。當然,如果是為了向妹子炫技的話,那麼請儘管展示你的才華!
計算機專業同學如何避免自己成為一名低階碼農?https://www.wukong.com/question/6546119457276690691/在做程式設計師的道路上,你掌握了什麼概念或技術使你感覺自我提升突飛猛進?https://www.wukong.com/question/6517473209128845575/大公司和小公司的程式設計師差別在哪?https://www.wukong.com/question/6514834007652303108/程式設計師面試的時候,大家都中過什麼套路?https://www.wukong.com/question/6481413885956981005/你見過有哪些搞笑的程式碼?https://www.wukong.com/question/6532626072771494147/程式設計師很悶騷麼?https://www.wukong.com/question/6492183419819131150/