Chu*_* Lu 3 python fizzbuzz random-seed
我很难弄清楚下面的代码是如何工作的:
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)]
Run Code Online (Sandbox Code Playgroud)
我明白,当i被整除时15,random将使用相同的seed,因此randint(0, 3)将始终返回相同的索引,但当我尝试
for i in range(100):
random.seed(1178741599)
print random.randint(0,3) #always print 0
Run Code Online (Sandbox Code Playgroud)
上面的代码总是打印0,不应该是(这是正确的行为,并3(作为"FizzBuzz"列表中的索引[i+1, "Fizz", "Buzz", "FizzBuzz"]?i+1在列表中对应).
又是怎么回事的时候i是整除3或5?
种子的魔力是1178741599什么?
编辑:正如jonrsharpe所指出的,fizzbuzz代码仅适用于python 2.x.
random.seed(n)
Run Code Online (Sandbox Code Playgroud)
意味着"将随机数发生器重置为某个已知位置n".这意味着可以提前知道发电机的未来输出.对于一遍又一遍地使用相同的"随机"数据进行测试非常有用.
这段代码的作用是每15步重置一次生成器,因此每次都得到相同的15"随机"整数序列(因此,列表中的字符串).在Python 2.x中,重置之后的第一个"随机"整数总是0(当我在Python 3中尝试之后,random.seed(1178741599)我得到之后random.randint(0, 3) == 1).
请注意,此代码不像传统的FizzBuzz程序那样执行,并且在很大程度上取决于random实现.它在2.7.3中适用于我,但在3.3.2中不起作用(请参阅为什么random在Python版本之间播种数字生成器不稳定?).