【问题标题】:generating a random number everytime in a loop in python每次在python的循环中生成一个随机数
【发布时间】:2020-05-05 09:01:17
【问题描述】:

我正在尝试模拟 blob 的繁殖和死亡,每个 blob 都有繁殖和死亡的机会。每次在循环中都应该生成一个随机数来查看死亡率和出生率是否大于随机数,如果是,则创建或删除一个 blob。每个 blob 都存储在列表 blob 中。

问题是它似乎为所有 blob 生成 1 个数字,所以没有人死亡或每个人同时死亡,但我希望每个 blob 有不同的随机数。例如繁殖 - 和死亡机会是 0.5。

for blob in blobs:
        if blob.reproduce_chance > random.uniform(0,1):
            blobs.append(blob)
        if blob.death_chance > random.uniform(0,1):
            blobs.pop(blobs.index(blob))

【问题讨论】:

  • “问题是它似乎为所有 blob 生成 1 个数字” 是什么让你这么说?您是否添加了调试输出来检查该假设?
  • 我每次都打印了 blob 列表的长度,这样我就可以看到里面有多少 blob,它们总是加起来一个数字,然后在 1 中下降到 0,然后又上升。我以 0.05 的死亡几率对其进行了测试
  • 您在迭代 blobs 时对其进行了更改。这通常被认为是一个坏主意,并且可能是您的问题的原因。
  • 好吧,我运行了这个 sn-p,正如预期的那样,我无法重现该问题。我会把它放在答案中。
  • 另外:blobs.append(blob) 不会添加 new blob,而是添加现有 blob 的 copy

标签: python numpy random


【解决方案1】:
import random

variation = 0

for blob in range(10):
        if 0.5 > random.uniform(0,1):
            print("New born at blob", blob)
            variation += 1
        if 0.5 > random.uniform(0,1):
            print("Death at blob", blob)
            variation -= 1
print("Blob count change:", variation)

输出:

Death at blob 1
New born at blob 2
Death at blob 2
New born at blob 4
Death at blob 4
New born at blob 5
Death at blob 5
New born at blob 6
Death at blob 6
New born at blob 7
New born at blob 8
Blob count change: 1

所以问题不在于随机数生成器。 正如 cmets 中所说,这可能是由于在迭代列表时更改了列表。

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多