• 关于用 random 生成伪随机数的一个手笔


      我在想还要不要写什么文字。确实不需要太多的文字描述吧。

      前奏插一个小话题,之前在网上看到这样的冷笑话(有图的),一个程序猿调试个程序,早上怀疑某某地方的错误,下午怀疑某某地方的错误,晚上怀疑某某地方可能错了,睡觉了还是辗转反侧难以入眠。第二天早上,再看看代码的时候,无意中找到了bug,漏下了逗号“,“,哈哈冷笑话。

      我这次也是疏忽了。在一个网站的项目中,用random去生成随机数,作为上传文件的名称。当然在需要用户上传的文件中是不容易遇到这个bug的。但是在做爬虫下载文件也用这个random生成随机数的话就很可能遇到这个bug了。因为我们是用当前时间的毫秒去种子的。这里有个致命的误区:以为毫秒很小,能产生不相同的种子。但是毫秒虽小,但是程序是高速运转的,高速到不可以思议,实际上在循环中产生的种子还是相同的。这一点我忽略了。

      描述结束,上图:

    代码特写(注意产生随机数的方法):

    结果:产生的随机数的重复率是很高的,基本上是能连续重复三四个。我猜想是因为一毫秒程序能走个过程三四遍。

    我们换另一种测试方式,结果不要重复,在重复的情况下,就进入循环生成随机数。结果是生成了999个之后就进入死循环中了......

    最后,我们修改了生成随机数的方法,确保在循环中每次random的种子是不相同的。it works !!!

    我们再把循环去掉,发现,在不需要循环的情况下,一次性也能产生 10000 个不相同的随机数:

      原创:小明

      Email:weimingyou@126.com

      Date:2015/11/06

      原文链接:小明博客园-《关于用 random 生成伪随机数的一个手笔》

  • 相关阅读:
    控制element表格禁用选择
    深度拷贝
    VScode修复eslint报错,保存的时候自动格式修正
    关于route监听
    PAT 1030 完美数列
    PAT1029 旧键盘(C完全正确)
    PAT 1028 人口普查
    PAT 1016
    PAT:1013
    PAT :1012 数字分类
  • 原文地址:https://www.cnblogs.com/youler/p/4942733.html
Copyright © 2020-2023  润新知