为了账号安全,请及时绑定邮箱和手机立即绑定

用 Python 生成第 n 个随机数

用 Python 生成第 n 个随机数

慕的地10843 2021-06-06 19:02:23
我正在尝试生成用于生成世界一部分的随机数(我正在为游戏进行世界生成)。我可以用类似[random.randint(0, 100) for n in range(1000)]生成 1000 个从 0 到 100 的随机数来创建这些,但我不知道我需要列表中有多少个数字。我想要的是能够说出类似的东西random.nth_randint(0, 100, 5),它会生成从 0 到 100 的第 5 个随机数。(只要您使用相同的种子,每次都是相同的数字)我该怎么做?如果没有办法做到这一点,我怎么能得到同样的行为呢?
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

如果我理解你的问题,你每次都想要相同的n-th数字。您可以创建一个类来跟踪生成的数字(如果您使用相同的seed)。

主要思想是,当您要求 nth-number 时,它将生成所有以前的数字,以便在程序的所有运行中始终相同。


import random


class myRandom():

    def __init__(self):

        self.generated = []

        #your instance of random.Random()

        self.rand = random.Random(99)


    def generate(self, nth):

        if nth < len(self.generated) + 1:

            return self.generated[nth - 1]

        else:

            for _ in range(len(self.generated), nth):

                self.generated.append(self.rand.randint(1,100))

            return self.generated[nth - 1]


r = myRandom()

print(r.generate(1))

print(r.generate(5))

print(r.generate(10))


查看完整回答
反对 回复 2021-06-09
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

使用 a defaultdict,您可以拥有一个在第一次访问每个键时生成一个新数字的结构。


from collections import defaultdict

from random import randint


random_numbers = defaultdict(lambda: randint(0, 100))


random_number[5] # 42

random_number[5] # 42


random_number[0] # 63

因此,在访问时会延迟生成数字。


由于您正在开发一款游戏,因此您很可能需要random_numbers通过程序中断来进行保存。您可以使用pickle来保存您的数据。


import pickle


random_numbers[0] # 24


# Save the current state

with open('random', 'wb') as f:

    pickle.dump(dict(random_numbers), f)


# Load the last saved state

with open('random', 'rb') as f:

    opened_random_numbers = defaultdict(lambda: randint(0, 100), pickle.load(f))


opened_random_numbers[0] # 24


查看完整回答
反对 回复 2021-06-09
  • 3 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号