Почему происходит задвоение?
Функция menu(list_gosti) вызывает функцию list_zero(list_z), где происходит проверка на пустоту списка.
Если список пустой, то вызывается функция list_g(gos) (наполнение списка). В свою очередь list_g(gos) вызывает return menu(gos), и вот здесь после нажатия Enter повторно вызывается функция menu(list_gosti), хотя не должна.
Происходит задвоение меню после нажатия Enter, если в функции list_g прописать return menu(gos), а если прописать break то нет.
Это показано на скрине в консоли: сверху если return menu(gos), а снизу если break.
# Функция выбора дальнейших действий - меню
def menu(list_gosti):
list_zero(list_gosti)
num_menu = input('''\nЯкщо потрібно замінити гостя у запрошені натисніть 1
Якщо ж бажаєте дозапросити гостей натисніть 2
Для друку списку гостей введіть 3
Ваш вибір - ''').lower().strip()
if num_menu == '1':
print('в процесі розробки')
elif num_menu == '2':
print('в процесі ще більшої розобки')
elif num_menu == '3':
prin(menu, list_gosti)
else:
print('Як добре що всі будуть!!!')
# Функция проверки на пустой список
def list_zero(list_z):
if len(list_gosti) == 0:
print('Список запрошених гостей порожній, запросіть хоть одного гостя!!!')
list_g(list_gosti)
# Функция наполнения списка
def list_g(gos):
print('Що б завершити наповнення списку введіть exit')
while True:
z = input('Запрошений гість - ').strip()
if z == 'exit':
print('\nВи запросили всіх гостей!!!')
return menu(gos)# ЕСЛИ В ЭТОМ МЕСТЕ ЗАМЕНИТЬ НА 'BREAK' ,ЗАДВОЕНИЯ НЕ ПРОИСХОДИТ
gos.append(z.title())
if z == '':
gos.remove(z)
list_gosti = []
menu(list_gosti)
Ответы (1 шт):
В функции меню вы вызываете list_zero. Она выполняется и так как мы имеем парадигму Императивный, то после исполнения функции идет исполнение следующей строки. menu() вызывается дважды, следовательно и выполнится оно дважды, если не прервать выполнение, чего, собственно, вы и не делаете :)
# Функция выбора дальнейших действий - меню
def menu(list_gosti):
if len(list_gosti) == 0:
print('The list of invited guests is empty, invite at least one guest')
list_g(list_gosti)
return # IMPORTANT RETURN
num_menu = input('''\nIf you want to replace the guest in the invitation, press 1
If you want to invite guests, press 2
To print the guest list, enter 3
Your choice - ''').lower().strip()
if num_menu == '1':
raise NotImplementedError()
elif num_menu == '2':
raise NotImplementedError()
elif num_menu == '3':
print(list_gosti)
else:
print('How good that everyone will be')
# Функция проверки на пустой список [USELESS FUNCTION]
def list_zero(list_z):
if len(list_gosti) == 0:
print('The list of invited guests is empty, invite at least one guest')
list_g(list_gosti)
# Функция наполнения списка
def list_g(gos):
print('To complete the list, enter exit')
while True:
z = input('Invited guest -').strip()
if z == 'exit':
print('\nYou have invited all guests')
return menu(gos)# ЕСЛИ В ЭТОМ МЕСТЕ ЗАМЕНИТЬ НА 'BREAK' ,ЗАДВОЕНИЯ НЕ ПРОИСХОДИТ
gos.append(z.title())
if z == '':
gos.remove(z)
list_gosti = []
menu(list_gosti)
