前幾天在閒逛的時候,突然看到了乙個關於撲克牌的題目,感覺還挺有意思,就試著分析了一下並用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...