Python "Если максимальное количество шагов превышено, разорвать цикл"

Я работаю над (очень замысловатым и неэлегатным) кодом Python, чтобы 3-х цветным графиком грубой силой, и в свой основной блок кода я пытаюсь включить утверждение, которое говорит: "Если максимальное количество прогонов через цикл превышает (какое-то произвольное число) пробой первого (while a in range(0,len(vertices))) петля ".

a = 0
steps = 0   
while a in range(0,len(vertices)):
    for j in newdict:
        steps+=1      #count number of times it goes through the loop
        print(steps)
        if a>=len(vertices) or steps>=100000:
            break     #this is where my error is occurring

        i = vertices[a]
        if dict1[i[0]]==dict1[i[1]] and (list(dict1.values()))!=j:   #if the adjacent vertices are the same color and we have not cycled back to our original dict1,
            dict1[i[1]]=colors[dict1[i[1]]+1]   #change color of the second vertex
            a = 0    #after a vertex is changed colors, I don't want it to keep going: I want the code to stop and reexamine from the top with this new value
            newdict.append(list(dict1.values()))   #running list of all previous dictionaries (attempted colorings): if our dictionary ever cycles through to something it already was, try again
            check = all(dict1[i[0]] != dict1[i[1]] for i in vertices)  # check all adjacent vertices are different colors
            if not check:
                continue
            elif check:
                break  #at any point throughout the code, if the graph is colorable, break the loop and jump to end instead of continuing to color
        elif dict1[i[0]]==dict1[i[1]]:  #if we do eventally cycle back to our original dict1, now we'll try changing the first vertex color
            dict1[i[0]] = colors[dict1[i[0]] + 1]
            a = 0
            newdict.append(list(dict1.values()))
            check = all(dict1[i[0]] != dict1[i[1]] for i in vertices)  # check all adjacent vertices are different colors
            if not check:
                continue
            elif check:
                break  #at any point throughout the code, if the graph is colorable, break the loop and jump to end instead of continuing to color
        else:
            a+=1

Тем не менее, я обнаружил, что даже когда проходит более 100000 шагов (что я вижу по мере того, как я печатаю количество шагов), цикл не прерывается и становится бесконечным циклом, а количество шагов продолжается после 100000. Я включаю еще один цикл,

while steps < 100000:

вместо того, чтобы просто добавить еще одно условие в мой первый цикл? Я делаю синтаксическую ошибку или это более глубокая проблема с моим кодом?

(Полный код доступен здесь.)

2 ответа

Решение

У вас есть две петли

while a in range(0,len(vertices)): # Loop 1
    for j in newdict: # Loop 2
        steps+=1      #count number of times it goes through the loop
        print(steps)
        if a>=len(vertices) or steps>=100000:
            break     #this is where my error is occurring

так что когда ты breakразорвать внутренний цикл, который for j in newdict: Вы должны добавить еще одно условие break петля while

Добавьте еще одно условие в оператор while, а затем установите это условие непосредственно перед прерыванием.

max = False
while a in range(0,len(vertices)) and not max:
...
    for j in newdict:
        ...
        if a>=len(vertices) or steps>=100000:
            max = True
            break     #this is where my error is occurring
Другие вопросы по тегам