Coder soudainement
Bingo.py
# -*- coding: utf-8 -*-
u"""Script qui simule la probabilité de BINGO
input:
times =Nombre de fois pour tourner la machine de loterie, card_num =Nombre de cartes
outpu:
Probabilité d'en avoir même un
"""
import sys
from random import sample
#trou
HIT = True
NOHIT = False
def generate_card():
u"""Générer une carte
Centre 5x5(3 lignes 3 colonnes)Carte avec un trou dans
B(1ère rangée) 1 - 15
I(2e rangée) 16 - 30
N(3e rangée) 31 - 45
G(4e rangée) 46 - 60
O(5e rangée) 61 - 75
:returns: array card, length=25
"""
cards = []
for i in range(5):
cards.extend(sample(range(15 * i + 1, 15 * (i + 1)), 5))
cards[12] = HIT
return cards
def check_bingo(card):
u"""Que vous soyez BINGO
Jugement seulement
param: array
:returns: boolean
"""
if card.count(HIT) < 5:
return False
for i in range(5):
if NOHIT not in card[i * 5: (i + 1) * 5]:
return True
for i in range(5):
if NOHIT not in card[i: i + 21: 5]:
return True
if NOHIT not in card[0: 24: 6]:
return True
if NOHIT not in card[4: 21: 4]:
return True
return False
def print_card(card):
for i, v in enumerate(card):
if v == HIT:
v = "o"
elif v == NOHIT:
v = "x"
sys.stdout.write("%3s" % str(v))
if (i % 5 == 4):
print()
print()
try:
times = int(sys.argv[1])
except IndexError:
times = 5
try:
card_num = int(sys.argv[2])
except IndexError:
card_num = 10000
hit_count = 0
for i in range(card_num):
card = generate_card()
lots = sample(range(1, 76), times)
card_hole = [(HIT if (x == HIT or x in lots) else NOHIT) for x in card]
# print_card(card)
# print_card(card_hole)
if check_bingo(card_hole):
hit_count += 1
print(str(times) + u"Probabilité d'un seul BINGO à la première fois:")
p = hit_count / card_num
print("%s (%.1f %%)" % (str(p), p * 100))
Gist: https://gist.github.com/0c11f757334ba9ef7b1f
contribution: Nombre de fois pour tourner la machine de loterie Nombre de cartes (nombre de simulations) output: Probabilité d'un seul BINGO
Vous devriez être capable de comprendre l'explication de chaque fonction dans les commentaires.
La partie où vous pouvez écrire comme Python Je pense que la partie qui juge si la carte (carte BINGO) est touchée ou non peut être écrite comme Python (je voulais juste faire un processus ici)
#Jugement dans la 4e colonne
NOHIT not in card[3:3 + 21:5]
#Jugement en diagonale de haut à gauche en bas à droite
NOHIT not in card[0:24:6]
Les tableaux Python peuvent être récupérés avec array [start: end: step], donc les jugements peuvent être écrits intelligemment.
Exemple de sortie d'exécution
>> python3 bingo.py 5 10000
Probabilité d'un seul BINGO la 5ème fois:
0.0003 (0.0 %)
Cela n'a pas d'importance, mais ce que j'ai appris dans Flake 8 cette fois en tant que norme de codage pour Python Deux lignes doivent être ouvertes entre les fonctions Ne mettez pas d'espaces sur le ** côté droit ** du tableau deux-points (identique à l'argument virgule)
Je ne sais toujours pas comment écrire un bloc doc, alors je vais étudier