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

标签 python random-seed fizzbuzz

我很难弄清楚下面的代码是如何工作的:

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)]

我知道当 i15 整除时,random 将使用相同的 seed 因此 randint(0, 3) 将始终返回相同的索引,但是当我尝试

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

上面的代码总是打印0不应该是3吗(因为“FizzBu​​zz”在list [i+1, "Fizz", "Buzz", "FizzBu​​zz"]?(这是正确的行为,对应于 i+1在列表中。)

i 可以被 35 整除时呢?

种子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).

请注意,此代码执行传统 FizzBu​​zz 程序执行的操作,并且在很大程度上取决于随机 实现。它在 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/

相关文章:

c++ - Matlab Random 和 C++ Random 是否有相同的种子?

python - 在 Python 中生成随机种子

java - Java 优化器是否内存计算值?

javascript fizzbuzz 开关语句

python - 合并第n层多维字典

python - 高效访问 Pandas 列中对象的属性

python - 使用python将Dataframe转换为字典

python - tkinter 快捷方式无法启用

java - 随机种子生成随机数

javascript - 连接两个字符串时 += 的作用是什么? ( Eloquent JS FizzBu​​zz)