Как я могу создать список из аргументов, приведенных в функции? - PullRequest
0 голосов
/ 20 сентября 2018

Я новичок в Python3 и пытаюсь выяснить, как я могу решить это упражнение:

Определить функцию с именем myfunc, которая принимает произвольное количество аргументов и возвращает список, содержащий толькоте аргументы, которые являются четными.

Я пробовал это:

def myfunc(*args):
    a= list(args)
    for num in a:
            if num%2==0:
                return num

При попытке вызвать myfunc(1,2,3,4,5,6) требуется только первое четное число: 2. Почему это происходит?

Как создать список, который возвращает только четные числа?

Ответы [ 4 ]

0 голосов
/ 30 мая 2019

Я работал над тем же вопросом и столкнулся с другой проблемой: Максимальная глубина рекурсии.

lst = []

def myfunc(*args):
    for num in myfunc():
        if args % 2 == 0:
        return lst.append(args)

Я почти исправил это, превратив аргументы в список, присвоив ему переменную (как вы это сделали), но забыл вернуть добавленный список после добавления его (что я все еще запутался, почему 'return lst.append (num) не работал):

lst = []

def myfunc(*args):
    e = list(args)
    for num in e:
        if num % 2 == 0:
            return lst.append(num)

Наконец: мой исправленный, работающий код:

lst = []

def myfunc(*args):
    e = list(args)
    for num in e:
        if num % 2 == 0:
            lst.append(num)
return lst
0 голосов
/ 20 сентября 2018

Проблема в том, что вы возвращаетесь после нахождения первого значения, поэтому оно вернет только первое значение.Вы можете попробовать что-то вроде этого:

def myfunc(*args):
    return [num for num in args if num % 2 == 0]


print(myfunc(1, 2, 3, 4, 5, 6))

Вывод

[2, 4, 6]

Вышеупомянутый метод использует понимание списка .Эквивалентное решение, хотя и менее питоническое, следующее:

def myfunc(*args):
    result = []
    for num in args:
        if num % 2 == 0:
            result.append(num)
    return result
0 голосов
/ 20 сентября 2018

Проблема в том, что когда ваша функция выполняет return, вот и все, что вы хотите сделать, это добавить все эти значения в список и вернуть весь этот список

def myfunc(*args):
    a= list(args)
    b = []
    for num in a:
        if num%2==0:
            b.append(num)
    return b    

b = myfunc(1, 2, 3, 4, 5, 6)
print(b)
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 helping.py 
[2, 4, 6]

Заглядывая вперед, просто для того, чтобы показать вам, что вы можете вырезать некоторую массу отсюда, обратите внимание, что 2 % 2 = 0 правильно, поэтому мы можем сказать if not 2%, поскольку not 0 оценивается как True и соответствует нашим условиям таким образом

def myfunc(*args):
    lista = []
    for i in list(args):
        if not i % 2:
            lista.append(i)
    return lista

lista = myfunc(1, 2, 3, 4, 5, 6)
print(lista)

И как только вы действительно влюбитесь <3 </p>

def myfunc(*args):
    return [i for i in list(args) if not i % 2]
0 голосов
/ 20 сентября 2018

args - это обычная итерация.Так что

return [value for value in args if value%2==0]

При вашем текущем коде вы не получите весь список, потому что вы вызываете return, когда найдете первое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...