简体   繁体   English

Python 流控突破混乱

[英]Python flow control break out confusion

I am trying to understand a complicated flow control that I cannot get to work so have simplified it and don't understand its workings either.我正在尝试理解一个我无法开始工作的复杂流程控制,因此对其进行了简化并且也不了解它的工作原理。

The simplified flow control is:简化的流量控制是:

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') 

The output is: output 是:

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

What I thought would happen (but does not) is once the j iteration reaches the test condition the while loop will stop and the flow control will skip onto the last line of the script and print 'END OF SMURFGATE'.我认为会发生(但没有发生)的是,一旦 j 迭代达到测试条件,while 循环将停止,流控制将跳到脚本的最后一行并打印“END OF SMURFGATE”。

Desired output:所需的 output:

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

You're missing one additional break for the for-loop, now you're only breaking the while loop.您错过了 for 循环的一个额外中断,现在您只是中断了 while 循环。 Try this:尝试这个:

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') 

Output: Output:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM