python 入门学习 模拟投掷骰子

本节视频学习使用 python语言实现模拟投掷骰子。

本章节涉及到的知识点有:

1. 通过python模拟随机事件,或生成随机数

  •     random 模块
函数 含义
random() 生成一个[0,1.0] 之间的随机浮点数
uiform(a,b) 生成一个a 到 b 之间的随机浮点数
randint(a,b) 生成一个 a 到 b 之间的随机整数
choice() 从列表中随机返回一个元素
shuffle() 将列表中元素随机打乱
sample(,k) 从指定的列表中随机获取K个元素

 更多 random 模块的使用方法见 https://docs.python.org/3/library/random.html

  • 遍历列表时如何同时获取每个元素的索引号 及其元素值
  • enumerate()  函数

python 入门学习 模拟投掷骰子_第1张图片

2.zip()函数

python 入门学习 模拟投掷骰子_第2张图片

 

 3.python 数据可视化

https://matplotlib.org/gallery.html

如果标题显示中文有问题添加 如下两行代码即可解决

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
  • matplotlib 模块 

 python 入门学习 模拟投掷骰子_第3张图片

4.python 简单的数据分析 

  • matplotlib 直方图

python 入门学习 模拟投掷骰子_第4张图片

python 入门学习 模拟投掷骰子_第5张图片

5.使用科学计算库NumPy 简化程序

python 入门学习 模拟投掷骰子_第6张图片

python 入门学习 模拟投掷骰子_第7张图片

python 入门学习 模拟投掷骰子_第8张图片

python 入门学习 模拟投掷骰子_第9张图片

更详细的教程见   https://www.sohu.com/a/202682457_718302

 

lesson1 

模拟掷骰子一个骰子

练习实践代码源码与输出结果

"""
作者:
版本:v1.0
日期:20190730
功能:模拟投掷骰子

"""
import random

def roll_dict():
#     模拟投掷骰子
    roll = random.randint(1,7)
    return roll

def main():
    # 主函数
    totle_times = 1000
    result_list = [0] * 6

    for i in range(totle_times):
        roll = roll_dict()
        for j in range(1,7):
            if roll == j :
                result_list[j-1] += 1

    print(result_list)
    for i, result in enumerate(result_list):
        print('点数:{} ,次数{} 频率 {}'.format(i+1, result, result / totle_times))

    print('end')
if __name__ == '__main__':
    main()

python 入门学习 模拟投掷骰子_第10张图片

lesson2

模拟投掷两个骰子

练习实践代码源码与输出结果

"""
作者:
版本:v2.0
日期:20190730
功能:模拟投掷骰子
模拟投掷两个骰子
"""
import random


def roll_dice():
    #     模拟投掷骰子
    roll = random.randint(1, 7)
    return roll


def main():
    # 主函数
    totle_times = 1000
# 初始化列表
    result_list = [0]* 12
# 初始化点数列表
    roll_list = list(range(2,13))
    roll_dict = dict(zip(roll_list,result_list))

    for i in range(totle_times):
        roll1 = roll_dice()
        roll2 = roll_dice()

        for j in range(2, 13):
            if (roll1+ roll2) == j:
                roll_dict[j ] += 1

    print(result_list)

    for i, result in roll_dict.items() :
        print('点数:{} ,次数{}  频率 {}'.format(i , result, result / totle_times))

    print('end')


if __name__ == '__main__':
    main()

python 入门学习 模拟投掷骰子_第11张图片

lesson3

需要安装库:命令如下:        pip3 install matplotlib 

如下图所示是安装成功后的提示界面

python 入门学习 模拟投掷骰子_第12张图片

练习实践代码源码与输出结果

 

"""
作者:
版本:v3.0
日期:20190730
功能:模拟投掷骰子
模拟投掷两个骰子,可视化
"""
import random
import matplotlib.pyplot as plt


def roll_dice():
    #     模拟投掷骰子
    roll = random.randint(1, 7)
    return roll


