Исключая возможные местоположения изображения - PullRequest
0 голосов
/ 16 апреля 2019

Мне нужно разместить изображения так, чтобы они не были друг на друге.Я смотрю на матрицу 3х3, поэтому 9 мест.Изображение горизонтальное и занимает 2 места.Я пробовал таким образом (отредактировано):

other_position = [e for e in range(9)]

def find_horizontal_position(avaiable_pos):
    myList = avaiable_pos
    print(avaiable_pos)
    try:
        possible_position = [0,1,3,4,6,7] # positions where image is not cut in half
        position = random.choice(possible_position)
        myList.remove(position)
        myList.remove(position + 1)
    except ValueError:
        return find_horizontal_position(avaiable_pos)
    return myList, position

for _ in range(2):
    other_position, position = find_horizontal_position(other_position)
    print(position)

Иногда он генерирует вывод следующим образом:

1
[0, 3, 4, 5, 6, 7, 8]
[0, 3, 4, 5, 6, 7, 8]
[0, 3, 4, 5, 6, 7, 8]
[0, 3, 4, 5, 6, 7, 8]
[3, 4, 5, 6, 7, 8]
4
[3, 6, 7, 8]

Первое изображение размещается в позиции 1, поэтому 1 и 2 убираются.Второе изображение находится в позиции 4, но, кстати, оно убирает 0 ... Может быть, есть лучший способ сделать это?

1 Ответ

1 голос
/ 16 апреля 2019

В ваше предложение "кроме" включите оператор возврата:

return   find_horizontal_position(avaiable_pos)

, в противном случае произойдет следующее: даже если позиция, в которой вы пытались разместить изображение, недействительна, вы все равно будете выполнять оператор возврата

return myList, position

, который в вашем примере имеет position==0.Обратите внимание, что ваш подход может не найти правильное решение, даже если оно существует, я бы предложил цикл по всем парам

(img1leftposition, imp2leftposition), img1leftposition != imp2leftposition

, где img1leftposition и img2leftposition находятся в possible_position (множество способов сделать это, простойиспользуя

for pair in zip(possible_position, possible_position):
    ...
...