Условие для проверки, находится ли массив вне другого массива

Вопрос или проблема

В настоящее время я занимаюсь задачей кода ссылка, и моё решение состоит в проверке, содержит ли массив другой массив. Однако оператор if не работает, или что-то ещё мешает моему коду.

string = " *очень длинная строка, я её удалил* "
# пример строки = "v>"
location = [0,0]
been_to = [[0,0]]
string = list(string)

for i in string:
    if i == "v":
        #вниз
        location[1] -= 1
    elif i == "^":
        #вверх
        location[1] += 1
    elif i == ">":
        #вправо
        location[0] -= 1
    elif i == "<":
        #влево
        location[0] += 1
    if location not in been_to:
        been_to.append(location)
    #print(location)
print(been_to)

Я пытался поменять местами переменные, переместить оператор not или == false и вообще пробовал всё, что приходит в голову. У меня до сих пор нет понятия, что делать.

Ответ или решение

Конечно! Давайте рассмотрим вашу задачу и найдем решение проблемы с проверкой, входит ли позиция в массив уже посетленных координат.

Ваш код имеет несколько ошибок в синтаксисе и логике, которые влияют на корректность работы программы. Основная проблема заключается в следующей строке:

if location in been_to == False:
  1. В этом выражении if location in been_to == False: используется некорректная логика проверки. Таким образом, сначала будет выполнено сравнение been_to == False, которое всегда возвращает False, поскольку been_to является списком.

  2. Вместо этого вам нужно сначала проверить, находится ли location в списке been_to, а затем, если нет, добавлять его. Мы можем использовать оператор not для проверки, что элемент не содержится в массиве.

Вот исправленный код:

string = " *длинная строка, я удалил ее* "
# пример строки = "v&gt;"
location = [0, 0]
been_to = [[0, 0]]
string = list(string)

for i in string:
    if i == "v":
        # вниз
        location[1] -= 1
    elif i == "^":
        # вверх
        location[1] += 1
    elif i == "&gt;":
        # вправо
        location[0] += 1  # здесь исправлен оператор
    elif i == "&lt;":
        # влево
        location[0] -= 1  # здесь исправлен оператор
    # Проверка, если местоположение не в been_to
    if location not in been_to:
        been_to.append(location.copy())  # Используем copy, чтобы сохранить текущее состояние location
    # print(location)

print(been_to)

Обратите внимание на несколько ключевых моментов:

  • Я исправил часть с перемещениями влево и вправо. Ваши условия для этих направлений были перепутаны.
  • В логике проверки на присутствие: используйте if location not in been_to: вместо if location in been_to == False:.
  • Чтобы избежать изменений в уже добавленных координатах в списке been_to, лучше использовать location.copy() при добавлении, чтобы сохранить текущее состояние location, а не ссылку на него.

Этот код теперь должен правильно проверять, были ли координаты уже посещены, и добавлять их в список, если это не так. Удачи с вашим проектом!

Оцените материал
Добавить комментарий

Капча загружается...