规则: 将一副扑克牌平均分成两份,每人拿一份。小K先拿出手上的第一张扑克牌放在桌子上,然后小Q也拿出手上的第一张扑克牌,放在小K刚打出的牌上面,就这样两人交替出牌。出牌时,如果某人打出的牌与桌上的牌的牌面相同,即可将两张相同的牌及其中间所加的牌全部取走,并依次放到自己手中牌的末尾,当任意一人手中的牌全部出完时,游戏结束,对手获胜。
定义
我们用stack记录桌上的牌,用两个queue记录小K和小Q手中的牌(小K为t1
,小Q为t2
)。实现如下,详细见注释。
实现
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 54 55 56 57
| def game(t1, t2):
s = [] book = [0] * (13+1)
while t1 and t2: if len(t1) <= 52 and len(t2) <= 52: a = t1[0] if book[a] == 0: s.append(a) book[a] = 1 del t1[0] else: t1.append(a) while s[-1] != a: book[s[-1]] = 0 t1.append(s[-1]) del s[-1] del t1[0] b = t2[0] if book[b] == 0: s.append(b) book[b] = 1 del t2[0] else: t2.append(b) while s[-1] != b: book[s[-1]] = 0 t2.append(s[-1]) del s[-1] del t2[0] else: break if t2 == []: print 't1, 小K赢' print '当前牌为: {}'.format(str(t1).strip('[]'))
elif t1 == []: print 't2, 小Q赢' print '当前牌为: {}'.format(str(t2).strip('[]')) else: print '平局' print '桌上牌为: {}'.format(str(s).strip('[]'))
if __name__ == "__main__": game([2,4,1,2,5,6], [3,1,3,5,6,4])
|