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

 

posted on 2015-07-31 16:37  hanahimi  阅读(1461)  评论(0编辑  收藏  举报

导航