Найти - Пользователи
Полная версия: Помогите с задачкой плиз...
Начало » Python для новичков » Помогите с задачкой плиз...
1 2
Tapo4e4ek
Народ, выручайте, учусь в институте, задали задачку: На основе этого списка из всего двух элементов (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
pasaranax
Не совсем понятна задача, можно конкретный пример? И откуда берется переменная dispatch, с отступами не напутал?
п.с. про опечатки уже молчу )
Tapo4e4ek
dispetch это функция… Получается что у меня функция возвращает функцию…
Грубо говоря если я напишу
a= create_pair(2,3)
print a("head") # выдаст 2
print a("tail") #выдаст 3
а мне надо чтобы список был как минимум из 10ти переменных…
Тоесть можно вписать в код
elif command=="middle":
return m
elif command =="forvard":
return f
и так до упора, но задача в том и состоит чтобы придумать способ как все это реализовать без вписывания дополнительных elif
pasaranax
Значит я правильно понял. Интуитивно исправив твои опечатки, у меня получилось вот что:
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")
выдаст 123
Tapo4e4ek
Дело в том что for мы еще не проходили и надо реализовать без него…..
Видимо не зря я голову ломаю :-(
pasaranax
тогда вот так )
def create_dict(**args):
def dispatch(command):
if args.has_key(command):
return args[command]
else:
print "Error, unknown command"
return None
return dispatch
PooH
Форматирование у вас поплыло и опечатки, видимо выглядеть должно было так:
 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
Видимо преподаватель хотел показать списки в стиле LISP, хотя и в каком то извращенном виде. Через вашу функцию уже можно определить список неограниченной длины
l = create_pair(1, create_pair(2, create_pair(3, 4)))
получается структура вида - (1, (2, (3, 4)) чтобы достать первый элемент надо вызвать l('head'), а для остальных надо рекурсивно вызывать l('tail') столько раз, какой по счету элемент вы хотите достать. Думаю сами реализуете.
ЗЫ: все таки извращенный интерфейс придумал препод ;)
Tapo4e4ek
Хм… А поподробней можно что означает
 if args.has_key(command):
return args[command]
и почему квадратные скобки???
Tapo4e4ek
PooH
l = create_pair(1, create_pair(2, create_pair(3, 4)))
О, спасибо огромное, не знаю, хотел препод этого или нет, но теперь принцип мне понятен ))))
Если хотите могу еще задачки написать которые нам дали ))))
PooH
Видно все таки зря в MIT перешли со scheme на python ;)
Если ваша цель не просто спихнуть лабы, а изучить основы программирования, настоятельно рекомендую вот эту книжку http://newstar.rinet.ru/~goga/sicp/sicp.pdf и вот эту среду для выполнения упражнений http://download.plt-scheme.org/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB