我很难弄清楚下面的代码是如何工作的:
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)]
我知道当 i
被 15
整除时,random
将使用相同的 seed
因此 randint(0, 3)
将始终返回相同的索引,但是当我尝试
for i in range(100):
random.seed(1178741599)
print random.randint(0,3) #always print 0
上面的代码总是打印0
,不应该是(这是正确的行为,对应于 3
吗(因为“FizzBuzz”
在list [i+1, "Fizz", "Buzz", "FizzBuzz"]
?i+1
在列表中。)
当 i
可以被 3
或 5
整除时呢?
种子1178741599
有什么神奇之处?
编辑:正如 jonrsharpe 所指出的,fizzbuzz 代码仅适用于 python 2.x
最佳答案
random.seed(n)
表示“将随机数生成器重置到某个已知位置 n
”。这意味着可以提前知道生成器的 future 输出。它对于一遍又一遍地使用相同的“随机”数据进行测试很有用。
此代码的作用是每 15 步重置一次生成器,因此您每次都会得到相同的 15 个“随机”整数序列(因此,也是列表中的字符串)。在 Python 2.x 中,重置后的第一个“随机”整数始终是 0
(当我刚才在 Python 3 中尝试时,在 random.seed(1178741599)
之后我得到 random.randint(0, 3) == 1
).
请注意,此代码不执行传统 FizzBuzz 程序执行的操作,并且在很大程度上取决于随机
实现。它在 2.7.3 中对我有用,但在 3.3.2 中不起作用(参见 Why is seeding the random
number generator not stable between versions of Python?)。
关于python - Python 中的 fizzbuzz 使用随机,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20957693/