Почему это l oop останавливается после первой итерации? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть:

q=4

j=1
final_list_of_lists_to_be_zipped_with_a=[[7], [], [], [0, 2, 4, 6, 8, 10, 12, 14]] 


f=q-2
while f>0:

    for e in range(int(2**(j-1)),2**q-j,2**(q-f)):                 
        if e%2!=0:
             final_list_of_lists_to_be_zipped_with_a[f].append(e)

    j+=2**(j-1)
    f-=1


print(final_list_of_lists_to_be_zipped_with_a)

Результат, который я ожидаю получить:

[[7], [3,11], [1, 5, 9, 13], [0, 2, 4, 6, 8, 10, 12, 14]] 

Вместо этого я получаю:

[[7], [], [1, 5, 9, 13], [0, 2, 4, 6, 8, 10, 12, 14]] 

Почему это происходит? Я думаю, что есть явная ошибка semanti c, но я не могу ее обнаружить

1 Ответ

0 голосов
/ 03 апреля 2020

Когда f = 1, то e = 2 и e = 10 для 2 итераций for -l oop. Таким образом, e % 2 != 0 равно False для каждой итерации, в конечном итоге ничего не добавляется к final_list_of_lists_to_be_zipped_with_a, когда f = 1.

Хорошая стратегия отладки состоит в том, чтобы go шаг за шагом выполнять код, предпочтительно используя отладчик для просмотра значений переменных на каждом шаге.

...