Уведомления

Группа в Telegram: @pythonsu

#1 Март 2, 2010 01:10:28

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Люди помогите решить задачки в питоне!

Кроме того там много функций - ленивых аналогов уже известных. map, filter, zip
Вот тут по-русски немножко есть и не только про итераторы:
http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D0%9F%D0%B8%D1%82%D0%BE%D0%BD%D0%B5#.D0.98.D1.82.D0.B5.D1.80.D0.B0.D1.82.D0.BE.D1.80.D1.8B



Отредактировано (Март 2, 2010 01:10:54)

Офлайн

#2 Март 2, 2010 03:05:23

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Люди помогите решить задачки в питоне!

Ed
reduce(lambda y,x: x==0 and print(y) or x+y, iter(input, 99999))
Вы будете смеяться. python 2.6.4 - работает



Офлайн

#3 Март 2, 2010 10:36:14

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Люди помогите решить задачки в питоне!

Я не буду смеяться. У меня же вчера под чем-то работало.
Однако сегодня я вижу это:

$ python2.6 --version
Python 2.6.4+
$ python2.6 -c 'reduce(lambda y,x: x==0 and print(y) or x+y, iter(input, 99999))'
File "<string>", line 1
reduce(lambda y,x: x==0 and print(y) or x+y, iter(input, 99999))
^
SyntaxError: invalid syntax
чудеса, блин.



Офлайн

#4 Март 2, 2010 12:02:49

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

Люди помогите решить задачки в питоне!

pyuser
Вы будете смеяться. python 2.6.4 - работает
Работает только если from __future__ import print_function
Иначе не работает, внутри лямбда-выражения не может быть print

Ed
Если с английским туго, то рекомендую пробовать.
Будем пробовать, если не отравимся :)

Сначала попробую остальные две задачки так само решить :D



Отредактировано (Март 2, 2010 12:04:03)

Офлайн

#5 Март 3, 2010 03:01:07

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Люди помогите решить задачки в питоне!

knkd
pyuser
Вы будете смеяться. python 2.6.4 - работает
Работает только если from __future__ import print_function
Иначе не работает, внутри лямбда-выражения не может быть print
О том что statement недопустим в lambda я знаю, и все же…
На работе WinXP SP3 python 2.6.4 - работает (без всяких from __future__ import print_function)
Дома Win7 python 2.6.4 - SyntaxError

ЗЫ. Как файл прикрепить? Сделал снимок консольного окна, а положить его сюда не получается (отсутствует поле “Прикрепленные файлы”)



Отредактировано (Март 3, 2010 04:11:58)

Офлайн

#6 Март 3, 2010 05:58:52

asv13
От:
Зарегистрирован: 2007-01-22
Сообщения: 130
Репутация: +  0  -
Профиль   Отправить e-mail  

Люди помогите решить задачки в питоне!

knkd
Сначала попробую остальные две задачки так само решить :D
Долго что-то пишешь :). Формула для одной из задач выглядит в более читабельном виде так:

http://en.wikipedia.org/wiki/Natural_logarithm



Офлайн

#7 Март 3, 2010 07:00:00

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

Люди помогите решить задачки в питоне!

asv13
Долго что-то пишешь
Так ведь хочется покрасивше :)
А спешить некуда - служба в армии дело неспешное.



Офлайн

#8 Март 3, 2010 09:29:45

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Люди помогите решить задачки в питоне!

knkd
Так ведь хочется покрасивше :)
самое красивое решение:
import math
math.log1p(x)
жаль только, что eps из задачи не используется :(
не очень красивое:
from itertools import count, takewhile

lambda x, eps: reduce(lambda x, y: x + y,
takewhile(lambda v: abs(v) >= eps,
(pow(x, i) * float(pow(-1, i + 1)) / i for i in count(1))))



Отредактировано (Март 3, 2010 09:30:35)

Офлайн

#9 Март 3, 2010 19:02:54

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

Люди помогите решить задачки в питоне!

Третья задача.
Впринципе тут нужно было использовать takewhile() но я её написал на работе, в понедельник, а про магию *while() узнал только сегодня :)
Потому там унутре грязный хак xrange(1,171) :D

In [1]: lgr = lambda x, exp: 1 + sum (z for z in ((x**float(a))/float(reduce(lambda n,m: m > 1 and n*m or 1, xrange(1,a+1))) for a in xrange(1,171)) if z > exp)
In [2]: print lgr(1, 0.00000000001)
------> print(lgr(1, 0.00000000001))
2.71828182846
pyuser
не очень красивое:
Пытался сегодня сделать четвёртую, таким же способом самостоятельно - не выходит каменный цветок :(

А в стандартной библиотеке или в мат-пакетах есть float неограниченой длины?

ЗЫ Топикстартер догадается вернуться сюда за ответами? :D



Офлайн

#10 Март 4, 2010 04:55:30

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Люди помогите решить задачки в питоне!

knkd
А в стандартной библиотеке или в мат-пакетах есть float неограниченой длины?
я не в курсе :(. напишите в личку Андрею Светлову, на этом форуме он, как никто другой ориентируется в потрохах Python'а
knkd
Пытался сегодня сделать четвёртую, таким же способом самостоятельно - не выходит каменный цветок
а Ваш код разве не есть решение? Подставил в него takewhile
form operator import mul
from itertools import count, takewhile

lambda x, eps: sum(takewhile(lambda v: v > eps,
(float(pow(x, i)) / reduce(mul, xrange(2,i+1), 1) for i in count())))
knkd
Топикстартер догадается вернуться сюда за ответами?
в смысле, после армии?



Отредактировано (Март 4, 2010 09:04:39)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version