random 模块

1
2
3
4
5
6
7
8

#random() 生成一个 [0, 1.0) 之间的随机 "浮点数"
#uniform(a, b) 生成一个 a - b 之间的随机 "浮点数"
#randint(a, b) 生成一个 a - b 之间的随机 "整数"
#choice(<list>) 从列表中随机返回一个元素
#shuffle(<list>) 将列表中元素随机打乱
#sample(<list>, k) 从指定列表中随机获取 k 个元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def roll_dice():
roll = random.randint(1, 6)
return roll

def main():
#单个骰子
list = [0] * 6

count = input("请输入掷骰子次数:")

for i in range(count):
roll = roll_dice()
for j in range(1, 7):
if roll == j:
list[j-1] += 1

print(list)

for i,x in enumerate(list):
print("{} --- {}".format(i,x))

if __name__ == "__main__":
main()

enumerate()

遍历列表,同时获取每个元素的索引号和值

小数点保留位数

1
2
3
4
5
6
7
8
9
round(1.254545, 2)
# -> 1.25

'%.2f' % 1.251215
# -> '1.25'

Decimal('5.026').quantize(Decimal('0.00'))
# -> 5.02
#from decimal import *
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import random

def roll_dice(number):
dict = {}
for i in range(number):
dict[i] = random.randint(1, 6)
return dict

def main():

list = [0] * 6
dict = {}

number = input("请输入骰子个数:")
count = input("请输入掷骰子次数:")

for i in range(int(count)):
roll = roll_dice(int(number))

for i in range(int(number)):
if i in dict.keys():
dict[i].append(roll[i])
else:
dict[i] = [roll[i]];

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

print("\n {} \n".format(list))

for i,x in enumerate(list):
print("点数为 {} 的次数是 {} ,概率为 {}".format(i+1, x,
round(x/sum(list),2)))

for k,v in dict.items():
print("\n 第 {} 个骰子,每次掷的点数为 \n {}".format(k+1, v))

print("\n")

if __name__ == "__main__":
main()

zip()

将对应的元素打包成一个个元组
l1 = [1,2,3,4,5]
l2 = ['a','b','c','d','e']
zip(l1,l2)
# -> [(1,"a"), (2,"b"), (3,"c"), (4,"d"), (5,"e")]

dict()

数据转换成字典
dict(zip(l1,l2))
# -> [1:"a", 2:"b", 3:"c", 4:"d", 5:"e"]
1
2
3
4
5
6
7
8
9
10
11
_list = [0]*11
roll_list = list(range(2,13))
roll_dict = dict(zip(roll_list, _list))

for i in range(10):
roll_1 = roll_dice();
roll_2 = roll_dice();

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

matplotlib 模块

数据可视化库

Vstudio 安装 matplotlib

  • 下载 pip get-pip.py

    安装 pip
    python get-pip.py cmd 定位到 get-pip.py 目录

    升级 pip
    python -m pip install -U pip

    安装matplotlib
    python -m pip install matplotlib

    安装Pillow(Python Imageing Library,用于读取和保存jpeg、bmp、tiff图像)
    pip install pillow

散点图 scatter

import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import random
import matplotlib.pyplot as plt

def roll_dice(number):
dict = {}
for i in range(number):
dict[i] = random.randint(1, 6)
return dict

def main():

list = [0] * 6
dict = {}

number = input("请输入骰子个数:")
count = input("请输入掷骰子次数:")

for i in range(int(count)):
roll = roll_dice(int(number))

for i in range(int(number)):
if i in dict.keys():
dict[i].append(roll[i])
else:
dict[i] = [roll[i]];

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

print("\n {} \n".format(list))

for i,x in enumerate(list):
print("点数为 {} 的次数是 {} ,概率为 {}".format(i+1, x,
round(x/sum(list),2)))

#数据可视化
x = range(1, int(count)+1)

for k,v in dict.items():
print("\n 第 {} 个骰子,每次掷的点数为 \n {}".format(k+1, v))

plt.scatter(x, v, alpha = 0.5)

plt.show()
print("\n")

if __name__ == "__main__":
main()

直方图 hist

plt.hist(data, bins)
data:数据列表
bins:分组边界

data = [20, 30, 45, 58, 99, 48]
bins = [0, 10, 20, 30]
plt.hist(data, bins)
1
2
3
4
5
6
7
8
9
10
11

# 编码注意,解决中文显示问题
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

#plt.scatter(x, v, alpha = 0.5)
plt.hist(v, [1,2,3,4,5,6],
density=1, edgecolor = 'black', linewidth = 1, rwidth = 0.8)
plt.title("骰子点数统计")
plt.xlabel("点数")
plt.ylabel("频率")

科学计算库

Numpy

强大的 N 维数组对象 array
成熟的科学函数库
实用的线性代数、随机数生成函数等

ndarray.shape //数组的维度
np.array(<list>)
np.range()  //创建数组
reshape() //改变数组形状
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#创建随机数组,[a, b) 间形状为 size 的数组
#np.random.randint(a, b, size)

roll_arr_1 = np.random.randint(1, 7, size = count)
roll_arr_2 = np.random.randint(1, 7, size = count)

#Numpy 运算,向量化操作
roll_arr = roll_arr_1 + roll_arr_2

#输出直方图的统计结果
hist, bins = np.histogram(roll_arr, bins = range(2,14))
print(hist)
print(bins)

# x 轴坐标点设置
tick_labels = ["2点""3点""4点""5点""6点"
"7点""8点""9点""10点""11点""12点"]
tick_pos = np.arange(2,13) + 0.5

plt.xtitcks(tick_pos, tick_labels)