При мен съвсем очаквано възникнаха някои въпроси ,докато си пишех доманшното.Първият ми въпрос е мога ли да итерирам по списък от проиволно място и може как?
Първа задача
-
16.03.2010 (променeно 16.03.2010)
-
Благодаря за изчерпателния отговор.
Първият ми въпрос е мога ли да итерирам по списък от проиволно място и може как?
>>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a[2:8] [2, 3, 4, 5, 6, 7]
Като и двата индекса може да се изпускат, също така да бъдат отрицателни.
>>> a[2:] [2, 3, 4, 5, 6, 7, 8, 9] >>> a[:8] [0, 1, 2, 3, 4, 5, 6, 7] >>> a[:-3] [0, 1, 2, 3, 4, 5, 6] >>> a[-5:] [5, 6, 7, 8, 9] >>> a[-3:-1] [7, 8]
16.03.2010 -
Можеш, но нищо не ти гарантира, че ще получиш списък, а не генаратор или нещо в тоя дух.
Предполагам няма да стигаме до там с тестовете, но е добра идея да пробваш да го напишеш с една итерация (или половин, ако си говорим за one :) )
16.03.2010 -
Може да се ползва itertools, нали? A dict?
17.03.2010 (променeно 17.03.2010) -
Мислех да забраня модули, но честно казано, забравих.
Причината е, че ще ви е далеч по-полезно да си имплементирате нещата сами, вместо да ползвате модули.
17.03.2010 -
Може ли да очакваме вход от типа.
[[1,2,3], [1,0]]
Става въпрос за функцията one
17.03.2010 (променeно 17.03.2010) -
Имам проблем с тестването.Кода за тестване не ми се компилира.Какъв може да е проблема?Използвам Python 3.
17.03.2010 -
@Антон Това си е списък с два инстинни елемента.
@Филип И как точно го "компилираш"?
17.03.2010 -
@Стефан Причината да искам itertools е, че там има готов генератор за Декартово произведение.
Също предполагам, че не е проблем да се ползват речници, нали?
17.03.2010 -
ОК .Не го компилирам . Run Module -> Появява се съобщение "Syntax Error" .
17.03.2010 (променeно 17.03.2010) -
Исках да кажа интерпретира.
17.03.2010 -
Вярно, това на ред 20 не е читаво. Сигурно са имали предвид set([...]) вместо {...}.
Добавено: Момент, аз съм в грешка. Това е новия синтаксис в Python 3000... Наистина трябва да си сигурен, че ползваш него. Закоментирай проблемния тест и сложи това някъде:
import sys print(sys.version)
Трябва да изкара нещо от сорта на '3.1.1+ (r311:74480, Nov 2 2009, 14:49:22) \n[GCC 4.4.1]'
17.03.2010 (променeно 17.03.2010) -
@Марин: Ясно ми е защо искаш itertools. Разбира се, че е ОК да ползваш речници
@Антон: Каквото Николай каза (да, може да очакваш такъв вход, резултата трябва да е False, защото one приема две истини в тоя случай)
@Филип: Python версията ще да е. Или в p7 има синтактична грешка.
@Николай: Да бе, ще публикуваме тест, който не работи :)
18.03.2010 (променeно 18.03.2010) -
май тук има грешка inject(lambda x, y: x + y)([1, 2, 3, 4]) == 10. не трябва ли да е 11?
18.03.2010 (променeно 18.03.2010) -
Ако имаме функция
f` и списък `l
(l има 3 елемента):Предполагам, че си получил 11 по следния начин:
f(f(f(l[0], l[0]), l[1]), l[2])
Последното не е вярно. Ако няма initial - не искаме да вземате l[0] два пъти при акумулирането|сгъването|инжектирането.
Целта е да направите това:
Ако има initial, резултата трябва да e:
f(f(f(initial, l[0]), l[1]), l[2])
Ако няма initial:
f(f(l[0], l[1]), l[2])
18.03.2010 (променeно 19.03.2010) -
И аз се зачудих на този пример, но предвид примерите, стигнах до заключението, че ако няма init стойност функцията трябва да се приложи само към елементите на списъка: inject(lambda x, y: x + y)([1, 2, 3, 4], 0): 0(init) + 1(seq[0]) + 2 + 3 + 4 -> 10 но: inject(lambda x, y: x + y)([1, 2, 3, 4]): 1 + 2 + 3 + 4 -> 10
PS: упс, не видях, че е отговорено, надявам се е полезно.. и не мога да форматирам хубаво.. (blush)
19.03.2010 (променeно 19.03.2010) -
10xxxx помомгнаха ми отговорите :)
19.03.2010 -
Нещо интересно забелязах, докато си качвах решението. Сайтът отказа да го съхрани.
Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python3.0/io.py", line 1728, in read decoder.decode(self.buffer.read(), final=True)) File "/usr/local/lib/python3.0/encodings/ascii.py", line 26, in decode return codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 1519: ordinal not in range(128)
Причината е, че имах коментар на кирилица в кода.
19.03.2010 -
Искам само да питам относно четвърта функция: списъците, които приемаме като аргументи винаги ли са с еднаква дължина,помежду си, защото всички тестове са такива?
19.03.2010 -
memoize работи ли с функции с именовани аргументи?
20.03.2010 -
На 25-ти ред от p7-sample.py ми дава следната грешка "TypeError: 'function' object is not iterable".
Съдържанието на реда е следното:
memoized, tuples = memoize(fact)
Като сложа всичко това на два реда:
memoized = memoize(fact) tuples = memoize(fact)
всичко си работи перфектно.
В мен ли е проблема(т.е. да съм сбъркал типа, който трябва да върна) или в Python(т.е. не могат да се заявяват две функции една след друга на един ред).
20.03.2010 -
Чети условието.
memoize
връща 2 различни функции като двойка (tuple). Под "всичко си работи перфектно" едва ли имаш предвид, че ти минава теста (освен ако не си направил при първо извикванеmemoize
да връща една функция, а при второ - друга).20.03.2010 -
@Кирил Проблема е в теб. Не разбираш условието правилно. Изумен съм, че си подкарал това което работи при теб да работи въобще.
@Йолина Случайно е. Списъците могат да имат различна дължина. Могат дори да бъдат празни.
20.03.2010 -
Въпрос за tetha. Ако един от списъците е празен, то следва, че декартовото им произведение е празното множество нали? Въпрос за memoize. Трябва ли функцията която връщаме да поддържа kwargs или не, в смисъл ще ни вземете ли точки ако връщаме someFunction(*args) и не handle-ваме case-а, в който на функцията, която е подадена като аргумент на memoize са подадени kwargs?
20.03.2010 (променeно 20.03.2010) -
iskam da popitam dali v kraina smetka mojem da izpolzvame itertools ili ne
21.03.2010