Форум сайта python.su
Кроме того там много функций - ленивых аналогов уже известных. 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)
Офлайн
EdВы будете смеяться. python 2.6.4 - работаетreduce(lambda y,x: x==0 and print(y) or x+y, iter(input, 99999))
Офлайн
Я не буду смеяться. У меня же вчера под чем-то работало.
Однако сегодня я вижу это:
$ 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
Офлайн
pyuserРаботает только если from __future__ import print_function
Вы будете смеяться. python 2.6.4 - работает
EdБудем пробовать, если не отравимся :)
Если с английским туго, то рекомендую пробовать.
Отредактировано (Март 2, 2010 12:04:03)
Офлайн
knkdО том что statement недопустим в lambda я знаю, и все же…pyuserРаботает только если from __future__ import print_function
Вы будете смеяться. python 2.6.4 - работает
Иначе не работает, внутри лямбда-выражения не может быть print
Отредактировано (Март 3, 2010 04:11:58)
Офлайн
knkdДолго что-то пишешь :). Формула для одной из задач выглядит в более читабельном виде так:
Сначала попробую остальные две задачки так само решить :D
Офлайн
asv13Так ведь хочется покрасивше :)
Долго что-то пишешь
Офлайн
knkdсамое красивое решение:
Так ведь хочется покрасивше :)
import math
math.log1p(x)
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)
Офлайн
Третья задача.
Впринципе тут нужно было использовать 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Пытался сегодня сделать четвёртую, таким же способом самостоятельно - не выходит каменный цветок :(
не очень красивое:
Офлайн
knkdя не в курсе :(. напишите в личку Андрею Светлову, на этом форуме он, как никто другой ориентируется в потрохах Python'а
А в стандартной библиотеке или в мат-пакетах есть float неограниченой длины?
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)
Офлайн