概率模拟
本帖最后由 paypojie 于 2024-5-7 23:42 编辑突发奇想弄的一个东东 功能是通过生成n次随机数来达到跟期望的数字相等 并输出概率
import random
for i in range(101):
count = 1
random_1 = random.randint(0,i+1)
while i != random_1:
random_1 = random.randint(0,i+1)
count += 1
else:
percentage = (1 / count) * 100
print('[%d 循环%d次得到该数字 概率为%.2f%%]' % (i,count,percentage))
将代码改改 功能发生了改变 下面的代码作用是 测试随机数与随机数碰撞成功的概率
import random
for i in range(1,101):
count = 1
random_1 = random.randint(0,101)
random_2 = random.randint(0,101)
while random_1 != random_2:
random_2 = random.randint(0,101)
count += 1
else:
percentage = (1 / count) * 100
print('[第%d次碰撞 碰撞%d次得到该数字 概率为%.2f%%]' % (i,count,percentage))
随机和循环很有意思 哈哈
不错,可以搞成彩票软件吗? 本帖最后由 爱飞的猫 于 2024-5-8 05:36 编辑
概率不对;一个好的随机算法,应当让生成任意指定范围数字的概率差不多趋势与一致(如果实验次数足够多)。
例如我扔骰子,运气不错连续两次扔到 6。根据你的程序算法,此时会停止,并认为碰到 6 的概率是 100%。此时样本过小,会不足以支撑这个数字。
```py
import random
import secrets
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
USE_SYSTEM_RANDOM = False# 改为 True 使用 SystemRandom
TEST_COUNT = 1000 * 1000 * 1000
# 计数器
counter = * 100
# 生成随机数
rnd = secrets.SystemRandom() if USE_SYSTEM_RANDOM else random.Random()
for _ in range(1000 * 100):
number = rnd.randint(1, 100)
counter += 1
# 出图
_, ax = plt.subplots()
ax.bar(range(1, 101), counter, align='center')
# 默认情况下无法渲染 CJK 字符,姑且写死一个 Windows 下的字体路径凑合用
font = fm.FontProperties(fname="C:/Windows/Fonts/msyh.ttc", size=14)
ax.set_title('随机分布', fontproperties=font)
ax.set_xlabel('数值', fontproperties=font)
ax.set_ylabel('次数', fontproperties=font)
plt.show()
```
![](https://imgsrc.baidu.com/forum/pic/item/0b7b02087bf40ad1cf86c3de112c11dfa9eccea9.png)
当然,每次执行时,不同值出现的频率都会上下摇摆一部分。
很好 楼主的两个都成功了 好是好啊 概率永远只能被模拟 好,很好 爱飞的猫 发表于 2024-5-8 05:35
概率不对;一个好的随机算法,应当让生成任意指定范围数字的概率差不多趋势与一致(如果实验次数足够多 ...
这处ttc字体文件在哪里? 大概率期望 random函数本身就是个不完全的随机
页:
[1]
2