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

Първа задача

  • един въпрос по последната задачка (memoize) - функциите които ще се подават на нашата функция колко неща ще връщат ?

    21.03.2010
  • @Атанас Не четем шльокавица, съжалявам.

    @Александър Това е дефиницията на декартово произведение, да :) . На твое място бих се опитал да поддържам kwargs, макар че от условието ни би трябвало да си личи дали ще проверяваме за това.

    @Филип Функциите в Python винаги връщат точно едно нещо. Било то списък или None

    21.03.2010 (променeно 21.03.2010)
  • @Стефан не беше нарочно написано с английски букви просто се зачудих дали форума поддържа кирилица или не и за да не рискувам иначе толкова бавно зареждащата страница(вероятно проблема е във провайдъра ми) да трябва да зарежда на ново. Та отново да задам върпоса си. В крайна сметка можем ли или не да използваме itertools?

    21.03.2010
  • @Атанас itertools може, глупави оправдания за шльокавица – не.

    21.03.2010
  • На функцията one да очакваме ли празен вход one(). В условието е посочен точно един аргумент, но съм длъжен да попитам :)

    21.03.2010
  • Thumbs_up

    Винаги ще ви даваме коректен вход.

    21.03.2010
  • Относно memoize -- как трябва да изглежда графиката на функцията, когато се използват именовани параметри?

    21.03.2010 (променeно 21.03.2010)
  • Ако под наименовани параметри всъщност имаш предвид **kwargs (първото е при извикване, второто -- при дефиниция) -- няма да проверяваме за тях. Така че както искаш, стига да е съвместимо с функциите без :)

    21.03.2010
  • Къде/кого да питам за разяснения на грешките ми?

    29.03.2010
  • Опитах се да оставя коментар на домашното ти, но се оказва, че функционалността е леко счупена. Ще гледаме да го оправим.

    Ако преди това искаш да видиш коментара в човешки вид - мога да го сложа тук.

    29.03.2010
  • Ако го оправите до няколко дена ще изтърпя, иначе може и тука :)

    29.03.2010
  • Не искам да обещавам, че скоро ще го оправим. Затова...

    • Функцията f  в memoize е трябвало да изглежда така:
    def f(*p):
      nonlocal d
      if p in d:
        return d[p]
      else:
        d[p] = fun(*p)
       #return fun(*p) - това е твоят код
        return d[p] # така би работило

    Трябва fun да се вика веднъж и аргументите да се кешират. Твоята функция вика fun два пъти и ние засичаме това. Затова теста гърми.

    • Другият проблем е injector в inject и проверката дали имаш аргумент.
    def injector(seq, init = None):
     #if not init: - това е твоят код
      if init == None: # така би работило
        return injector(seq[1:], seq[0])
      result = init
      for i in seq:
        result = fun(result, i)
      return result

    Проблема е, че None не е единствената стойност на init, което може да се оцени на False. Неща като празнa колекция и празен низ ще бъдат пропуснати. Замисли се какво ще се случи с този пример и твоя код:

    inject(lambda x, y: x and y) ([True, True], False) # False and True and True
    29.03.2010 (променeно 29.03.2010)
  • Благодаря за бързия отговор.

    Да, разбира се... доста, доста тъпо от моя страна :D

    29.03.2010 (променeно 29.03.2010)