加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用随机的Python中的fizzbuzz,它是如何工作的?

发布时间:2020-12-20 11:32:39 所属栏目:Python 来源:网络整理
导读:我很难弄清楚下面的代码是如何工作的: import randomfor i in range(0,100): if not i % 15: random.seed(1178741599) print [i+1,"Fizz","Buzz","FizzBuzz"][random.randint(0,3)] 我明白,当我可以被15整除时,随机将使用相同的种子,因此randint(0,3)将始终
我很难弄清楚下面的代码是如何工作的:

import random

for i in range(0,100):
    if not i % 15:
        random.seed(1178741599)
    print [i+1,"Fizz","Buzz","FizzBuzz"][random.randint(0,3)]

我明白,当我可以被15整除时,随机将使用相同的种子,因此randint(0,3)将始终返回相同的索引,但是当我尝试

for i in range(100):
    random.seed(1178741599)
    print random.randint(0,3) #always print 0

上面的代码总是打印0,不应该是3(作为列表中的“FizzBu??zz”索引[i 1,“Fizz”,“Buzz”,“FizzBu??zz”]?(这是正确的行为,并且对应到列表中的i 1.)

那么当我被3或5整除时呢?

种子1178741599的魔力是什么?

编辑:正如jonrsharpe所指出的,fizzbuzz代码仅适用于python 2.x.

解决方法

random.seed(n)

意味着“将随机数发生器重置为某个已知位置n”.这意味着可以提前知道发电机的未来输出.对于一遍又一遍地使用相同的“随机”数据进行测试非常有用.

这段代码的作用是每15步重置一次生成器,因此每次都得到相同的15“随机”整数序列(因此,列表中的字符串).在Python 2.x中,重置后的第一个“随机”整数始终为0(当我刚刚在Python 3中尝试,在random.seed之后(1178741599),我得到random.randint(0,3)== 1).

请注意,此代码不像传统的FizzBu??zz程序那样执行,并且在很大程度上取决于随机实现.它在2.7.3中适用于我,但在3.3.2中不起作用(见Why is seeding the random number generator not stable between versions of Python?).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读