Maison > Article > développement back-end > Jeu de dés d'analyse des connaissances Python
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-6中每个数字出现的次数
# 导入包 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
# 利用随机数据模拟掷骰子 # 每次显示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
# 打印投掷结果 print(getData(1,10)) # 1个骰子掷10次 print(getData(2,5)) # 2个骰子掷5次
[2, 2, 2, 2, 1, 6, 4, 4, 5, 5] [4, 3, 5, 6, 2, 2, 3, 6, 4, 4]
# 分析结果# 统计每个数字出现的次数并显示图片 # 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') # 储存为矢量图
# 一个骰子掷10,100, 1000, 10000次结果分析showResult(1,10) showResult(1,100) showResult(1,1000) showResult(1,10000)
# 2个骰子掷10,100, 1000, 10000次结果分析showResult(2,10) showResult(2,100) showResult(2,1000) showResult(2,10000)
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.
每次投掷点数和
# 每次投掷点数和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
# 打印投掷结果print(getData2(1,10)) # 1个骰子掷10次print(getData2(2,5)) # 2个骰子掷5次
[4, 3, 6, 2, 5, 4, 5, 3, 6, 2] [6, 10, 5, 8, 7]
# 分析结果# 统计数字和出现的次数并显示图片 # 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()
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)
# 3个骰子掷10,100, 1000, 10000次结果分析showResult2(3,10) showResult2(3,100) showResult2(3,1000) showResult2(3,10000)
# 4个骰子掷10,100, 1000, 10000次结果分析showResult2(4,10) showResult2(4,100) showResult2(4,1000) showResult2(4,10000)
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
Programme d'apprentissage des compétences : craps jeu de dés
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!