Как передать функции n-е число значений строкой , а не кортежом строк?)

Помогите решить задачу , аргумент num_jek должен принимать одно строковое значение а аргумент my_num n-ное количество строковых значений!!)

AttributeError: 'tuple' object has no attribute 'split'


def number(num_jek: str, *my_num: str):
    '''Функция принимает два строчных аргумента'''
    '''Один аргумент сравниваеться с другим аргументом'''
    '''Если есть совпадение то оно добовляеться в список'''


    num_list = num_jek.split(' ') # Аргументы с функции преобразуються в список
    num_my_list = my_num.split(' ') # Таким оброзом строка написаная через пробел становиться новым обьектом списка
    num_res = [] # Список свереных результатов

    for number in num_list: # Цикл фор сравнивает два аргумента если ,
        if number in num_my_list: # в num_jek есть значение с my_num то значение добовляеться в num_res.
            num_res.append(number)
    num_str = ','.join(num_res) # Список num_res преобразуеться в строку.
    return num_str


a = (number('1 2 3 4 5 6', '1 2 3 4 5 6', '1 2 3 4 5 6', '1 2 3 4 5 6', '1 2 3 4 5 6'))

print(a)

Ответы (1 шт):

Автор решения: Alex

Как вы написали в вопросе AttributeError: 'tuple' object has no attribute 'split' Означает то, что на tuple объект нельзя вызвать метод split, а переменное число параметров(аргументов) *my_num возвращает как раз tuple.

Теперь перейдём к заданию. как я понял вам нужно находить одинаковые значения в аргументах и выводить их в виде строки.

В вашем коде num_my_list = my_num.split(' ') список составлен неправильно, поэтому интерпретатор ругается)

Цикл, который делает у вас всю работу не проверял.

В своём коде я немного по-иному находил одинаковые значения. Так же я заменил название переменных на более короткие, чтоб легче было читать. как и у вас код с tupe hint'ами (num_jek: str, *my_num: str) . Активно использовал list comprehansion , что позволило уместить весь код во всего 10 строк чистого кода.

Наконец решение:

def get_equal(x: str, *y: str):

    l1 = x.split(' ')

    cur_list = [i.split(' ') for i in list(y)]
    l2 = []
    for lst in cur_list:
        l2 += lst

    #print('{}\n{}'.format(l1, l2)) # уберите знак комментария, чтобы вывести на консоль 2 списка.

    identic = [i for i in l1 for _ in l2 if i == _] # Назвал переменную _ так, потому что её имя не играет роли. 

    result = ', '.join(identic)

    return(result)

print(get_equal('11 2 378 44', '5 8 9 6 6 44', '55 77 6 1 4 8', '378 5 2 748'))

Вот вывод:

$ python stack.py
2, 378, 44
→ Ссылка