无聊之作-纸牌接龙(排火车)结束平均次数

【无聊之作-纸牌接龙(排火车)结束平均次数】今天看论文看累了,在实验室看到一幅扑克牌,想到小时候的无聊游戏-纸牌接龙(排火车,排竹尖),就是一副牌(去掉大小王)分成两份给两个人,然后每个人依次出一张按顺序放入队列中,当某一人出的一张牌,在队列中已经存在的时候,这个人将会收走从队列尾部到已经存在的牌之间的所有牌,然后再出一张,依次循环,直到两个人中有一人一张牌也没有的时候,游戏结束,当然这个游戏不止局限于两个人一副牌,N个人M副牌也是可以玩的
这好像是最无聊的纸牌游戏了,完全没有技术含量,完全凭运气,但是好像从来没有玩到结束过,因此今天看到纸牌想起来这个游戏,就想用计算机跑一下在随机的情况下,两个人一副牌,游戏结束的平均回合数有多少,因此产生了这个无聊之作
最后实验结果得出,平均500回合(出一次牌为一个回合)左右,游戏会结束。。。怪不得从小到大都没那个耐心玩完过

import random import sys sys.setrecursionlimit(10000)class Playerr: def __init__(self,other_player=None): self.card= [0 for x in range(0, 13)] if other_player: for i in range(13): self.card[i]=4-other_player.card[i] else: for i in range(13): self.card[i]=random.randint(0,4)def draw_card(self): if self.is_empty(): return -1 random_draw=random.randint(0,12) if self.card[random_draw]>0: self.card[random_draw]=self.card[random_draw]-1 return random_draw else: return self.draw_card()def is_empty(self): for i in range(13): if self.card[i]>0: return False return Truedef display_card(self): print(self.card)def play(cards,player_a,player_b,step): card_a=player_a.draw_card() ''' print("---------------------") player_a.display_card() player_b.display_card() print(cards) print(card_a) print("---------------------") ''' if card_a==-1: return Nonetry: find_index=cards.index(card_a) except ValueError: find_index=-1 if find_index!=-1: for i in range(len(cards)-find_index): card_index=cards.pop() player_a.card[card_index]=player_a.card[card_index]+1 player_a.card[card_a] = player_a.card[card_a] + 1 else: cards.append(card_a) step[0]=step[0]+1 return play(cards,player_b,player_a,step)def main():sum=0 for i in range(5000): player_a=Playerr() player_b=Playerr(other_player=player_a) step=[1] play([],player_a,player_b,step) sum+=step[0] print(str(i)+"-----"+str(step))print(sum/5000)if __name__ == '__main__': main()


    推荐阅读