def main():
    # 主函数
    totle_times = 100
# 初始化列表
    result_list = [0]* 12
# 初始化点数列表
    roll_list = list(range(2,13))
    roll_dict = dict(zip(roll_list,result_list))
    #  记录骰子结果
    roll1_list = []
    roll2_list = []

    for i in range(totle_times):
        roll1 = roll_dice()
        roll2 = roll_dice()

        roll1_list.append(roll1)
        roll2_list.append(roll2)

        for j in range(2, 13):
            if (roll1+ roll2) == j:
                roll_dict[j ] += 1

    print(result_list)

    for i, result in roll_dict.items() :
        print('点数:{} ,次数{}  频率 {}'.format(i , result, result / totle_times))

    # 数据可视化
    x = range (1, totle_times + 1 )
    plt.scatter(x, roll1_list, c= 'red',  alpha = 0.5)
    plt.scatter(x, roll2_list, c= 'green', alpha = 0.5)
    plt.show()
    # 数据可视化 默认设置值
    # x = range(1, totle_times + 1)
    # plt.scatter(x, roll1_list )
    # plt.scatter(x, roll2_list )
    # plt.show()

    print('end')

if __name__ == '__main__':
    main()

python 入门学习 模拟投掷骰子_第13张图片

lesson4 

可视化投掷两个骰子的结果

练习实践代码源码与输出结果

"""
作者:
版本:v3.0
日期:20190730
功能:模拟投掷骰子
模拟投掷两个骰子,可视化使用直方图显示
"""
import random
import matplotlib.pyplot as plt

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

def roll_dice():
    #     模拟投掷骰子
    roll = random.randint(1, 6)
    return roll


def main():
    # 主函数
    totle_times = 1000
# 初始化列表
    roll_list = []

    for i in range(totle_times):
        roll1 = roll_dice()
        roll2 = roll_dice()
        roll_list.append(roll1 + roll2)

    # 直方图
    plt.hist(roll_list, bins=range(2,14),density = 1,edgecolor='black',linewidth=1)
    plt.title('骰子点数统计')
    plt.xlabel('点数')
    plt.ylabel('频率')
    plt.show()

    print('end')

if __name__ == '__main__':
    main()

python 入门学习 模拟投掷骰子_第14张图片

 

lesson5

练习实践代码源码与输出结果

"""
    作者:
    功能:
    版本:1.0
    2.0新增功能:模拟投掷两个骰子
    3.0新增功能:可视化投掷两个骰子的结果
    4.0新增功能:直方图可视化结果
    5.0新增功能:科学计算
    日期:20190806

"""
import matplotlib.pyplot as plt
import numpy as np

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

def main() :
    print('main')
    total_times = 1000

# 记录骰子的结果

    roll1_arr = np.random.randint(1,7,total_times)
    roll2_arr = np.random.randint(1,7,total_times)

    result_arr = roll1_arr + roll2_arr
    hist, bins = np.histogram(result_arr, bins= range(2,13))
    print(hist)  # 打印次数
    print(bins)  # 打印点数分布

    # 数据可视化
    plt.hist(result_arr, bins=range(2, 13), density=1, edgecolor='black', linewidth=1, rwidth=0.8)
    # plt.hist(result_arr, bins=range(2, 13), density=1,  edgecolor='black', linewidth=1, rwidth=0.8)
    # 设置x轴坐标点显示
    tick_labels = ['2', '3', '4', '5', '6', '7', '8',  '9', '10', '11', '12']
    tick_pos = np.arange(2, 13) + 0.5  #  + 0.5居中操作
    plt.xticks(tick_pos, tick_labels)

    plt.title('骰子点数统计')
    plt.xlabel('点数')
    plt.ylabel('频率')
    plt.show()


if __name__ == '__main__':
    main()

python 入门学习 模拟投掷骰子_第15张图片

 

 

 

你可能感兴趣的:(python学习)