- Python网络爬虫实战(第2版)
- 胡松涛
- 545字
- 2021-03-23 23:03:58
3.3 概率计算
将理想状态绝对无误差的10个同样的小球从1~10标号,然后随机从中选出1个小球。如果选取的次数足够多,就可以计算各个小球被选取出来的概率。编写一个Python程序来算一算,看看老天偏爱哪个数。
3.3.1 Project分析
这是一个随机数的问题。Python有个random模块,专门用来解决这类问题。据说Python用random选取出来的随机数都是伪随机数。不过也没关系,只需要算出大致的结果就可以了。没计算之前,个人认为每个球被选取出来的概率都一样。下面就来算算看。
3.3.2 Project实施
【示例3-3】编写ball.py,打开Putty连接到Linux,执行命令:
cd code/crawler vi ball.py
ball.py的代码如下:
1 #!/usr/bin/env python3 2 #-*- coding: utf-8 -*- 3 __author__ = 'hstking hst_king@hotmail.com' 4 5 import random 6 7 class SelectBall(object): 8 def __init__(self): 9 self.run() 10 11 def run(self): 12 while True: 13 numStr = input('输入测试的次数:') 14 try: 15 num = int(numStr) 16 except ValueError as e: 17 print('要求输入一个整数') 18 continue 19 else: 20 break 21 ball = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 22 for i in range(num): 23 n = random.randint(1,10) 24 ball[n-1] += 1 25 for i in range(1,11): 26 print('获取第%d号球的概率为%f' %(i, ball[i-1]*1.0/num)) 27 28 29 if __name__ == '__main__': 30 SB = SelectBall()
执行命令:
python3 ball.py
得到的结果如图3-3所示。
图3-3 选球概率
果然如此,每个球选取的概率差不多。选取的次数越多,这个趋势就越明显。也就是说,在理想状态下,所有球被选取的概率是一样的。
提示
这种选取小球概率的计算方法只是一种理想状态的算法。类似于丢硬币出现正反面的概率,理论上应该是一半对一半,但实际上由于硬币材质的缘故,丢硬币的次数越多,正反面出现的概率差距就越大。