无聊之作-纸牌接龙(排火车)结束平均次数
生活随笔
收集整理的這篇文章主要介紹了
无聊之作-纸牌接龙(排火车)结束平均次数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天看論文看累了,在實驗室看到一幅撲克牌,想到小時候的無聊游戲-紙牌接龍(排火車,排竹尖),就是一副牌(去掉大小王)分成兩份給兩個人,然后每個人依次出一張按順序放入隊列中,當某一人出的一張牌,在隊列中已經存在的時候,這個人將會收走從隊列尾部到已經存在的牌之間的所有牌,然后再出一張,依次循環,直到兩個人中有一人一張牌也沒有的時候,游戲結束,當然這個游戲不止局限于兩個人一副牌,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 -1random_draw=random.randint(0,12)if self.card[random_draw]>0:self.card[random_draw]=self.card[random_draw]-1return random_drawelse:return self.draw_card()def is_empty(self):for i in range(13):if self.card[i]>0:return Falsereturn 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=-1if 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]+1player_a.card[card_a] = player_a.card[card_a] + 1else:cards.append(card_a)step[0]=step[0]+1return play(cards,player_b,player_a,step)def main():sum=0for 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()?
總結
以上是生活随笔為你收集整理的无聊之作-纸牌接龙(排火车)结束平均次数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 把Jetson Xavier NX的系统
- 下一篇: 微信小程序海报分享及好友分享