简体   繁体   English

Python 3.6.0 - 如何使随机变量产生新的随机 integer?

[英]Python 3.6.0 - How do I make a random variable produce a new random integer?

import random
rainDropX = random.randint(5, WIDTH - 5)
rainDrop1 = Circle(2, MIDNIGHT_BLUE)

for i in range(75):
    pause(WAIT)
    add(rainDrop1, rainDropX, -5)
    if rainDrop1.getY() >= HEIGHT:
        rainDrop1.setLocation(rainDropX, -5)

In this portion, rainDrop1 will jump from (randomDropX, -5) to the bottom;在这部分,rainDrop1 会从 (randomDropX, -5) 跳到底部; it will then respawn at (randomDropX, -5).然后它将在 (randomDropX, -5) 处重生。 Currently, randomDropX will store the same random integer.目前,randomDropX 将存储相同的随机 integer。 How can I produce a new random integer and store it in the same variable efficiently?如何生成一个新的随机 integer 并将其有效地存储在同一个变量中?

Whenever you need the random value, make a new call to random.randint() at the time you need it , rather than once at the beginning of the script (which will simply get the result and assign it to the name rainDropX that one time)每当您需要随机值时,请在需要时random.randint()进行新调用,而不是在脚本开始时调用一次(这将简单地获取结果并将其分配给名称rainDropX一次)

It could be an optimization to create a table of random data and iterate over it, (either at runtime or once and save it) which is famously done in DOOM ( src ), though I doubt it practically matters unless you're requesting a huge amount of random data (which you may be for rain.).创建一个随机数据表并对其进行迭代(在运行时或一次并保存它)可能是一种优化,这在 DOOM ( src ) 中很有名,但我怀疑它实际上是否重要,除非你请求一个巨大的随机数据量(你可能会下雨。)。

Here's some you could use!这里有一些你可以使用的!

