Python 板


LINE

※ 引述《hodwaylin (aaboy)》之銘言: : Hi 各位python 高手們 : 最近在自學python, 請教下面這遊戲題目 : 可否有大大願意分享一下 這題要如何寫出簡潔的python 語法 供小弟練習參考用 : 感恩喔 : https://i.imgur.com/UeEZHYz.jpg : https://i.imgur.com/uGLFK5E.jpg : https://i.imgur.com/Q0GqzhW.jpg 雖然怎麼看都是作業題,不過今天我想到某個有趣的事情,所以寫了這東西: def func(n,m,k):return (a:=[*range(1,n+1)],(i:=0),[(a:=a[:(i:=(i+m-1)% ((n:=n-1)+1))]+a[i+1:],i,a[i%n]) for x in range(k)])[-1][-1][-1] 請全部縮成一行才會正確。然後這Code限定Python 3.8以後版本才跑得動。保證 簡潔,一行就能完成。 >>> func(5,2,2) 5 >>> func(5,2,4) 3 >>> func(5,3,4) 4 最可怕的是改一下還可以trace每一步驟的狀況。 def func(n,m,k):return (b:=(a:=[*range(1,n+1)],(i:=0),[(a:=a[:(i:=(i+m-1)% ((n:=n-1)+1))]+a[i+1:],i,a[i%n]) for x in range(k)])[-1],[(x[0],x[2]) for x in b])[-1] 同樣請縮成一行。 >>> func(5,2,2) [([1, 3, 4, 5], 3), ([1, 3, 5], 5)] >>> func(5,2,4) [([1, 3, 4, 5], 3), ([1, 3, 5], 5), ([3, 5], 3), ([3], 3)] >>> func(5,3,4) [([1, 2, 4, 5], 4), ([2, 4, 5], 2), ([2, 4], 2), ([4], 4)] 結果是個list,其中每一個元素都是(list, int),前面的list表示每一步後剩 下的編號,後面的int表示該步後的幸運者。 結論是list comprehension + walrus operator有夠變態。不少人認為walrus operator會成為亂源不是沒有道理的XDDD -- 「探尋真實與探尋謊言的難度一樣,而要忘掉它們的難度也相同,因為你根本無 法預測你探尋到什麼,更無法預測什麼會被你忘掉。也就是說,就機率而言,你腦裡 的記憶其實有一半都是騙人的。放心吧,沒那一半你反而活不下去的。」 --克爾斯,謊言事務所暫時所長 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.77.203 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1594022612.A.D0A.html ※ 編輯: ddavid (1.169.77.203 臺灣), 07/06/2020 16:04:20
1F:推 max36067: 水哦 有夠簡潔 07/06 19:38
2F:→ OrzOGC: 看到這種我都很頭痛...QQ 07/06 20:17
3F:→ as30385438: 這個code review大概不會過 07/06 22:12
4F:推 alvinlin: 很簡潔但我看不懂。不過謝謝分享。給推 07/06 23:20
其實這裡面就幾個技巧: 1. 主要就是:=這個3.8的新東西要知道它怎麼拆成不用它的寫法。 2. 怎麼用list comprehension來硬當迴圈用(副作用是過程都被記錄下來了,但反 過來利用這個副作用反而達成trace完整過程的效果),怎麼改寫回去for迴圈。 3. 有前後依賴性而必須依序執行的工作,利用tuple來組裝達成這個順序。 這三項都了解後,其實排版一下然後按照這三點逆向改寫回去就能換成直接看得 懂的東西了XD。不過也不用浪費這個時間就是,這又不是很難的問題,大家正常寫也 寫得出來,我只是偶然想試:=跟[ for if ]搭配有多邪惡XD 其實應該有某招可以解決2的副作用XD ※ 編輯: ddavid (1.164.176.211 臺灣), 07/07/2020 00:07:29
5F:推 benchen0812: 突然有點理解為啥學JAVA的朋友罵我用PYTHON亂源xd 07/07 10:42
:=是3.8才出來的東西啦,而且也很多人反對根本不去使用(我自己其實也不太 去用),是Python之父Guido van Rossum最終決定加入的,他本人也因此風波決定退 出BDFL這決策位置。所以要罵亂源,八成也不會是因為這東西XD 而且要比程式碼難看,很依賴縮排的Python可是遠遠不及C/C++之類天生就不依 賴縮排、而且還有指標的語言呢XD。ioccc大賽(1984)開始時,Python(1991)都 還不存在呢XDDD ※ 編輯: ddavid (1.169.77.203 臺灣), 07/07/2020 13:13:35
6F:推 bugbug777: 海象可愛 07/07 14:05
※ 編輯: ddavid (1.169.77.203 臺灣), 07/07/2020 18:34:21
7F:→ s860134: 海象這種東西個人只會在 判斷式用, e.g. re.match 07/08 01:06
8F:推 HYDE1986: 也太簡潔XDDDDD 07/08 10:41
其實我仔細回頭審視,發現好像還有一兩個小地方寫法是相對累贅,應該還能再 精簡一點XD ※ 編輯: ddavid (1.169.77.203 臺灣), 07/08/2020 16:26:46







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP