python - 诺依曼的随机生成器 - Python 3

标签 python python-3.x

我正在研究 Code Abbey 问题 23,Neumann 的随机生成器。目标是使用给定的算法从列表中的每个值生成一系列随机数,并继续下去,直到算法生成与我们开始时相同的数字。然后,打印到达循环所需的遍数。我似乎无法让我的代码工作;我很确定这与 while 循环有关。我将不胜感激任何帮助,更重要的是,解释我做错了什么。

这是我的代码:

cases = int(input())
values = [int(x) for x in input().split()]

def random_number(values):
    for value in values:
        random = pow(value, 2)
        passes = 0
        equal = False

        while not equal:

            if len(str(random)) < 8:
                random = int(str(random).zfill(8))

            random = (random // 100) % 10000

            passes += 1

            if random == value:
                equal = True
            else:
                random = pow(random, 2)

        print(passes, end=' ')

random_number(values)

这是我的输入:

12
6239 8935 4715 8785 9737 9251 3251 3544 9631 4655 903 7589

最佳答案

问题: 中方方法并不总是返回到起始种子,但这是您测试的唯一结果。该序列可以返回除种子之外的某个已访问过的数字,在这种情况下,random 永远不会等于value,并且您的程序将不会检测到重复。 (为了快速演示这一点,请尝试以 12 为起始值手动执行该算法 - 您会发现它开始非常快速地重复,但再也不会访问 12)。

解决方案:您需要存储迄今为止访问过的每个值的列表,并在 时终止,而不是仅仅存储原始值并与随机值进行比较>random 出现在该列表中的任何位置。

关于python - 诺依曼的随机生成器 - Python 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26191540/

相关文章:

python - 匹配以逗号分隔的精确长度的所有单词

python - Python 中 Json 到 OrderedDict

python - 同时运行两个python文件

python - Pandas Dataframe 多索引按级别和列值排序

python - 在数据流中寻找一系列模式

performance - Python,迭代正则表达式但在第一次匹配时停止的最快方法

python-3.x - 如何使用 BS 或 selenium 从 gchart 中抓取数据

python - 只有函数中的调用是通过的,但是函数仍然做了一些事情?

python - Pyinstaller exe 无法在其他计算机上运行(使用其他 Windows 版本)

python - 区分消息python3 tcp sockets