путаница с python вложенным управлением потоком - PullRequest
0 голосов
/ 07 мая 2020

У меня проблема с управлением потоком, я получил несколько хороших советов ранее по вопросу, и теперь мне нужно сделать мою упрощенную версию ближе к реальной проблеме.

У меня есть время l oop на основе значение счета. Когда мой внутренний l oop работает, счетчик увеличивается, но я хотел бы выйти из всех циклов, кроме самого внешнего l oop, если счет превышает целевое значение 50.

code:

smurf = True
print('smurf status: ', smurf)
jackets = list(range(5))
print(jackets)
gloves = [7,8,9]

for g in gloves:
    print('The glove is :',g)
    smurf = True
    whitesocks = True
    count = 10
    while count <= 50:
        for j in jackets:
            print('\tjacket = ', j, '\n')

            while smurf is True:
                print('count =', count)
                print('\t\twhile true jacket is :', j)
                if j == jackets[-3]:
                    smurf = False
                    print('\t\tsmurf is FALSIOOOO SO BREAK')
                    break #to escape the while loop
                print('\t\tsmurf with jacket ',j, ' be ok')
                j += 1
                count += 33
            print('doo dah')
            break # To escape the for-loop

        break # i think this is to escape while count
    print('After the jacket loop')
    #break
print('END OF SMURFGATE') 

текущие результаты:

smurf status:  True
[0, 1, 2, 3, 4]
The glove is : 7
        jacket =  0 

count = 10
                while true jacket is : 0
                smurf with jacket  0  be ok
count = 43
                while true jacket is : 1
                smurf with jacket  1  be ok
count = 76
                while true jacket is : 2
                smurf is FALSIOOOO SO BREAK
doo dah
After the jacket loop
The glove is : 8
        jacket =  0 

count = 10
                while true jacket is : 0
                smurf with jacket  0  be ok
count = 43
                while true jacket is : 1
                smurf with jacket  1  be ok
count = 76
                while true jacket is : 2
                smurf is FALSIOOOO SO BREAK
doo dah
After the jacket loop
The glove is : 9
        jacket =  0 

count = 10
                while true jacket is : 0
                smurf with jacket  0  be ok
count = 43
                while true jacket is : 1
                smurf with jacket  1  be ok
count = 76
                while true jacket is : 2
                smurf is FALSIOOOO SO BREAK
doo dah
After the jacket loop
END OF SMURFGATE

желаемые результаты: если счетчик <= 50, то я хотел бы, чтобы петли выходили на крайний l oop и устанавливали перчатку l oop к следующему значению в списке и продолжайте. </p>

Код изменен для добавления флагов:

smurf = True
print('smurf status: ', smurf)
jackets = list(range(5))
print(jackets)
gloves = [7,8,9]

flag = 0
for g in gloves:

    print('The glove is :',g)
    smurf = True
    whitesocks = True
    count = 10
    while count <= 50:
        for j in jackets:
            print('\tjacket = ', j, '\n')

            while smurf is True:
                print('count =', count)
                print('\t\twhile true jacket is :', j)
                if j == jackets[-3]:
                    smurf = False
                    print('\t\tsmurf is FALSIOOOO SO BREAK')
                    if flag == 1:
                        break
                    break #to escape the while loop
                print('\t\tsmurf with jacket ',j, ' be ok')
                j += 1
                count += 33
                if count >= 50:
                    flag = 1
            print('doo dah')
            if flag == 1:
                break
            break # To escape the for-loop
        if flag ==1:
            break
        break # i think this is to escape while count
    print('After the jacket loop')
    #break
print('END OF SMURFGATE') 

результаты с флагами, которые я потерял:

smurf status:  True
[0, 1, 2, 3, 4]
The glove is : 7
        jacket =  0 

count = 10
                while true jacket is : 0
                smurf with jacket  0  be ok
count = 43
                while true jacket is : 1
                smurf with jacket  1  be ok
count = 76
                while true jacket is : 2
                smurf is FALSIOOOO SO BREAK
doo dah
After the jacket loop
The glove is : 8
        jacket =  0 

count = 10
                while true jacket is : 0
                smurf with jacket  0  be ok
count = 43
                while true jacket is : 1
                smurf with jacket  1  be ok
count = 76
                while true jacket is : 2
                smurf is FALSIOOOO SO BREAK
doo dah
After the jacket loop
The glove is : 9
        jacket =  0 

count = 10
                while true jacket is : 0
                smurf with jacket  0  be ok
count = 43
                while true jacket is : 1
                smurf with jacket  1  be ok
count = 76
                while true jacket is : 2
                smurf is FALSIOOOO SO BREAK
doo dah
After the jacket loop
END OF SMURFGATE

1 Ответ

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

Вы можете использовать flag = 0 в начале вашего самого внешнего l oop. Установите flag = 1, когда количество превышает 50. Теперь добавляйте if flag == 1 then break после каждого l oop, которое вы хотите разбить. Надеюсь, это поможет.

...