撲克牌原始順序 Python實現

2021-07-29 05:43:12 字數 3791 閱讀 6362

前幾天在閒逛的時候,突然看到了乙個關於撲克牌的題目,感覺還挺有意思,就試著分析了一下並用python實現了一下。

貼出原題:

手中一幅撲克牌,假設順序為abcdef,把第一張放到桌面上,第二張挪到最後,第三張放到桌面,第四張挪到最後,一直到所有牌都在桌面

bcdef   a

cdefb

defb   ac

efbd

…把最後在桌面上的這副牌給你,求出原始牌的順序

分析一下:

1. 排序牌面獲得原始牌面

排序牌面:acebfd

桌面撲克牌

原始撲克牌

說明acebf

d拿出末尾最後乙個d

aceb

fd拿出末尾最後乙個f,放到d前面得到新牌面

acebdf

原始撲克牌重新排序(最後乙個牌放到第一位),拿出末尾最後乙個b,放到新排序牌面之前

acefbd

原始撲克牌重新排序(最後乙個牌放到第一位),拿出末尾最後乙個e,放到新排序牌面之前

acdefb

原始撲克牌重新排序(最後乙個牌放到第一位),拿出末尾最後乙個c,放到新排序牌面之前

abcdef

獲得原始牌面

從上邊**可以看出:初始acebfd經過6次之後獲得abcdef。

**實現:

# -*- coding:utf-8 -*-

# 把列表的最後乙個元素放到第一位

defend_to_start

(list=):

if len(list) <= 1:

pass

else:

list.insert(0, list[-1])

list.pop()

return list

aim_list = ['a', 'c', 'e', 'b', 'f', 'd'] # 排序牌面

result= # 起始牌面

for i in range(len(aim_list), 0, -1):

end_to_start(result)

# 將排序牌面最後乙個拍放到起始牌面第一位

result.insert(0, aim_list[i - 1])

print result

執行結果:

['a', 'b', 'c', 'd', 'e', 'f']
2. 原始牌面獲得排序牌面

原始牌面:abcdef

桌面撲克牌

重新排序的撲克牌說明a

cdefb

a放到桌面,b放到剩餘撲克牌的末尾

acefbd

c放到桌面,d放到剩餘撲克牌的末尾

acebdf

e放到桌面,f放到剩餘撲克牌的末尾

aceb

fdb放到桌面,f放到剩餘撲克牌的末尾

acebf

df放到桌面,只剩下d所以不用換位置

acebfd

d放到桌面,結束

從上邊**可以看出:初始abcdef經過6次之後獲得acebfd。

**實現:

# -*- coding:utf-8 -*-

# 把列表的第乙個元素放到最後一位

defstart_to_end

(list=):

if len(list) <= 1:

pass

else:

list.pop(0)

return list

aim_list = ['a', 'b', 'c', 'd', 'e', 'f']

result =

for i in range(0, len(aim_list)):

aim_list.pop(0)

start_to_end(aim_list)

print result

執行結果:

['a', 'c', 'e', 'b', 'f', 'd']
3. 把兩種情況放到合併

**實現:

# -*- coding:utf-8 -*-

class

getresultlist

(object):

def__init__

(self):

pass

# 把列表的最後乙個元素放到第一位

defend_to_start

(self, list=):

if len(list) <= 1:

pass

else:

list.insert(0, list[-1])

list.pop()

return list

# 把列表的第乙個元素放到最後一位

defstart_to_end

(self, list=):

if len(list) <= 1:

pass

else:

list.pop(0)

return list

# 獲得輸入字串,並返回乙個列表

defget_input

(self):

item = raw_input("請輸入一系列字元,以逗號分隔:")

aim_list =

for i in item.split(','):

return aim_list

# 獲得乙個原始字串按照規則排序

defget_after_list

(self, list=):

result =

for i in range(0, len(list)):

list.pop(0)

self.start_to_end(list)

return result

# 從乙個排序之後的字元得到原始字元

defget_begin_list

(self, list=):

result =

for i in range(len(list), 0, -1):

self.end_to_start(result)

result.insert(0, list[i-1])

return result

if __name__ == '__main__':

# 輸入乙個原始牌面獲得排序牌面

aim_list1 = getresultlist().get_input()

result1 = getresultlist().get_after_list(aim_list1)

print

"排序之後的牌面為:" + str(result1)

# 輸入乙個排序牌面獲得原始牌面

aim_list2 = getresultlist().get_input()

result2 = getresultlist().get_begin_list(aim_list2)

print

"原始的牌面為:" + str(result2)

執行結果:

請輸入一系列字元,以逗號分隔:a,b , c, d ,e,f

排序之後的牌面為:['a', 'c', 'e', 'b', 'f', 'd']

請輸入一系列字元,以逗號分隔:a,c , e, b ,f,d

原始的牌面為:['a', 'b', 'c', 'd', 'e', 'f']

撲克牌原始順序問題

已知有 a k 的十三張撲克牌,順序未知,進行如下操作 1 從牌堆底拿一張牌翻開放在桌子上 3 重複1 2的操作,直到十三張牌全部翻出為止。如果要求翻開的牌是從 a k 順序的,求開始牌堆的順序。比如 原始序列為 2 3 1,經過上述操作後變為 1 2 3。假設已知原始序列 2 3 1,操作過程為 ...

撲克牌排序 趣味撲克牌

一提到撲克牌,我們就想到神秘的魔術表演,撲克牌上有很多形狀和數字,裡面蘊藏了很多數學知識哦!瞧 subway的小朋友們正在進行趣味撲克牌的遊戲呢!好多撲克牌啊!撲克牌中間怎麼是空的呢?哇,還有這麼小的撲克牌呢!一看到teacher手中的撲克牌,小傢伙們乙個個的都興奮起來,迫不及待想要分享自己的見解呢...

模擬分發撲克牌(python實現)

52張撲克牌發個4個玩家,每人13張。要求 自動生成一幅撲克牌組 洗牌 發牌到玩家手中 將玩家手中撲克牌按花色大小整理好。思路一import random import operator defauto pokers poker for i in for j in a 2 3 4 5 6 7 8 9...