>>> [randint(0, 23) for _ in range(1024)]
[4, 3, 19, 12, 13, 20, 15, 18, 20, 12, 6, 8, 11, 4, 4, 7, 13, 22, 8, 22, 1, 7, 7, 5, 10, 13, 17, 9, 16, 19, 16, 21, 1, 23, 13, 5, 19, 16, 17, 14, 11, 10, 19, 7, 21, 19, 21, 8, 13, 13, 15, 9, 11, 16, 15, 18, 18, 21, 2, 0, 1, 1, 13, 3, 23, 1, 11, 14, 20, 8, 6, 2, 2, 7, 14, 6, 16, 6, 9, 6, 19, 0, 3, 0, 1, 16, 17, 23, 22, 21, 22, 8, 3, 10, 10, 2, 12, 0, 13, 6, 22, 15, 3, 17, 11, 7, 14, 0, 3, 15, 5, 4, 18, 1, 13, 11, 4, 23, 3, 4, 4, 15, 12, 1, 12, 0, 2, 23, 12, 16, 23, 21, 19, 0, 22, 8, 10, 14, 4, 16, 21, 16, 16, 6, 6, 13, 17, 9, 8, 8, 15, 7, 3, 6, 15, 0, 15, 14, 7, 0, 3, 20, 5, 4, 2, 12, 2, 12, 15, 9, 19, 5, 11, 10, 1, 18, 16, 11, 14, 11, 23, 10, 8, 8, 4, 13, 15, 8, 11, 22, 19, 20, 20, 10, 14, 20, 13, 14, 8, 16, 22, 18, 17, 20, 9, 14, 9, 5, 19, 22, 12, 19, 6, 1, 20, 1, 2, 22, 6, 12, 20, 12, 19, 21, 7, 16, 16, 11, 17, 2, 16, 9, 5, 11, 6, 7, 15, 16, 22, 8, 15, 5, 13, 11, 3, 23, 17, 0, 4, 21, 2, 21, 12, 18, 21, 12, 22, 1, 15, 9, 22, 16, 11, 20, 14, 1, 2, 12, 2, 23, 0, 21, 21, 13, 19, 14, 11, 23, 20, 1, 11, 11, 19, 4, 8, 14, 2, 23, 9, 12, 5, 16, 6, 11, 19, 3, 21, 8, 16, 0, 5, 17, 0, 11, 15, 2, 8, 9, 4, 15, 2, 21, 20, 0, 10, 15, 6, 2, 19, 6, 14, 13, 6, 18, 9, 3, 6, 8, 23, 17, 4, 3, 9, 12, 15, 1, 3, 13, 7, 0, 12, 10, 0, 15, 16, 3, 7, 6, 22, 5, 3, 18, 21, 23, 9, 12, 12, 15, 16, 6, 16, 20, 14, 1, 23, 2, 8, 18, 5, 9, 6, 20, 12, 13, 9, 2, 16, 16, 12, 10, 13, 16, 5, 13, 9, 17, 3, 23, 9, 2, 12, 20, 2, 11, 6, 21, 22, 23, 19, 17, 1, 0, 21, 0, 1, 15, 6, 2, 11, 5, 22, 12, 22, 22, 20, 17, 15, 22, 1, 3, 14, 7, 1, 13, 16, 5, 11, 1, 10, 17, 22, 15, 18, 4, 9, 1, 11, 11, 5, 9, 5, 18, 14, 4, 17, 16, 12, 7, 20, 7, 16, 20, 4, 1, 8, 13, 2, 6, 12, 17, 22, 11, 13, 17, 14, 7, 1, 11, 9, 7, 10, 3, 2, 14, 16, 8, 18, 22, 19, 17, 12, 9, 8, 0, 6, 17, 11, 14, 7, 0, 14, 13, 18, 4, 7, 16, 12, 9, 10, 11, 20, 2, 2, 6, 21, 13, 15, 7, 17, 12, 2, 6, 4, 13, 15, 2, 21, 19, 19, 6, 11, 22, 2, 17, 15, 19, 12, 7, 23, 11, 16, 4, 10, 18, 2, 17, 13, 17, 17, 7, 11, 13, 14, 6, 3, 18, 0, 0, 6, 12, 23, 18, 16, 1, 13, 4, 23, 15, 17, 11, 7, 4, 11, 10, 4, 12, 6, 16, 18, 12, 9, 9, 16, 0, 3, 0, 0, 23, 20, 4, 16, 9, 20, 5, 14, 9, 13, 12, 23, 19, 5, 14, 1, 12, 23, 12, 23, 15, 16, 13, 10, 23, 15, 14, 14, 21, 12, 3, 19, 13, 11, 7, 8, 15, 6, 12, 21, 4, 10, 2, 22, 4, 0, 4, 21, 8, 23, 12, 6, 16, 19, 14, 3, 1, 9, 1, 3, 6, 23, 3, 11, 5, 0, 10, 22, 13, 19, 14, 5, 4, 12, 11, 18, 23, 2, 0, 18, 1, 16, 8, 0, 8, 18, 0, 1, 1, 0, 1, 21, 2, 7, 2, 21, 14, 11, 17, 4, 23, 17, 1, 2, 2, 17, 15, 16, 20, 3, 9, 17, 19, 18, 20, 8, 15, 5, 14, 17, 8, 9, 14, 7, 17, 13, 20, 16, 21, 7, 18, 0, 13, 10, 4, 23, 23, 9, 23, 4, 12, 2, 16, 6, 1, 9, 23, 9, 19, 0, 4, 0, 0, 14, 15, 15, 23, 15, 17, 15, 17, 6, 7, 2, 8, 9, 17, 12, 8, 20, 1, 22, 22, 8, 4, 16, 22, 16, 2, 15, 21, 20, 14, 17, 9, 21, 3, 4, 4, 13, 16, 23, 18, 11, 6, 17, 8, 6, 16, 17, 18, 17, 0, 14, 17, 13, 20, 14, 23, 22, 18, 19, 5, 11, 11, 2, 5, 2, 15, 16, 3, 7, 20, 23, 13, 17, 7, 15, 2, 13, 16, 20, 19, 6, 6, 16, 4, 8, 1, 5, 9, 17, 21, 8, 8, 11, 15, 1, 10, 20, 15, 1, 1, 23, 21, 18, 3, 11, 4, 13, 10, 10, 7, 18, 16, 15, 23, 2, 2, 0, 3, 18, 8, 3, 18, 16, 12, 17, 13, 16, 2, 18, 20, 12, 14, 17, 8, 21, 6, 22, 19, 0, 10, 19, 11, 9, 15, 10, 22, 13, 21, 22, 2, 8, 5, 19, 14, 2, 22, 7, 11, 9, 15, 3, 0, 7, 20, 14, 9, 8, 1, 20, 12, 19, 21, 1, 11, 16, 3, 12, 13, 12, 7, 10, 8, 3, 22, 20, 20, 12, 12, 15, 22, 19, 19, 19, 0, 4, 8, 19, 1, 12, 22, 8, 23, 23, 23, 4, 0, 20, 8, 4, 19, 15, 6, 12, 16, 22, 4, 8, 17, 14, 10, 2, 20, 7, 10, 17, 13, 10, 12, 4, 4, 1, 20, 7, 21, 9, 12, 4, 8, 19, 7, 22, 23, 11, 15, 14, 22, 6, 2, 6, 13, 4, 0, 11, 12, 11, 6, 17, 7, 14, 12, 17, 8, 3, 20, 4, 12, 3, 17, 16, 12, 14, 3, 10, 6, 21, 0, 17, 20, 3, 9, 0, 7, 4, 21, 21, 17, 9, 19, 18, 23, 5, 23, 15, 20]

Here's an iterable class you could use这是您可以使用的可迭代 class

class StaticRand():
    def __init__(self, value_min, value_max, length=1024):
        self._length = length
        self._min    = value_min
        self._max    = value_max
        # make a new table of random data
        self.table = [randint(self._min, self._max) for _ in range(self._length)]
        self.index = 0
    def __iter__(self):
        return self
    def __next__(self):
        try:
            return self.table[self.index]
        finally:
            self.index = (self.index + 1) % self._length

example usage示例用法

>>> from itertools import islice
>>> r = StaticRand(0, 23)
>>> list(islice(r, 5))
[22, 3, 22, 15, 17]
>>> a = list(islice(r, 1024))
>>> b = list(islice(r, 1024))  # wraps around all the way!
>>> c = list(islice(r, 1023))  # a little short
>>> a == b
True
>>> a == c
False

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM