random.randint是随机的嘛?从最近搞的两次活动说起

最近在中文社区搞了两次活动,分别是晒年夜饭得点赞红包,以及迎财神得随机点赞红包,谢天谢地活动都圆满完成,没有出什么大的纰漏。

dice-1502706_960_720-1.jpg
(图源 :pixabay)

不过小插曲还是有一些的,比如晒年夜饭的规则一开始就没制订完善,比如说是晒一张图还是多张图啊?之前已经发帖子晒过的还可不可以参加活动啊?参加活动的图片之后还可不可以用于发帖啊?参加活动是否同时要写些文字内容啊?

还有就是虽然以为弄程序会是小菜一碟,但是因为好久没磕程序,手生得厉害,搞了一个大半天+一个大上午,测试了无数次后,才让程序能够正常工作。

当然,所谓的正常工作是打了折扣的,比如我希望回复中加上@xxx(作者ID)作为开头,但无论如何也没能解决格式错乱的问题(我觉得不是我代码而是hive.blog的问题),最后只好把这个特色去掉,嗯,这样也好,省得骚扰别人。

到了大年初五迎财神这个活动呢,我想整出点花样,增加趣味性,让点赞金额在2HBD - 6HBD随机产生,这样就有了一些“抽奖”的感觉,我自己都觉得会很好玩,忍不住参与了一下。

结果这一个趣味性,让这个活动有了一些小翻车的感觉,我期待的奖金金额是平均分配的,按三十八九个用户参加活动的话,那么每个奖项的金额都应该是8个的样子。

结果开一个2HBD,开一个又是2 HBD,如果不是代码是我自己的写的,程序是我自己运行的,全程没加入任何人为因素,我都会怀疑有黑幕,严正抗议!

最终开奖结果如下:

奖项人数祝福语寓意
6 HBD5人六六大顺寓意一切顺利,事事如意
5 HBD9人五福临门表示五种福气降临家门,幸福满满。
4 HBD2人四季平安祝愿一年四季都平安顺遂。
3 HBD9人三羊开泰寓意吉祥如意,万事顺利。
2 HBD14人二龙腾飞象征事业蒸蒸日上,飞黄腾达

嗯,加上祝福语和寓意看起来就好多了,这样每个奖项都不错。

不过我还是纳闷,为啥开出这么多2 HBD呢,其实我是希望多开一些6HBD,或者哪怕多开一些三四五也好看一些啊?这让我甚至有些怀疑Pythonrandom.randint(2, 6)的随机性了。

为此我特意写了一段程序来验证random.randint的随机性

import random
from pprint import pprint

dict= {'a':0, 'b':0, 'c':0, 'd':0, 'e':0}
list = list(dict.keys())

pprint(dict)


for i in range(0, 50000):
        index = random.randint(0, 4)
        dict[list[index]]+=1
pprint(dict)

上述代码大意是执行50000次random.randint操作,然后看看选取出来的值分布范围

随便执行几次程序,结果差不多都是类似下边这样。
1738550385535.png

1738550405131.png

可见当样本足够多的时候,随机性还是没问题的。当我们把函数执行次数改成50,结果就类似这样了

1738550524386.png

1738550588136.png

可见差异还是非常大的,是随机性失灵了吗?我仔细想了一下,这才是随机性的正确表现呢。就好比我们扔硬币,每轮扔两次,如果每次都是一字一背,或者一背一字,那么能说这样才算随机吗?随机不等同于均匀分布。

那是不是程序就没有改进的余地呢?也不是,比如我可以用程序生成一组数字,8个2,8个3,8个4,8个5,8个6,然后每次抽奖从中随机选取一个,被选出的数从列表中移除,直到抽奖完成,所有的数字被选出。不过这样,又增加了实现的复杂性,你知道,我是非常懒的,

另一种折中方法就是把最低奖项调高,比如从3起或者从4起,然后加入4.5 5.5这样的奖项,这样大奖小奖差异不太大,得小奖的心里落差没那么悬殊,估计会好很多。不过这两天暂时不计划搞活动了,数数数得老眼昏花,歇歇,歇歇啦。

讲真,最后几个小伙伴都点出2 HBD时,我都绝望了,想砸电脑,好在最后一个参与的小伙伴小影,抽了6 HBD的大包,为这次活动画上了一个完美的句号,不愧是和财神握过手的女人啊。

对了,还有个事,小影参加活动时已经是半夜了,我那时还没去数有多少小伙伴参加活动,点赞之后一统计,发现人数已经39了啦,但凡小影再晚上一会,我把截至线发出去,她的回复就没法参加活动了,所以她还真是幸运呢。

说起来由于这次活动我也很好奇自己会抽到多少,所以也参加了一下,抽到了5HBD (五福临门签)还不错。按说吧,这类抽奖活动工作人员都不参与,既然我抢占了一个名额,再多放个名额也算合理,嗯,就是这样,简直不要太完美!

thank-you-5077738_960_720.jpg
(图源 :pixabay)

最后再次感谢小伙伴们的热情参与,再次感谢神秘大佬的鼎力支持。

Sort:  

Congratulations to all winners! 🏆🎉🏆

感谢O哥为大伙谋福利🧧🧧🧧

感谢O哥的活动哈,第一次晒年夜饭的活动没赶上,这一次的财神爷活动赶上了,哈哈,非常感谢,也是很幸运的,因为我回到家也确实很晚了,也不确定能否赶上,然后昨天刚好和财神爷握手还抓拍财神爷的照片,就正好用上了,话说我昨天要抱一下财神爷才对,说不定还有更大的好事发生哈哈哈。。

O哥举办的两次活动我都赶上了,再次感谢O哥,感谢大佬,辛苦了

感謝O哥辛苦舉辦活動!

谢谢O哥,再一次感谢!两次活动大伙都很开心🙂🙂🙂

谢谢O哥赐予的五福临门 老铁 在心中😄

真随机性程序不好写

O哥真会搞活动,谢谢O哥!

O哥,辛苦了!

数数数得老眼昏花

我祝O哥,数钱,数到手抽筋
哈!