Пишу адресную книгу. Представленная ниже функция должна изменять адрес и после этого завершать цикл while. Но почему оператор break не работает?
def change():
while True:
ch = input('\tВведите имя контакта чей адресс вы хотите изменить:\n')
if ch == '':
print('вы ничего не ввели')
for c, v in ab.items():
if c == ch:
new_address = input('Введите новый адресс:\n')
ab[c] = new_address
print('Адресс успешно изменен')
break
Ответы (5 шт):
Автор решения: CrazyElf
→ Ссылка
С помощью break можно прервать только самый внутренний цикл. Вам нужно поменять "вечный" цикл while на цикл по булевой переменной. Примерно так:
def change():
is_input_mode = True # <--
while is_input_mode: # <--
ch = input('\tВведите имя контакта чей адресс вы хотите изменить:\n')
if ch == '':
print('вы ничего не ввели')
for c, v in ab.items():
if c == ch:
new_address = input('Введите новый адресс:\n')
ab[c] = new_address
print('Адресс успешно изменен')
is_input_mode = False # <--
break
Автор решения: Andy Pavlov
→ Ссылка
Решил обновить свой вариант. Без break и т.п. Просто на if и повторном вызове функции.
def change():
ch = input('\tВведите имя контакта чей адрес вы хотите изменить:\n')
if ab.get(ch):
ab[ch] = input('Введите новый адрес:\n')
print('Адрес успешно изменен')
elif ch == 'exit':
print('Пока')
else:
change()
ab = {'Alex': '[email protected]'}
change()
Автор решения: GrAnd
→ Ссылка
Если ab - это словарь, то цикл for вообще тут лишний.
def change():
while True:
ch = input('\tВведите имя контакта чей адрес вы хотите изменить:\n')
if ch == '':
print('Вы ничего не ввели')
elif ch in ab:
new_address = input('Введите новый адрес:\n')
ab[ch] = new_address
print('Адрес успешно изменен')
break
else:
print('Имя контакта не найдено')
Автор решения: Kers
→ Ссылка
Можно просто прервать функцию return:
def change():
while True:
ch = input('\tВведите имя контакта чей адресс вы хотите изменить:\n')
if ch == '':
print('вы ничего не ввели')
for c, v in ab.items():
if c == ch:
new_address = input('Введите новый адресс:\n')
ab[c] = new_address
print('Адресс успешно изменен')
return
P.S. но вариант с управляющей переменной вместо True имхо более правильный (ответ CrazyElf).
Автор решения: Roge One
→ Ссылка
Команда break завершает цикл for, а не while. Для цикла while команда break не используется, поэтому рекомендую заменить её на команду return.Это прервет всю функцию.