Вход | Регистрация

Първа задача

  • При мен съвсем очаквано възникнаха някои въпроси ,докато си пишех доманшното.Първият ми въпрос е мога ли да итерирам по списък от проиволно място и може как?

    16.03.2010 (променeно 16.03.2010)
  • Thumbs_up

    Благодаря за изчерпателния отговор.

    Първият ми въпрос е мога ли да итерирам по списък от проиволно място и може как?

    >>> 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)
  • Thumbs_up

    Ако имаме функция 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)
  • Thumbs_up

    И аз се зачудих на този пример, но предвид примерите, стигнах до заключението, че ако няма 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