это продолжение предыдущего вопроса stackoverflow здесь
Я хочу сделать это в двух измерениях.
Я попробовал следующее:
for i in range(pos):
steps=0 #the steps that the particle does until it falls in a trap
in_pos = sc.random.randint(0, len(grid), 2)
initial_trap=False
while initial_trap==False:
#the step of the particle can be one of this
step=sc.array(random.choice([[0, 1], [1, 0], [0, -1], [-1, 0]]))
# Check position for edges and fix if required
if in_pos + step > sc.size(grid) - 1:
in_pos = 0
elif in_pos + step < 0:
in_pos = sc.size(grid) - 1
else:
in_pos += step
# Check if it's a trap in order to stop the loop
if grid[in_pos] == 0:
initial_trap = True
# If it isn't a trap, continue
steps+=1
steps_count.append(steps)
return steps_count
Я тоже пробовал:
in_pos_x =int(sc.random.randint(0, len(grid), 1)) #initial position of particle in x axis
in_pos_y =int(sc.random.randint(0, len(grid), 1)) #initial position of particle in y axis
if in_pos_x + step > len(grid)- 1 and in_pos_y + step > len(grid)-1:
in_pos_x = 0
in_pos_y = 0
elif in_pos_x + step < 0 and in_pos_y + step < 0:
in_pos_x = len(grid)- 1
in_pos_y = len(grid)- 1
else: in_pos_x += step
in_pos_y += step
if grid[in_pos_x][in_pos_y] == 0:
initial_trap = True
И наконец, я пытался работать со списками, а не с массивами.
in_pos = (scipy.random.randint(0,len(grid),2)).tolist()
step=random.choice([[0, 1], [1, 0], [0, -1], [-1, 0]])
но безуспешно.
Я здесь потерян!
--------------- Сообщения об ошибках -----------------------------
Если запустить программу, она выдаст мне:
'Значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all () 'в строке "if (in_pos + step)> sc.size (grid) - 1:"
Если я использую if sc.any(in_pos + step) > sc.size(grid) - 1:
или if sc.any(grid[in_pos]) == 0:
, он запускается, но я использовал print(grid[in_pos])
, и я подумал, что он вообще не меняет значения! Он не получает значение «0», поэтому цикл никогда не заканчивается.