本文執行個體講述了Python資料結構與算法之使用隊列解決小貓釣魚問題。分享給大家供大家參考,具體如下:
按照《啊哈》裡的思路實作這道題目,但是和結果不一樣,我自己用一幅牌試了一下,發現是我的結果像一點,可能我了解的有偏差。
# 小貓釣魚
# 計算桌上每種牌的數量
# 使用defaultdict類,并設定預設類型為int型,即預設值為0
# cardcounts = defaultdict(int)
# 不過deque有對應的方法
def henhenhaahaa():
from collections import deque
hen = deque() # hen的手牌
haa = deque() # haa的手牌
table = deque() # 桌上的牌
# 手紮初始化
for card in [2,4,1,2,5,6]:
hen.append(card)
for card in [3,1,3,5,6,4]:
haa.append(card)
# 當兩個人的手牌都不為零食,遊戲繼續
# 如果某人打出的牌與桌上的某張牌相同
# 即可将兩張牌以及中間的所有牌以此取走
# 由于桌上同樣的牌不可能超過兩張
# 隻要計算目标牌的數量,以此取回即可
# 重新整理桌上的牌(打出牌,取牌)
def refreshtable(person, card):
table.append(card)
if table.count(card)>=2:
while table.count(card)>0:
person.append(table.pop())
while len(hen)!=0 and len(haa)!=0:
# print "tab:",list(table)
i = hen.popleft() # hen先出牌
# print "hen put",i
refreshtable(hen, i) # hen動作
# print "hen:",list(hen)
# print "tab:",list(table)
j = haa.popleft() # haa後出牌
# print "haa put",j
refreshtable(haa, j) # haa動作
# print "haa:",list(haa)
# print "tab:",list(table)
# print "next turn"
if len(hen)!=0:
print "hen win"
print "hen:",list(hen)
else:
print "haa win"
print "haa:",list(haa)
print "ontables"
print "tab:",list(table)
if __name__=="__main__":
print "我們測試結果:"
henhenhaahaa()
# 我自己手動用牌模拟的結果根本就和書上不一樣
# 我覺得我自己的答案沒啥問題
# 單步模拟的結果也是一樣的
運作結果:
更多關于Python相關内容感興趣的讀者可檢視本站專題:《Python資料結構與算法教程》、《Python加密解密算法與技巧總結》、《Python編碼操作技巧總結》、《Python函數使用技巧總結》、《Python字元串操作技巧彙總》及《Python入門與進階經典教程》
希望本文所述對大家Python程式設計有所幫助。
本文标題: Python資料結構與算法之使用隊列解決小貓釣魚問題
本文位址: http://www.cppcns.com/jiaoben/python/214494.html