Python - 网格,单元格中的随机整数

时间:2015-03-10 11:57:37

标签: python grid

我一直在尝试创建n x n高程值网格(以米为单位),峰值是所有四个相邻单元格(北,南,东, West)严格降低。运行该函数时,0 - 9中的随机整数将显示在单元格中。

示例运行(n == 5):

2 6 1 7 5
6 8 3 2 6
5 4 1 6 4
4 6 9 5 3
3 4 8 1 2

在上面的网格中,有3个峰:869。同样,指出打印峰值中峰的坐标(行和列索引)。

例如,"peak: 8m @ location 1,1""peak: 6m @ location 2,3"等。

同样,指示打印峰值中峰的坐标(行和列索引)。指数应从零开始,即左上角位于索引0,0

部分代码:

import numpy as np
import random
n = 5
grid = np.array([random.randrange(10) for i in range(n**2)])
print grid.reshape(n,n)

for row in range(1,n+1):
for col in range(1,n+1):
    if grid[row][col] > grid[row-1][col] :
        cell = random.randrange(10)
        grid.append(cell)

    if grid[row][col] > grid[row+1][col]:
        cell = random.randrange(10)
        grid.append(cell)

    if grid[row][col] > grid[row][col+1]:
        cell = random.randrange(10)
        grid.append(cell)

    if grid[row][col] > grid[row][col-1]:
        cell = random.randrange(10)
        grid.append(cell)


print grid

我不知道如何实施“峰值”的条件。而第二部分真的很不稳定。

1 个答案:

答案 0 :(得分:1)

据我所知,你的问题分为两部分。生成地图,找到峰值。

第1部分:生成随机地图

from random import randint
map = []

for y in range(rows):
    row = []
    for x in range(columns):
        row.append(randint(0, 9))
    map.append(row)

这应该会产生类似于:

的结果
map = [
    [5, 3, 4, 4, 6],
    [1, 2, 8, 2, 5],
    [8, 2, 4, 2, 5],
    [9, 5, 9, 6, 3],
    [3, 8, 9, 7, 4]
    ]

第2部分:找到峰值

peaks = [] # list to store peaks

for row in range(map):
    for col in range(row): # col is short for column

        peak = True
        height = map[row][col]
        # if adjacent square is higher
        # each coordinate has to be checked to see if it is in range
        if 0 <= row -1 and map[row-1][col] >= height:
            peak = False
        elif row + 1 < len(map) and map[row+1][col] >= height:
            peak = False
        elif 0 <= col - 1 and map[row][col-1] >= height:
            peak = False
        elif col + 1 < len(map[row]) and map[row][col+1] >= height:
            peak = False

        if peak: # if taller than adjacent squares
            peaks.append((row, col)) # add coordinates to peak list

使用第一个代码中生成的地图,我们可以看到以下结果。

peaks = [
    (0, 0),
    (4, 0),
    (1, 2),
    (3, 0),
    ]