Python управление потоком разорвать путаницу - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь понять сложное управление потоком, которое я не могу заставить работать, поэтому упростил его и тоже не понимаю его работы.

Упрощенное управление потоком:

smurf = True
print('smurf status: ', smurf)
jackets = list(range(5))
print(jackets)

for j in jackets:
    print('la la la la', j, '\n')
    while smurf is True:
        print('jacket is :', j)
        if j == jackets[-3]:
            smurf = False
            break
            print('smurf is FALSIOOOO')
        j += 1
        print('smurf with jacket ',j-1, ' be ok')
print('END OF SMURFGATE') 

Результат:

smurf status:  True
[0, 1, 2, 3, 4]
la la la la 0 

jacket is : 0
smurf with jacket  0  be ok
jacket is : 1
smurf with jacket  1  be ok
jacket is : 2
la la la la 1 

la la la la 2 

la la la la 3 

la la la la 4 

END OF SMURFGATE

Я думал, что произойдет (но не произошло), когда j-итерация достигнет тестового условия, while l oop остановится, и управление потоком перейдет к последняя строка скрипта и выведите «КОНЕЦ SMURFGATE».

Желаемый результат:

smurf status:  True
[0, 1, 2, 3, 4]
la la la la 0 

jacket is : 0
smurf with jacket  0  be ok
la la la la 1
jacket is : 1
smurf with jacket  1  be ok
la la la la 2
jacket is : 2


END OF SMURFGATE

1 Ответ

0 голосов
/ 07 мая 2020

Вам не хватает одного дополнительного перерыва для for-l oop, теперь вы нарушаете только while l oop. Попробуйте это:

smurf = True
print('smurf status: ', smurf)
jackets = list(range(5))
print(jackets)

for j in jackets:
    print('la la la la', j, '\n')
    while smurf is True:
        print('jacket is :', j)
        if j == jackets[-3]:
            smurf = False
            break
            print('smurf is FALSIOOOO')
        j += 1
        print('smurf with jacket ',j-1, ' be ok')
    break # To escape the for-loop
print('END OF SMURFGATE') 

Вывод:

smurf status:  True
[0, 1, 2, 3, 4]
la la la la 0 

jacket is : 0
smurf with jacket  0  be ok
jacket is : 1
smurf with jacket  1  be ok
jacket is : 2
END OF SMURFGATE
...