един въпрос по последната задачка (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 -
Винаги ще ви даваме коректен вход.
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)