Как вернуть позиционные аргументы с нечетными индексами?

Рейтинг: 0Ответов: 1Опубликовано: 30.03.2023

Напишите функцию, которая принимает на вход неограниченное количество позиционных и именованных аргументов, в качестве результата функция должна возвращать только позиционные аргументы с нечетными индексами и именнованные, значения которых являются строками. Проверить на примере:

func_7(1, 2, 3, 4, 5, 6, 7, 8, a = 'Hello', b = ',', c = 'word', d = '!', f = 4)
def function1(*arg, **args):
    arg1 = []
    arg2 = []
    for i in range(arg):
        if i%2 != 0:
            arg1.append(i)
    for j in args:
        if type(args[j] != int):
            arg2.append(args[j])
    print(arg2)


function1(1, 2, 3, 4, 5, 6, 7, 8, a = 'Hello', b = ',', c = 'word', d = '!', f = 4)

Ответы

▲ 1Принят

Позиционные аргументы принято называть args, а именованные kwargs.

В вашем решении проблема в двух строках:

for i in range(arg):

необходимо передавать в range длину списка:

for i in range(len(arg)):

и необходимо вынести проверку на число из скобок:

if type(args[j]) != int:

Я бы решил вот так:

def function1(*args, **kwargs):
    pos = [num for i, num in enumerate(args) if i % 2 == 0]
    kw = [elem for elem in kwargs.values() if isinstance(elem, str)]
    return pos + kw

print(function1(1, 2, 3, 4, 5, 6, 7, 8, a = 'Hello', b = ',', c = 'word', d = '!', f = 4))

Вывод:

[1, 3, 5, 7, 'Hello', ',', 'word', '!']