Вопрос или проблема
В настоящее время я занимаюсь задачей кода ссылка, и моё решение состоит в проверке, содержит ли массив другой массив. Однако оператор 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:
-
В этом выражении
if location in been_to == False:
используется некорректная логика проверки. Таким образом, сначала будет выполнено сравнениеbeen_to == False
, которое всегда возвращаетFalse
, посколькуbeen_to
является списком. - Вместо этого вам нужно сначала проверить, находится ли
location
в спискеbeen_to
, а затем, если нет, добавлять его. Мы можем использовать операторnot
для проверки, что элемент не содержится в массиве.
Вот исправленный код:
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 # здесь исправлен оператор
# Проверка, если местоположение не в 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
, а не ссылку на него.
Этот код теперь должен правильно проверять, были ли координаты уже посещены, и добавлять их в список, если это не так. Удачи с вашим проектом!