本文实例讲述了Python数据结构与算法之使用队列解决小猫钓鱼问题。分享给大家供大家参考,具体如下:
按照《啊哈》里的思路实现这道题目,但是和结果不一样,我自己用一幅牌试了一下,发现是我的结果像一点,可能我理解的有偏差。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# 小猫钓鱼
# 计算桌上每种牌的数量
# 使用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程序设计有所帮助。
原文链接:http://www.cnblogs.com/hanahimi/p/4692537.html