J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python

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.

  1. Génération de cartes
  2. Génération par lots de tirages au sort 3.Faites un trou dans la carte
  3. Jugement BINGO Boucle

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

Recommended Posts

J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python
J'ai essayé de corriger "J'ai essayé la simulation probabiliste du jeu de bingo avec Python"
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
J'ai essayé un langage fonctionnel avec Python
J'ai fait un jeu rogue-like avec Python
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé des centaines de millions de SQLite avec python
J'ai essayé de jouer à un jeu de frappe avec Python
Je veux faire un jeu avec Python
J'ai fait un jeu de cueillette avec Python
J'ai essayé d'implémenter le jeu de cartes de Trump en Python
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
J'ai essayé d'utiliser Python (3) au lieu d'un calculateur de fonctions
J'ai essayé la "conversion de morphologie" de l'image avec Python + OpenCV
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai essayé webScraping avec python.
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
Jeu de vie avec Python! (Le jeu de la vie de Conway)
[Python] J'ai essayé de créer automatiquement un rapport quotidien de YWT avec la messagerie Outlook
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai créé un démon avec Python
J'ai essayé la communication SMTP avec Python
J'ai essayé d'implémenter le blackjack du jeu Trump en Python
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
[Commerce système] J'ai essayé de jouer avec décomposer l'oscillateur stochastique avec python ♬
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
J'ai essayé de mettre en œuvre un jeu de dilemme de prisonnier mal compris en Python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
J'ai créé un chat-holdem de serveur de jeu de poker en utilisant websocket avec python
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de collecter automatiquement des images de Kanna Hashimoto avec Python! !!
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
Faisons un jeu de shiritori avec Python
J'ai fait un compteur de caractères avec Python
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
J'ai dessiné une carte thermique avec Seaborn [Python]
J'ai essayé la récurrence avec Python ② (séquence de nombres Fibonatch)
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu de vie avec Numpy
J'ai essayé la détection 3D d'une voiture