Как пройти полный цикл, используя функцию
Подскажите, пожалуйста, есть функция 'find_names', она выдает лишь 1 имя из строки 'str'.
str = 'names: "Ivan", "Petr", "Nikolai"'
names_list = ['Ivan', 'Petr']
list = []
def find_names(string):
for i in string.split():
for n in names_list:
if "names" in str:
if n in i:
list.append(n)
return list
find_names(str)
Eсли пишут тот же код, но без функции, получаю полный список имен.
str = 'names: "Ivan", "Petr", "Nikolai"'
names_list = ['Ivan', 'Petr']
list = []
for i in str.split():
for n in names_list:
if "names" in str:
if n in i:
list.append(n)
print(list)
Ответы (3 шт):
Автор решения: Vladislav Tikhomirov
→ Ссылка
Вам необходимо внутри функции return заменить на print, чтобы у вас произошёл вывод, а не возврат переменной с последующим завершением функции
str = 'names: "Ivan", "Petr", "Nikolai"'
names_list = ['Ivan', 'Petr']
list = []
def find_names(string):
for i in str.split():
for n in names_list:
if "names" in str:
if n in i:
list.append(n)
print(list)
find_names(str)
Автор решения: Zhihar
→ Ссылка
Ну так вы после первого условия сразу делаете return и выходите из функции
def find_names(string):
for i in string.split():
for n in names_list:
if "names" in str:
if n in i:
list.append(n) # записываем в list первое значение
return list # и тут же выходим из цикла
Просто сделайте выход из функции не в цикле:
def find_names(string):
for i in string.split():
for n in names_list:
if "names" in str:
if n in i:
list.append(n)
return list
и все будет в порядке
Автор решения: CrazyElf
→ Ссылка
Кстати, при таком сценарии использовании функции можно и вообще без return и переменной-списка обойтись:
str_ = 'names: "Ivan", "Petr", "Nikolai"'
names_list = ['Ivan', 'Petr']
def find_names(string):
for i in string.split():
for n in names_list:
if "names" in str_:
if n in i:
yield n
print(list(find_names(str_)))