Во-первых, чтобы выяснить, почему цикл продолжается и дает второй выходной сигнал, break
может выйти только из его непосредственного значения l oop. Поскольку у вас есть вложенный l oop, break
только останавливает for y in table:
внутренний l oop, но позволяет for x in table
external l oop перейти к следующей итерации. Таким образом, в конечном итоге x
сможет впоследствии принять значение 3
, что даст вам два выхода, которые вы видите.
Итак, если вам нужен способ полностью остановить итерацию, когда решение найдено, вам нужно либо связать операторы break
в цепочку, используя синтаксис for else
(что, возможно, может будь жестким к прочтению) следующим образом:
for x in table:
for y in table:
if (x + y) == givenSum:
print(x, "and", y, "is equal to", givenSum)
break #breaks from inner loop
else: #for else syntax: this block runs if and only if there was no break encountered during looping.
continue #jumps the outer loop to next iteration
break #this break is set at outer loop's level. Essentially, we can only reach this portion if there is a break in the inner loop.
For else говорит: прогони всю итерацию и, если разрыв не найден, выполняет код в блоке else. По сути, «else» для «for else» походит на «for - no break».
Однако, более простой альтернативой является использование функции с return
(что также облегчает прочитайте код).
def find_given_sum(lst, givenSum):
table = {}
x = 0
y = 0
for i in range(0, len(lst)):
table[givenSum - lst[i]] = 1
i += 1
for x in table:
for y in table:
if (x + y) == givenSum:
print(x, "and", y, "is equal to", givenSum)
return #this returns immediately out of the function, thus stopping the iteration.
Кроме того, вы могли бы просто повторить условие прерывания, но повторение кода, как правило, не является хорошей практикой.
Надеюсь, это поможет решить, почему два выхода печатается. Теперь, что касается самого решения, на самом деле есть гораздо лучший способ решить это. Он основан на идее комплиментов, которые вы, кажется, чувствуете в своей таблице. Но это не требует итерации по самой таблице. Как подсказка: идеальное решение работает в O(n)
времени. Я не буду обсуждать идеальное решение, но надеюсь, что это побудит вас найти лучший подход.