Jeu de dés d'analyse des connaissances Python

零到壹度
Libérer: 2018-04-14 14:24:26
original
4462 Les gens l'ont consulté

Le contenu partagé avec vous dans cet article concerne l'analyse des connaissances Python du jeu de dés. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'ai récemment appris quelques statistiques et connaissances en python, et j'ai essayé d'analyser le jeu de dés. Les dés ont 6 faces standard, et les résultats du lancement de 1, 2, 3 et 4 dés à la fois et du lancement de 10, 100, 1 000 et 10 000 fois sont analysés.

Utiliser les outils
Outil d'analyse Jupyter Notebook
matplotlib, package de visualisation pygal

1. Nombre de suppositions

1-6中每个数字出现的次数
Copier après la connexion
# 导入包
import pygal
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
from random import randint
Copier après la connexion
# 利用随机数据模拟掷骰子
# 每次显示1-6中的一个数

num_sides = 6  # 骰子的6个面
def getData(N, times):
    """
    定义函数,获取投掷数据
    N: 表示一次用几个骰子投
    times:表示总共投几次
    """  
    results = []    
    for n in range(1,N+1):    
        for roll_num in range(times):
            result = randint(1,num_sides)
            results.append(result)    
        return results
Copier après la connexion
# 打印投掷结果
print(getData(1,10)) # 1个骰子掷10次
print(getData(2,5))  # 2个骰子掷5次
Copier après la connexion
[2, 2, 2, 2, 1, 6, 4, 4, 5, 5]
[4, 3, 5, 6, 2, 2, 3, 6, 4, 4]
Copier après la connexion
# 分析结果# 统计每个数字出现的次数并显示图片
    # N: 表示一次用几个骰子投
    # data 表示投掷数据def showResult(N, times):
    frequencies = []    for value in range(1, num_sides+1):
        frequency = getData(N, times).count(value)
        frequencies.append(frequency)    # 数据可视化
    # 本次利用 pygal 生成SVG格式矢量图
    hist = pygal.Bar()
    hist.title = str(N)+"个骰子掷"+ str(times) +"次的结果"
    hist.x_labels = ['1','2','3','4','5','6']
    hist.x_title = "点数"
    hist.y_title = "出现次数"

    hist.add(str(N)+'骰子', frequencies)
    hist.render_to_file('1-'+str(N)+str(times)+'.svg') # 储存为矢量图
Copier après la connexion
# 一个骰子掷10,100, 1000, 10000次结果分析showResult(1,10)
showResult(1,100)
showResult(1,1000)
showResult(1,10000)
Copier après la connexion

Jeu de dés danalyse des connaissances Python

# 2个骰子掷10,100, 1000, 10000次结果分析showResult(2,10)
showResult(2,100)
showResult(2,1000)
showResult(2,10000)
Copier après la connexion

Jeu de dés danalyse des connaissances Python

Fini les captures d'écran pour 3 dés et 4 dés.

Nous avons constaté que plus nous lançons de fois, plus la probabilité de chaque nombre apparaît proche, et finalement tend à être la même.

2. Devinez la taille

每次投掷点数和
Copier après la connexion
# 每次投掷点数和def getData2(N, times):
    """
    定义函数,获取投掷数据
    N: 表示一次用几个骰子投
    times:表示总共投几次
    """  
    results = []    for roll_num in range(times):
        result = 0
        for n in range(1,N+1):
            result += randint(1,num_sides)
        results.append(result)    
    return results
Copier après la connexion
# 打印投掷结果print(getData2(1,10)) # 1个骰子掷10次print(getData2(2,5))  # 2个骰子掷5次
Copier après la connexion
[4, 3, 6, 2, 5, 4, 5, 3, 6, 2]
[6, 10, 5, 8, 7]
Copier après la connexion
# 分析结果# 统计数字和出现的次数并显示图片
    # N: 表示一次用几个骰子投
    # data 表示投掷数据def showResult2(N, times):
    frequencies = []    for value in range(N, N*num_sides+1):
        frequency = getData2(N, times).count(value)
        frequencies.append(frequency)    # 数据可视化
    # 本次利用 matplotlib 生成图片
    x_num = N*num_sides+1-N
    idx = np.arange(x_num)
    width = 0.5
    sn = str(N)
    sm = str(times)
    x_labels = [str(n) for n in range(N, N*num_sides+1)]  # X轴刻度

    plt.bar(idx, frequencies, width, color='red', label=sn+'个骰子')
    plt.xlabel('点数和')
    plt.ylabel('出现次数')
    plt.title(sn+'个骰子投掷'+ sm +'次的结果')
    plt.xticks(idx, x_labels)
    plt.legend()  # 显示图例
    plt.show()
Copier après la connexion

Cela n'a pas beaucoup de sens de deviner la taille d'un dé. situation de deux dés directement.

#  2个骰子掷10,100, 1000, 10000次结果分析showResult2(2,10)
showResult2(2,100)
showResult2(2,1000)
showResult2(2,10000)
Copier après la connexion

Jeu de dés danalyse des connaissances Python

#  3个骰子掷10,100, 1000, 10000次结果分析showResult2(3,10)
showResult2(3,100)
showResult2(3,1000)
showResult2(3,10000)
Copier après la connexion

Jeu de dés danalyse des connaissances Python

#  4个骰子掷10,100, 1000, 10000次结果分析showResult2(4,10)
showResult2(4,100)
showResult2(4,1000)
showResult2(4,10000)
Copier après la connexion

Jeu de dés danalyse des connaissances Python

Nous pouvons voir sur les photos ci-dessus quand le nombre de lancers est suffisant, la probabilité d'apparition de points grands/petits est fondamentalement la même et la taille des points montre les caractéristiques d'une distribution normale.

Recommandations associées :

Implémentation du langage C du jeu de dés

Jeu de dés

Jeu de dés C++

Programme d'apprentissage des compétences : craps jeu de dés

problème de craps

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!