python

超轻量级php框架startmvc

Python数据结构与算法之使用队列解决小猫钓鱼问题

更新时间:2020-05-13 23:24 作者:startmvc
本文实例讲述了Python数据结构与算法之使用队列解决小猫钓鱼问题。分享给大家供大家参考

本文实例讲述了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()
 # 我自己手动用牌模拟的结果根本就和书上不一样
 # 我觉得我自己的答案没啥问题
 # 单步模拟的结果也是一样的

运行结果: