Re: [问题] 针对题目 看否帮忙想出简洁的python 感恩

楼主: ddavid (谎言接线生)   2020-07-06 16:03:28
※ 引述《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
作者: max36067 (围巾喵)   2020-07-06 19:38:00
水哦 有够简洁
作者: OrzOGC (洞八达人.拖哨天王)   2020-07-06 20:17:00
看到这种我都很头痛...QQ
作者: as30385438 (LCT)   2020-07-06 22:12:00
这个code review大概不会过
作者: alvinlin (林矜业)   2020-07-06 23:20:00
很简洁但我看不懂。不过谢谢分享。给推
作者: benchen0812 (あBen)   2020-07-07 10:42:00
突然有点理解为啥学JAVA的朋友骂我用PYTHON乱源xd
作者: bugbug777 (sil)   2020-07-07 14:05:00
海象可爱
作者: s860134 (s860134)   2020-07-08 01:06:00
海象这种东西个人只会在 判断式用, e.g. re.match
作者: HYDE1986 (足球就是我的呼吸)   2020-07-08 10:41:00
也太简洁XDDDDD

Links booklink

Contact Us: admin [ a t ] ucptt.com