Вы помещаете последнее входное слово в userlist
, и легко получить доступ к userlist
содержимому из основного цикла, потому что 100 userlist
инициализируется в главном ②, когда функция ищет список, к которому добавляется пользователь. вход находит userlist
во внешней области видимости, а 100 userlist
является изменяемым объектом, изменения которого видны из каждой точки области видимости.
userlist = []
def ask():
new = input('...')
userlist.append(new)
if new == 'exit' : return
print('List contains', ', '.join(s for s in userlist))
while userlist[-1:] != ['exit']:
ask()
(мы пишем тест следующим образом: userlist[-1:] != ['exit']
, потому что при первом проходе userlist
пуст и его индексация, а не извлечение фрагмента вызовет ошибку).
Конечно, это ПЛОХАЯ ПРАКТИКА, потому что мы вводим сильную связь между основной и функцией, гораздо лучше явно передать список в списке аргументов:
userlist = []
def update_list(a_list):
new = input('...')
a_list.append(new)
if new == 'exit' : return
print('List contains', ', '.join(s for s in a_list))
while userlist[-1:] != ['exit']:
update_list(userlist)