环境
Ubuntu 16.04
Python 3.5.2
问题
现有一个生成1-5随机数的函数random_5(概率平均),如何将此转换为生成1-7随机数random_7的函数(概率平均),不得使用random模块
思路一(False)
直接将random_5生成的随机数乘以7/5后再通过round函数进行四舍五入后输出
random_5输出 | random_7输出 |
---|---|
1 | 1 |
2 | 3 |
3 | 4 |
4 | 6 |
5 | 7 |
特别糟糕的想法…
思路二(False)
生成两次random_5,将两者的值相加后减一(random_5 + random_5 - 1
),得出随机数1-9,而后再做一次判断,将8和9剔除掉,只在返回1-7的时候输出
不过很快就发现,只有在两次random_5都返回1的时候,才会返回1,概率远小于返回其它六个数
又是一个糟糕的想法…
思路三(True)
* 通过之前的两种思路,可以总结出将random_5返回的数据经过各种处理后不筛选返回1-7是不可能实现的(不能说不可能,只是我个人能力有限,暂时还没想出方法),那必须采用思路二中的筛选方法。
* 确定要使用筛选方法之后,目标就变成了生成等概率的、值取值范围大于1-7的随机数。
* 相加和返回值乘系数的方法都尝试过了,那么是否可以将两者结合一下呢。
* 首先思考乘系数,random_5 * 2 - 1
的返回结果是[1, 3, 5, 7, 9]
,想要等概率生成1-10的话,比如再将此返回值加上随机生成的0和1,也就是random.randint(0,
… 阅读全文 “将生成1-5随机数函数转换为1-7随机数函数的实现方法及其进阶”