rand.randint一遍又一遍地返回相同的数字?

时间:2019-05-12 05:01:00

标签: python python-3.x raspberry-pi

我不太精通Python,所以也许我缺少明显的东西,但是我不明白为什么我用来生成随机数的代码似乎每个周期都使用相同的数字。我将在下面浏览我的python代码,首先介绍一些基本的导入和类设置内容:

import random
class Static:
# Settings (some shoudl be, you know, settings settings)
PIXEL_COUNT = 144

current_pixels = [[0,0,0]]*144
target_pixels =  [[255,255,255]]*144

# Output bar
def bar(self,settings):

    # this is where the final output pixels will go
    pixels = [(0,0,0)]*self.PIXEL_COUNT

    for pixel_index in range(self.PIXEL_COUNT):
        self.update_pixel(pixel_index)

    # Debug
    print('Update current_pixels',self.current_pixels);

    for pixel_index in range(self.PIXEL_COUNT):
        pixels[pixel_index] = (self.current_pixels[pixel_index][0],self.current_pixels[pixel_index][1],self.current_pixels[pixel_index][2])

    return pixels

# Will process the pixel and the specified index
def update_pixel(self,index):
    rand = random.randint(0,255)
    for color in range(3):
        if self.current_pixels[index][color] > self.target_pixels[index][color]:
            self.current_pixels[index][color] -= 1
        elif self.current_pixels[index][color] < self.target_pixels[index][color]:
            self.current_pixels[index][color] += 1
        else:
            self.current_pixels[index][color] = rand

_inst = Static()
bar = _inst.bar
bar({})

如果有人拥有不会让我注册使用它的代码,我很乐意将代码摆在摆弄的位置。当我运行该代码时,将输出到包含144个包含相同编号的列表的列表的终端(所有列表中的所有数字均相同)。据我了解,该代码应具有许多不同的值(并且仅列表像素列表中的值应匹配-用于白色静态对象)。就像我说的那样,我对python很陌生,所以它可能是基本的东西,但我不知道它可能是什么。有帮助吗?

1 个答案:

答案 0 :(得分:2)

您的问题是您的if else封锁。

if self.current_pixels[index][color] > self.target_pixels[index][color]:
        self.current_pixels[index][color] -= 1
elif self.current_pixels[index][color] < self.target_pixels[index][color]:
    self.current_pixels[index][color] += 1
else:
    self.current_pixels[index][color] = rand

除非else元素等于它的current_pixels元素,否则该代码永远不会到达target_pixels。由于每个current_pixels元素都初始化为0,并且每个target_pixels元素都从255开始,因此您只需触发elif块,这意味着您将所有RGB值加1。

我不确定您的最终目标是什么,但是如果您只是想将current_pixels初始化为0到255之间的随机值,则可以将嵌套列表理解作为一种方法来实现。 只需替换

current_pixels = [[0,0,0]]*144

使用

current_pixels = [[random.randint(0,255) for _ in range(3)] for _ in range(144)]