Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Wissensanalyse-Würfelspiel

Python-Wissensanalyse-Würfelspiel

零到壹度
零到壹度Original
2018-04-14 14:24:264477Durchsuche

本篇文章给大家分享的内容是关于python知识分解析掷骰子游戏 ,有着一定的参考价值,有需要的朋友可以参考一下。最近学习了点统计学及python知识,试着分析下掷骰子游戏。骰子按标准6面,分析一次投1颗、2颗、3颗、4颗,投掷10、100、1000、10000次时的结果。

使用工具
 Jupyter Notebook 分析利器
 matplotlib、pygal 可视化包

1、猜次数

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)

Python-Wissensanalyse-Würfelspiel

# 2个骰子掷10,100, 1000, 10000次结果分析showResult(2,10)
showResult(2,100)
showResult(2,1000)
showResult(2,10000)

Python-Wissensanalyse-Würfelspiel

3个骰子、4个骰子就不再截图了。

我们发现在投掷的次数越多,每个数出现的概率越接近,最后趋向于相同。

2、猜大小

每次投掷点数和
# 每次投掷点数和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()

1颗骰子猜大小没多大意义,我们直接来分析两骰子的情况。

#  2个骰子掷10,100, 1000, 10000次结果分析showResult2(2,10)
showResult2(2,100)
showResult2(2,1000)
showResult2(2,10000)

Python-Wissensanalyse-Würfelspiel

#  3个骰子掷10,100, 1000, 10000次结果分析showResult2(3,10)
showResult2(3,100)
showResult2(3,1000)
showResult2(3,10000)

Python-Wissensanalyse-Würfelspiel

#  4个骰子掷10,100, 1000, 10000次结果分析showResult2(4,10)
showResult2(4,100)
showResult2(4,1000)
showResult2(4,10000)

Python-Wissensanalyse-Würfelspiel

从上面几图中我们可以看到,当投掷次数足够多时,出现大/小点数出现的概率基本相同,点数大小呈现正态分布的特点。

相关推荐:

掷骰子游戏-C语言实现

掷骰子游戏

C++掷骰子游戏

练手小程序:craps掷骰子游戏

掷骰子问题

Das obige ist der detaillierte Inhalt vonPython-Wissensanalyse-Würfelspiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn