АндрейК
Подскажите, пожалуйста, ответ на вопрос (судя по всему простой), но который я не могу решить долгое время.
Пишу функцию, данные для которой должны являться листом. Вернуть должна количество элементов в листе.
>>> def andrey (symbols):
print (len(symbols))
>>> andrey('aaa')
3
вернул длину первого элемента, а не количество элементов
Нет, не так. Вы подали в качестве аргумента строку, состояющую из трех элементов ‘a’,'a','a'
Так что Питон здесь прав, так как функция len() определяет длину строки или кол-во элементов в списке(умеет и то, и то т.е.)
Сравните результаты работы функции для разных входных условий.
s=
s1='12345'
s2=
def andrey (symbols):
print (len(symbols))
andrey(s)
andrey(s1)
andrey(s2)
>>> andrey('aaa','aaaaa')
Traceback (most recent call last):
File “<pyshell#5>”, line 1, in <module>
andrey('aaa','aaaaa')
TypeError: andrey() takes exactly 1 positional argument (2 given)
здесь вообще отказывается понимать
там же написано: функция получила два аргумента вместо одного.
А в определении функции фигурирует только один входной параметр.
s= решает вашу проблему
Т.е. хотелось бы получить результат в первом случае 1, во втором 2.
Причем если писать непосредственно так:
>>> andrey=('aaa','aaaaa')
>>> len(andrey)
2
>>>
то все работает, правда для двух и более элементов, а для одного продолжает возвращать его длину, а не количество.
>>> andrey=('aaa')
>>> len(andrey)
3
>>>
этот тип данных называется tuple, это не список. Они отличаются друг от друга тем, что таплы не изменяются.
т.е. если напишите так:
>>> print s
(1, 2)
>>> s=2
то вывалится ошибка:
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
TypeError: ‘tuple’ object does not support item assignment
питон не делает разницы между переменной, содержащей символы и таплом (русское название - кортеж данных), содержащим один строковый элемент.
смотрите сами:
>>> s1=('adad')
>>> s2='adad'
>>> s1==s2
True