Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 22, 2009 15:59:39

Tapo4e4ek
От:
Зарегистрирован: 2009-10-22
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с задачкой плиз...

Народ, выручайте, учусь в институте, задали задачку: На основе этого списка из всего двух элементов (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)

Офлайн

#2 Окт. 22, 2009 16:05:42

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с задачкой плиз...

Не совсем понятна задача, можно конкретный пример? И откуда берется переменная dispatch, с отступами не напутал?
п.с. про опечатки уже молчу )



Отредактировано (Окт. 22, 2009 16:06:35)

Офлайн

#3 Окт. 22, 2009 16:14:43

Tapo4e4ek
От:
Зарегистрирован: 2009-10-22
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с задачкой плиз...

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



Офлайн

#4 Окт. 22, 2009 16:17:37

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с задачкой плиз...

Значит я правильно понял. Интуитивно исправив твои опечатки, у меня получилось вот что:

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



Отредактировано (Окт. 22, 2009 16:18:29)

Офлайн

#5 Окт. 22, 2009 16:20:03

Tapo4e4ek
От:
Зарегистрирован: 2009-10-22
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с задачкой плиз...

Дело в том что for мы еще не проходили и надо реализовать без него…..
Видимо не зря я голову ломаю :-(



Офлайн

#6 Окт. 22, 2009 16:22:44

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с задачкой плиз...

тогда вот так )

def create_dict(**args):
def dispatch(command):
if args.has_key(command):
return args[command]
else:
print "Error, unknown command"
return None
return dispatch



Офлайн

#7 Окт. 22, 2009 16:25:21

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Помогите с задачкой плиз...

Форматирование у вас поплыло и опечатки, видимо выглядеть должно было так:

 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') столько раз, какой по счету элемент вы хотите достать. Думаю сами реализуете.
ЗЫ: все таки извращенный интерфейс придумал препод ;)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#8 Окт. 22, 2009 16:26:52

Tapo4e4ek
От:
Зарегистрирован: 2009-10-22
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с задачкой плиз...

Хм… А поподробней можно что означает

 if args.has_key(command):
return args[command]
и почему квадратные скобки???



Офлайн

#9 Окт. 22, 2009 16:30:45

Tapo4e4ek
От:
Зарегистрирован: 2009-10-22
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с задачкой плиз...

PooH
l = create_pair(1, create_pair(2, create_pair(3, 4)))
О, спасибо огромное, не знаю, хотел препод этого или нет, но теперь принцип мне понятен ))))
Если хотите могу еще задачки написать которые нам дали ))))



Офлайн

#10 Окт. 22, 2009 16:50:08

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Помогите с задачкой плиз...

Видно все таки зря в MIT перешли со scheme на python ;)
Если ваша цель не просто спихнуть лабы, а изучить основы программирования, настоятельно рекомендую вот эту книжку http://newstar.rinet.ru/~goga/sicp/sicp.pdf и вот эту среду для выполнения упражнений http://download.plt-scheme.org/



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version