Список «stop» должен содержать координаты x и y, заданные функцией, когда длина строки «stringa» равна первому значению x, заданному списку (в данном случае 1023). Список (ы) не должны изменяться более одного раза, это сделано благодаря списку bool_stop, который отслеживает изменения, внесенные в список (ы), таким образом, до того, как значения х и у в списке будут ещё раз (в while l oop внутри функции "failapiega") if Statemet проверит, был ли список изменен, и заблокирует действие, если так. Вот почему я не понимаю, почему список постоянно меняет значения. Я полагаю, что что-то не так, пока l oop в функции, но я не могу определить, что.
x = 1
iterations = 10
stringa = "AB"
tot = 2 ** (iterations + 2)
In = tot / 4
stop = [[1, -1], [In - 1, None], [2 * In - 1, None], [3 * In - 1, None], [tot - 1, None]]
# stop[1] --> [1023.0, None] #
bool_stop = [True] * 4
def failapiega(stringa, stop, bool_stop):
l = len(stringa)
i = l - 1
while i >= 0:
p = stringa[i]
if p == "A":
stringa += "B"
stop[0][0] += 1
elif p == "B":
stringa += "C"
stop[0][1] += 1
elif p == "C":
stringa += "D"
stop[0][0] -= 1
elif p == "D":
stringa += "A"
stop[0][1] -= 1
if bool_stop[0]:
if stop[1][0] == len(stringa) - 1:
bool_stop[0] = False
stop[1] = stop[0]
i -= 1
return stringa, stop, bool_stop
while 0 <= iterations:
stringa, stop, bool_stop = failapiega(stringa, stop, bool_stop)
iterations -= 1
Отладка Я обнаружил, что
if stop[1][0] == len(stringa) - 1:
bool_stop[0] = False
stop[1] = stop[0]
эта часть выполняется только один раз, несмотря на эту остановку [1] постоянно меняется каждый раз.