Форум сайта python.su
Народ, выручайте, учусь в институте, задали задачку: На основе этого списка из всего двух элементов (head и tail) надо создать такой же только из неограниченного количества… Логично предположить что столько elif писать просто глупо… Нам дали подсказку, что для обработки списка нужна рекурсия… Короч я всю голову сломал. Мож кто поможет реализовать???
def create_pair(h,t):
def dispetch(command):
if command == "head":
return h
elif command == "tail":
return t
else :
print "Error, unknewn command"
return none
return dispetch
Отредактировано (Окт. 22, 2009 16:16:33)
Офлайн
Не совсем понятна задача, можно конкретный пример? И откуда берется переменная dispatch, с отступами не напутал?
п.с. про опечатки уже молчу )
Отредактировано (Окт. 22, 2009 16:06:35)
Офлайн
dispetch это функция… Получается что у меня функция возвращает функцию…
Грубо говоря если я напишу
a= create_pair(2,3)
print a("head") # выдаст 2
print a("tail") #выдаст 3
elif command=="middle":
return m
elif command =="forvard":
return f
Офлайн
Значит я правильно понял. Интуитивно исправив твои опечатки, у меня получилось вот что:
def create_dict(**args):
def dispatch(command):
for cmd, item in args.iteritems():
if command == cmd:
return item
else:
print "Error, unknown command"
return None
return dispatch
dis = create_dict(head="h", body=[], tail=123)
print dis("tail")
Отредактировано (Окт. 22, 2009 16:18:29)
Офлайн
Дело в том что for мы еще не проходили и надо реализовать без него…..
Видимо не зря я голову ломаю :-(
Офлайн
тогда вот так )
def create_dict(**args):
def dispatch(command):
if args.has_key(command):
return args[command]
else:
print "Error, unknown command"
return None
return dispatch
Офлайн
Форматирование у вас поплыло и опечатки, видимо выглядеть должно было так:
def create_pair(h,t):
def dispatch(command):
if command == "head":
return h
elif command == "tail":
return t
else:
print "Error, unknown command"
return none
return dispatch
l = create_pair(1, create_pair(2, create_pair(3, 4)))
Офлайн
Хм… А поподробней можно что означает
if args.has_key(command):
return args[command]
Офлайн
PooHО, спасибо огромное, не знаю, хотел препод этого или нет, но теперь принцип мне понятен ))))
l = create_pair(1, create_pair(2, create_pair(3, 4)))
Офлайн
Видно все таки зря в MIT перешли со scheme на python ;)
Если ваша цель не просто спихнуть лабы, а изучить основы программирования, настоятельно рекомендую вот эту книжку http://newstar.rinet.ru/~goga/sicp/sicp.pdf и вот эту среду для выполнения упражнений http://download.plt-scheme.org/
Офлайн