我有一個遊戲載列如下網格:添加隨機整數網格的外層細胞在python
grid = [(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0)]
我需要通過電網的外細胞循環,隨機把他們變成要麼「1」或「0」。
有沒有辦法快速做到這一點,同時保持改變網格的大小,仍然執行相同的事情的能力?
在此先感謝!
我有一個遊戲載列如下網格:添加隨機整數網格的外層細胞在python
grid = [(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0)]
我需要通過電網的外細胞循環,隨機把他們變成要麼「1」或「0」。
有沒有辦法快速做到這一點,同時保持改變網格的大小,仍然執行相同的事情的能力?
在此先感謝!
你可以使用numpy,你根本不需要迭代。
import numpy as np
grid = np.array([(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0),
(0,0,0,0,0,0,0)])
grid[[0,-1]] = np.random.randint(2,size=(2,grid.shape[1]))
grid[:,[0,-1]] = np.random.randint(2,size=(grid.shape[0],2))
如果你代表你的網格,列表的列表(而不是tupples的列表),那麼它的遍歷外層細胞和設定的問題:
grid[x][y] = random.randint(0, 1)
...考慮通過「隨機打開它們」,你的意思是「以50%的概率改變它們」。
首先,你應該使用列表而不是元組,元組是不可變的,不能改變。
創建網格與列表
grid = [[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0]]
這應該做的伎倆名單,雖然蟒蛇-大師之一可能有一種更簡單的解決方案。
第一版
#go through all the lines
for index, line in enumerate(grid):
#is the line the first or the last one
if index == 0 or index == len(grid)-1:
#randomize all entries
for i in range(0, len(line)):
line[i] = randint(0, 1)
#the line is one in the middle
else:
#randomize the first and the last
line[0] = randint(0, 1)
line[-1] = randint(0, 1)
周圍玩弄再過了些,我可以用一個列表理解代替嵌套爲使代碼更易讀
第二版
for index, line in enumerate(grid):
if index == 0 or index == len(grid)-1:
grid[index] = [randint(0, 1)for x in line]
else:
line[0] = randint(0, 1)
line[-1] = randint(0, 1)
如果有人指出一個更容易/更可讀的方式來做我我會很高興。
你應該使用數組通過numpy的模塊,以提高性能如下:
import numpy as np
from random import randint
def random_grid():
while True:
grid = np.array([randint(0, 1) for _ in range(35)]).reshape(5,7)
yield grid
gen_grids = random_grid()
print gen_grids.next()
延長一月的回答
from random import randint
grid = [[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0]]
for x, j in enumerate(grid):
for y, i in enumerate(j):
grid[x][y] = randint(0,1)
print(grid)
這是一個簡單的解決方案獨立於無論是大小,但如果表現至關重要的,然後去努力。
如果這是一個遊戲的網格,你可能應該使用列表列表而不是元組列表,因爲元組是不可變的。 Personnaly,但我可能會定義我自己的類代表董事會。 – DainDwarf
遵循上面的註釋,'不可變'意味着Tuple(由圓括號表示)不能改變。要改變外部細胞,你需要一些可變的東西(就像建議的列表一樣)。 – ATLUS