首页 > 解决方案 > 我怎么知道python中生成的随机数?

问题描述

这是我的代码。我刚开始学习Python。我正在尝试生成一个随机数并猜测它。如果答案是 7,那么我的程序将打印“幸运”。如果没有,那就“倒霉”了。我尝试多次运行我的简单代码。每次我“倒霉”。有没有人知道问题出在我的算法中还是其他地方。顺便说一句,我真的很想知道我怎么知道具体知道python中随机生成的数字是多少?我只是想知道每次生成的相同数字是否相同。

from random import randint
z = input("What's the max number you want me to guess?")
choice = f"randint(1,{z})"
if choice == 7:
    print("lucky")
else:
    print("unlucky")

标签: pythonpython-3.xrandomnumbers

解决方案


你每次都倒霉的原因与随机性无关。

尝试在调试器中运行您的代码,或者在print(choice)您得到的内容中添加 , 。

如果你输入,比如说,,10那么choice就是字符串"randint(1,'10')"。该字符串永远不会等于数字7

要完成这项工作,您需要更改两件事:

  • 实际上 call randint,而不是创建一个看起来像调用它的源代码的字符串。
  • 用数字调用它,比如10,而不是字符串,比如'10'

所以:

choice = randint(1, int(z))

一旦你解决了这个问题,随机数将是随机的。从技术上讲,它们是由 PRNG(伪随机数生成器)创建的,这是一种奇特的算法,它采用一堆状态信息并吐出一系列看起来随机但实际上可以从该状态预测的数字。但是,如 下所述seed,默认情况下,Python 为该生成器播种os.urrandom(在大多数平台上,它是另一个 PRNG,但它本身由任何可用的实际随机数据播种)。

如果您希望序列可重复,以进行测试,您可以seed手动调用该函数。例如,这个程序:

from random import randint, seed
seed(42)
z = input("What's the max number you want me to guess?")
choice = randint(1, int(z))
print(choice)

...2每次您要求 1 到 10 之间的随机数时都会给您。


推荐阅读