## -*-coding: utf-8 -*- ## $Id: bingo.py 2011/05/28 15:30:51 kato Exp $ ## $ python bingo.py import random class BingoGame(object):#==================================# def ask(self, bg):### ビンゴしたか確認する t = map(list, zip(*bg))### リストを転置する cross = [0, 0] for k, (i, j) in enumerate(zip(bg, t)): if(sum(i) == 0 or sum(j) == 0):### 横(縦)でビンゴしたか確認する return True cross[0] += i[k] cross[1] += i[4 - k] if(cross[0] == 0 or cross[1] == 0):### 斜めでビンゴしたか確認する return True return False def start(self, num):### ビンゴをスタートする card = []### ビンゴカードを用意する for i in range(1, 75, 15): card.append(random.sample(range(i, i+15), 5)) card[2][2] = 0### 中央はFREE ball = random.sample(range(75), 75)### ビンゴの球を用意する for i in range(num):### 球を出した回数 for j in range(5):### 球とカードを比べる if(ball[i] in card[j]):### 出た球とカードが一致した? card[j][card[j].index(ball[i])] = 0### カードに穴(0)を開ける if(self.ask(card)):### ビンゴしたか確認する #for k, e in enumerate(map(list, zip(*card))): #print('|%2d %2d %2d %2d %2d|' # %(e[0], e[1], e[2], e[3], e[4])) #print('%2d times\n' %(i + 1)) return i + 1### ビンゴ! return False #class BingoGame(object):==================================# def main(): bingoGame = BingoGame() count = [] times = 1000000### 試行回数 num = 75### 球を出す回数を制限する(4 <= num <= 75) for i in range(times): check = bingoGame.start(num) if(check): count.append(float(check)) print('%d回でビンゴする確率を求める' %(num)) print('試行回数は%d回とする' %(times)) if(len(count)): print('ビンゴ率 = %7.4f %' %(float(len(count))*100/times)) ave = sum(count)/float(len(count)) print('期 待 値 = %5.2f 回' %(ave)) else: print('誰もビンゴしませんでした') if __name__ == '__main__': main()