Форум сайта python.su
Подскажите, пожалуйста, ответ на вопрос (судя по всему простой), но который я не могу решить долгое время.
Пишу функцию, данные для которой должны являться листом. Вернуть должна количество элементов в листе.
>>> def andrey (symbols):
print (len(symbols))
>>> andrey('aaa')
3
>>> 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)
>>> andrey=('aaa','aaaaa')
>>> len(andrey)
2
>>>
>>> andrey=('aaa')
>>> len(andrey)
3
Отредактировано (Окт. 10, 2010 07:23:08)
Офлайн
>>> def foo(x):
... print len(x)
...
>>> foo([1])
1
>>> foo(['123'])
1
>>> foo(['123','456'])
2
>>> foo( ('123',) )
1
>>> def foo(*x):
... print len(x)
...
>>> foo('123')
1
>>> foo('123','456')
2
Офлайн
АндрейКНет, не так. Вы подали в качестве аргумента строку, состояющую из трех элементов ‘a’,'a','a'
Подскажите, пожалуйста, ответ на вопрос (судя по всему простой), но который я не могу решить долгое время.
Пишу функцию, данные для которой должны являться листом. Вернуть должна количество элементов в листе.
>>> def andrey (symbols):
print (len(symbols))
>>> andrey('aaa')
3
вернул длину первого элемента, а не количество элементов
>>> 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)
здесь вообще отказывается понимать
Т.е. хотелось бы получить результат в первом случае 1, во втором 2.
Причем если писать непосредственно так:
>>> andrey=('aaa','aaaaa')
>>> len(andrey)
2
>>>
то все работает, правда для двух и более элементов, а для одного продолжает возвращать его длину, а не количество.
>>> andrey=('aaa')этот тип данных называется tuple, это не список. Они отличаются друг от друга тем, что таплы не изменяются.
>>> len(andrey)
3
>>>
Офлайн
> питон не делает разницы между переменной, содержащей символы и таплом
Бред какой.
>>> s1=('adad')
>>> type(s1)
<type 'str'>
>>> t1 = ('adad',)
>>> type(t1)
<type 'tuple'>
>>> 'foo' == ('foo',)
False
Офлайн
Не ну разницу он конечно делает между кортежем и строкой. Просто и тот и тот объект неизменяемый. А то что вы написали s1==s2, это он просто сравнил размерности объектов(True) взял элемент кортежа и сравнил со строкой(true) и сказал да объекты одинаковы. Но как только в кортеже окажется элементов больше 1 вы увидите следующее:
>>> s=('aaa','aaa')
>>> s1='aaa'
>>> s==s1
False
Отредактировано (Окт. 10, 2010 11:29:43)
Офлайн
Спасибо, guranvir, теперь буду знать.
Офлайн
Спасибо, даже не ожидал, что мне так подробно ответят и все разъяснят. Спасибо, ребята!
Офлайн