NO.1
'''
作者:Z_Howe
版本:1.0
功能:掷骰子实验:一个
日期:2019/1/28
'''
import random
def roll_selec():
select_num = random.randint(1,6)
return select_num
def main():
try_times = eval(input('请输入您要模拟投掷骰子的总次数:'))
list_1 = [0] * 6
for i in range(try_times):
result = roll_selec()
for j in range(1,7):
if result == j:
list_1[j - 1] += 1
for k,x in enumerate(list_1):
print('点数{}模拟的次数为{},概率为{}'.format(k+1,x,float(x/try_times)))
if __name__ == '__main__':
main()
# 创新想法:想用类,但多次尝试失败,等会儿再想
模拟结果如下:
NO.2
'''
作者:Z_Howe
版本:2.0
3.0新增功能:实现数据可视化
功能:掷骰子实验:两个
工具:使用zip()函数,形成映射 + numerate也是形成映射
日期:2019/1/29
'''
import random
import matplotlib.pyplot as plt
def roll_select():
select_num = random.randint(1,6)
return select_num
def main():
print()
print('温馨提示:')
print('鉴于可视化操作实现清晰性,请把输入的次数尽量调小!')
print()
try_times = eval(input('请输入您要模拟投掷骰子的总次数:'))
dict_1 = dict(zip(list(range(2, 13)), [0]*11))
result_list_1, result_list_2 = [], []
for i in range(try_times):
result_1, result_2 = roll_select(), roll_select()
result_list_1.append(result_1)
result_list_2.append(result_2)
for j in range(2, 13):
if (result_1 + result_2) == j:
dict_1[j] += 1
for k, r in dict_1.items():
print('点数{}模拟的次数为{},概率为{}'.format(k, r, float(r/try_times)))
# 数据可视化操作(使用matplotlib.pyplot模板)
x = range(1, try_times+1)
# 形成二维坐标图,并设置透明度
# y轴不能进入循环,能遍历列表
plt.scatter(x, result_list_1,alpha=1)
plt.scatter(x, result_list_2,alpha=1)
plt.show()
if __name__ == '__main__':
main()
模拟结果如下图:
NO.3
'''
作者:Z_Howe
版本:2.0
功能:掷骰子实验:两个
3.0新增功能:实现数据可视化
4.0新增功能:对结果进行简单的数据统计和分析,绘制直方图
引用matplotlib.pyplot.hist(data, bins)
data:数据列表 bins:分组边界
工具:使用zip()函数,形成映射 + numerate也是形成映射
日期:2019/1/29
'''
import random
import matplotlib.pyplot as plt
# 解决数据可视化操作的应用字符显示问题(一般是英文,现在改成中文)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def roll_select():
select_num = random.randint(1,6)
return select_num
def main():
print()
print('温馨提示:')
print('鉴于可视化操作实现清晰性,请把输入的次数尽量调小!')
print()
try_times = eval(input('请输入您要模拟投掷骰子的总次数:'))
dict_1 = dict(zip(list(range(2, 13)), [0]*11))
result_total = []
for i in range(try_times):
result_1, result_2 = roll_select(), roll_select()
result_total.append(result_1+result_2)
for j in range(2, 13):
if (result_1 + result_2) == j:
dict_1[j] += 1
for k, r in dict_1.items():
print('点数{}模拟的次数为{},概率为{}'.format(k, r, float(r/try_times)))
# 数据可视化操作
plt.hist(result_total, bins=range(2, 14), normed=1, edgecolor='black', linewidth=1)
plt.title('骰子点数统计')
plt.xlabel('点数')
plt.ylabel('频率')
plt.show()
if __name__ == '__main__':
main()
模拟结果如下图所示:
NO.4
'''
作者:Z_Howe
版本:2.0
功能:掷骰子实验:两个
3.0新增功能:实现数据可视化
4.0新增功能:对结果进行简单的数据统计和分析,绘制直方图
5.0新增功能:使用科学计算库(NumPy:Numeric Python)简化程序,完善数据可视化结果
工具:使用zip()函数,形成映射 + numerate也是形成映射
日期:2019/1/29
NumPy介绍(用Python实现的科学计算库):
1.强大的N维数组对象array
2.成熟的科学函数库
3.实用的线性代数、随机数生成函数
NumPy的操作对象是多维数组ndarray
ndarray.shape 数组的维度
创建数组:np.array(<list>), np.arange()...
改变数组形状 reshape()
NumPy创建随机数组:np.random.randint(a,b,size=(元组))
创建[a,b)之间形状为size的数组
如:
import numpy as np
arr = np.random.randint(1,10,(3,4))
print(arr)
[[7 8 3 2]
[7 3 3 2]
[1 4 3 2]]
np.histogram()输出直方图的统计结果,可以多个
matplotlib 绘图补充
· plt.xticks()设置x坐标的坐标点位置及标签
· plt.title()设置绘图标题
· plt.xlabel(), plt.ylabel()设置坐标轴的标签
'''
import matplotlib.pyplot as plt
import numpy as np
# 解决数据可视化操作的应用字符显示问题(一般是英文,现在改成中文)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def roll_select():
select_num = random.randint(1,6)
return select_num
def main():
print()
try_times = eval(input('请输入您要模拟投掷骰子的总次数:'))
# 记录骰子的结果
roll1_arr = np.random.randint(1, 7, (try_times, 1))
roll2_arr = np.random.randint(1, 7, (try_times, 1))
# 向量化操作:向量相加
result_arr = roll1_arr+roll2_arr
# bins是对应的range(2,14)的列举,而hist是每个点数对应的次数
# 感觉histogram是一行一行读取矩阵
hist,bins =np.histogram(result_arr, bins=range(2, 14))
print(hist)
print(bins)
# 数据可视化操作
plt.hist(result_arr, bins=range(2, 14), normed=1, edgecolor='black', linewidth=1, rwidth=0.8)
# 定义每个坐标点上的名称
tick_lables = ['2点', '3点', '4点', '5点', '6点',
'7点', '8点', '9点', '10点', '11点', '12点']
tick_pos = np.arange(2, 13) + 0.5
plt.xticks(tick_pos, tick_lables)
plt.title('骰子点数统计')
plt.xlabel('点数')
plt.ylabel('频率')
plt.show()
if __name__ == '__main__':
main()
模拟结果如下图所示: