【问题标题】:Spawning objects in groups when the first object of the group was spawned randomly Python当组的第一个对象随机生成时,分组生成对象 Python
【发布时间】:2016-03-23 19:47:02
【问题描述】:

我目前正在做一个项目,在我拥有的代码中,我正在尝试获取树。*。和山。^。在随机生成的第一棵树或山周围成组生成,但是,我无法弄清楚如何让树木和山脉在单个随机生成的点周围成组生成。有什么帮助吗?

grid = []
def draw_board():
    row = 0
    for i in range(0,625):
        if grid[i] == 1:
            print("..."),
        elif grid[i] == 2:
            print("..."),
        elif grid[i] == 3:
            print(".*."),
        elif grid[i] == 4:
            print(".^."),
        elif grid[i] == 5:
            print("[T]"),
        else:
            print("ERR"),
        row = row + 1
        if row == 25:
            print ("\n")
            row = 0 
    return

【问题讨论】:

  • 没有问题。请,问一个。
  • 改写成更好的问题

标签: python random


【解决方案1】:

您可以通过多种方式做到这一点。

首先,您可以直接模拟组,即在网格上选择一个范围并用特定的图形填充它。

def generate_grid(size):
    grid = [0] * size
    right = 0
    while right < size:
        left = right
        repeat = min(random.randint(1, 5), size - right) # *
        right = left + repeat
        grid[left:right] = [random.choice(figures)] * repeat
    return grid

请注意,组大小不必均匀分布,您可以使用任何方便的分布,例如Poisson.

其次,您可以使用Markov Chain。在这种情况下,组长度将隐式遵循Geometric distribution。代码如下:

def transition_matrix(A):
    """Ensures that each row of transition matrix sums to 1."""
    copy = []
    for i, row in enumerate(A):
        total = sum(row)
        copy.append([item / total for item in row])
    return copy


def generate_grid(size):
    # Transition matrix ``A`` defines the probability of 
    # changing from figure i to figure j for each pair 
    # of figures i and j. The grouping effect can be
    # obtained by setting diagonal entries A[i][i] to 
    # larger values.
    # 
    # You need to specify this manually. 
    A = transition_matrix([[5, 1], 
                           [1, 5]])  # Assuming 2 figures.

    grid = [random.choice(figures)]
    for i in range(1, size): 
        current = grid[-1]
        next = choice(figures, A[current])
        grid.append(next)
    return grid

choice 函数在this StackOverflow 答案中的解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 2019-08-02
    • 1970-01-01
    • 2015-07-30
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多