今天悦儿姐在前进的道路上突然被绊了一下,就是这道题。看似简单,但要顾及的地方还是很多的,稍不留神就拉下了某些东东。好,看题目:
扑克牌排列:下面代码模拟了一套扑克牌(初始排序A~K,共13张)的操作过程。操作过程是: 手里拿着这套扑克牌,从前面拿一张放在后面,再从前面拿一张放桌子上,再从前面拿一张放在后面,....如此循环操作,直到剩下最后一张牌也放在桌子上。下面代码的目的就是为了求出最后桌上的牌的顺序。初始的排列如果是A,2,3...K,则最后桌上的顺序为:[2, 4, 6, 8, 10, Q, A, 5, 9, K, 7, 3, J]请编程。
好,乍一看非常简单,那你自己做一做,发现总会有些部分与答案不符,于是就拿着扑克牌一遍一遍的试,哈哈,我就是这样的。好,不难发现,每次排好后,列表会变成两部分,一部分是放在桌子上的,一部分是还没排好的,于是又要再写一遍。于是就写了函数,有了函数,代码量就会大大减少。看程序:
yj=['A',2,3,4,5,6,7,8,9,10,'J','Q','K'] # 因为喜欢姚记扑克,就用姚记的首字母命名啦。
def pk(yj,n,s): # 创建函数,yj是列表,n是从哪里开排(索引号),s是模式(放桌子上1,排后面2)
yj2=yj.copy() # 来个双胞胎,不改变yj的顺序,在yj2上糟蹋
for i in yj[n:]:
if s%2 != 0: # 判断是否是排后面的
yj2.append(i) # 放后面
yj2.remove(i) # 前面的删了
s+=1 # 模式每次都要加1哦,每次都是交替的,用奇数偶数来表示了
else:
s+=1
return yj2 # 返回被排好的那个
yj=pk(yj,0,1) # 调用(时间繁琐,没太好好整,友友们可以考虑一下for遍历)
yj=pk(yj,6,2)
yj=pk(yj,10,1)
本期到此结束,要想看别的,评论区留言给我,安排!!
|