【问题标题】:Random Function generating the same value every time in a loop [duplicate]随机函数每次在循环中生成相同的值[重复]
【发布时间】:2021-03-13 20:20:23
【问题描述】:

我有一个随机的函数。该函数接受一个包含 10 个整数的数组,并根据数组中有多少非零整数,随机更改它们的值。

我的函数按我的意愿工作,每当我正常运行它时,它都会提供不同的输出。

但是我想循环运行该函数并存储我所有的随机输出。当我尝试这个时,我所有的输出最终都是一样的。我不知道为什么当函数在循环之外时会起作用。

如何让函数为循环的每次迭代返回不同的值,以便我可以存储它们。

我的功能代码如下,以备不时之需(抱歉,如果它不干净):

def stochastic(array):
    count = np.count_nonzero(array)
    n = 0
    m = 0
    p = 0
    q = 0
    r = 0
    counter = 0
    
    if count == 3:

        while n+m+p != 100:
            n = random.randint(28,36)
            m = random.randint(28,36)
            p = 100 - (n+m)
    
    if count == 4:
                
        while n+m+p+q != 100:
            n = random.randint(20,41)
            m = random.randint(20,41)
            p = random.randint(20,41)
            q = 100 - (n+m+p)
            
    if count == 5:
            
        while n+m+p+q+r != 100:
            n = random.randint(5,41)
            m = random.randint(5,41)
            p = random.randint(5,41)
            q = random.randint(5,41)
            r = 100 - (n+m+p+r)
        
    for j in range(len(array)):
        
        if array[j] != 0:
                
                counter += 1
                
                if counter == 1:
                    
                    array[j] = n
                elif counter == 2:
                    array[j] = m
                elif counter == 3:
                    array[j] = p
                elif counter == 4:
                    array[j] == q
                elif counter == 5:
                    array[j] == r
                
        if count == counter:
            counter = 0
    return array

print(stochastic(my2))

my1 = [33,33,34,0,0,0,0,0,0,0]
store = []

for i in range(1000):
    store.append(stochastic(my1))

编辑:对不起,我意识到我的功能很糟糕并且有很多重复。

我更改了我的函数以删除重复代码(我还添加了一个计数器 == 5 案例)。

我还添加了循环。

我得到的错误是当我打印存储变量时,其中的每个元素都是相同的。

【问题讨论】:

  • 请提供预期的MRE - Minimal, Reproducible Example。显示中间结果与预期结果的偏差。我们应该能够将您的代码块粘贴到文件中,运行它并重现您的问题。这也让我们可以在您的上下文中测试任何建议。您的代码不是最少的。它缺少至少两个导入,并且缩进不正确——一个完整的标签,如果没有别的。
  • 我们还希望您能够在错误点之前跟踪可疑值。
  • 你应该发布你的循环和对这个函数的调用。我看不出你的功能有什么问题。
  • 这部分错了:elif counter == 4: array[j] == q
  • @Prune - 很抱歉,我意识到我的代码非常重复且不清楚。如果有帮助,我已经对其进行了编辑

标签: python loops random


【解决方案1】:

您每次都呈现相同的列表实例。

my1 = [33,33,34,0,0,0,0,0,0,0]
store = []

for i in range(1000):
    store.append(stochastic(my1[:]))

您应该每次复制该列表,然后store 将填充不同的数据。

【讨论】:

    【解决方案2】:

    我认为这是您的循环条件的问题。不确定,因为没有 MRE,我无法轻松测试它。

    但是如果 Q = 100 - N - M - P ,那么 Q + N + M + P 不总是等于 100 吗?

    【讨论】:

    • 我没有想到这些变量可能是负数。但我不确定它是否因为该函数本身运行良好并且不会卡在那个while循环中
    • 欢迎来到 Stack Overflow。此响应应该是评论。很抱歉,声誉系统做了一些奇怪的事情。
    猜你喜欢
    • 2013-12-10
    • 2013-10-22
    • 2019-02-05
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多