остановка цикла for на python
def find_key(box):
for item in box:
print(item)
if item ==0:
continue
elif item =="key":
print("key finded")
break
else:
find_key(item)
box_with_boxes=[
[[["key"],[0],[0]],
[[0],[0],[0]],
[[0],[0],[0]]],
[[[0],[0],[0]],
[[0],[0],[0]],
[[0],[0],[0]]],
[[[0],[0],[0]],
[[0],[0],[0]],
[[0],[0],[0]]]
]
find_key(box_with_boxes)
Я пытаюсь убедиться, что после нахождения ключа цикл завершается полностью, я уже понял, что break - это не то, что мне нужно, я пробовал некоторые другие методы, но это не сработало. Я понимаю, как это сделать с помощью цикла while, но я хочу понять, как это работает с циклом for.
Ответы (3 шт):
Я нашел решение через глобальную переменную:
is_finded = False
def find_key(box):
global is_finded
for item in box:
if is_finded:
return
print(item)
if item == 0:
continue
elif item == "key":
print("key finded")
is_finded = True
return
else:
find_key(item)
box_with_boxes=[
[[["key"],[0],[0]],
[[0],[0],[0]],
[[0],[0],[0]]],
[[[0],[0],[0]],
[[0],[0],[0]],
[[0],[0],[0]]],
[[[0],[0],[0]],
[[0],[0],[0]],
[[0],[0],[0]]]
]
find_key(box_with_boxes)
Можно обойтись и без глобальных переменных с помощью обычного break, который нужно вынести в конец цикла, локальной переменной проверки статуса обрабоки (здесь check), на которую break и завязываем. Если особо не причесывать код с проверкой типов, то можно так сделать:
def find_key(box):
for item in box:
print(item)
if item == 0:
check = False
elif item == "key":
print("key finded")
check = True
else:
check = find_key(item)
if check:
break
return check
box_with_boxes = [
[[[0], [0], [0]],
[[0], [0], [0]],
[[0], [0], [0]]],
[[[0], [0], [0]],
[[0], ["key"], [0]],
[[0], [0], [0]]],
[[[0], [0], [0]],
[[0], [0], [0]],
[[0], [0], [0]]]
]
find_key(box_with_boxes)
Можно изменить функцию добавив boolean и затем обратится к ней через loop:
def find_key(box):
for item in box:
if item == 0:
continue
elif item == "key":
print("key found")
return True
else:
if find_key(item):
return True
return False
box_with_boxes=[
[[["key"],[0],[0]],
[[0],[0],[0]],
[[0],[0],[0]]],
[[[0],[0],[0]],
[[0],[0],[0]],
[[0],[0],[0]]],
[[[0],[0],[0]],
[[0],[0],[0]],
[[0],[0],[0]]]
]
for box in box_with_boxes:
if find_key(box):
break