Как передать функции 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 шт):
Как вы написали в вопросе 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