Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2009 13:51:45

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Подскажите

вот функция числа фибоначчи, почему если сделать как во втором варианте то не соблюдается условия цикла, и вообще не понятно какое условие тогда соблюдается? и как вообще лучше реализовать эту функцию что бы ее можно было передавать в такие функции как len, sum, max, min.
1)
def fibf(n):
a,b=0,1
lst=
while b<n:
lst.append(b)
a,b=b,a+b
return lst

2)
def fibf(n):
a,b=0,1
lst=
while b<n:
a,b=b,a+b
lst.append(b)
return lst



Офлайн

#2 Ноя. 6, 2009 14:08:58

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

Подскажите

def fib(n):
a, b = 0, 1
for i in xrange(0, n):
yield b
a, b = b, a+b



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

Офлайн

#3 Ноя. 6, 2009 14:13:19

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Подскажите

PooH
def fib(n):
a, b = 0, 1
for i in xrange(0, n):
yield b
a, b = b, a+b
и что это, ты ее сам проверял?



Офлайн

#4 Ноя. 6, 2009 14:58:26

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

Офлайн

#5 Ноя. 6, 2009 15:01:24

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Подскажите

Человек просто не знает что такое итераторы и генераторы.

Офлайн

#6 Ноя. 6, 2009 16:45:31

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Подскажите

pasaranax
даже на вики аналогичный вариант
Объясните пожалуйста наглядно как ей пользоваться, что такое генераторы и итераторы я знаю но знать это не достаточно надо понимать как и что!
def fib(n):
a, b = 0, 1
for i in xrange(0, n):
yield b
a, b = b, a+b

она же не работает вот так:
sum(fib(100) и вот так

for i in fib(100):
print i

а вот эта работает
def fibf(n):
a,b=0,1
lst=
while b<n:
lst.append(b)
a,b=b,a+b
return lst

sum(fibf(100)



Офлайн

#7 Ноя. 6, 2009 17:43:07

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

Подскажите

Извини, я маленько не дочитал твою задачу, та функция, что я тебе написал вычисляет n - первых членов ряда, для вычисления членов ряда не превышающих n функция будет выглядеть так:

def fib(n):
a, b = 0, 1
while b < n:
yield b
a, b = b, a+b
Malinaizer
она же не работает вот так:
sum(fib(100)
Обижаешь, начальник :)
sum(fib(100))
232
Malinaizer
и вот так
for i in fib(100):
print i
for i in fib(100):
print i,

1 1 2 3 5 8 13 21 34 55 89
Единственное, len с генераторами не применим, потому как длины не имеют, придется в список запихавать:
len(list(fib(100)))
11
Зато и памяти лишней не кушают, новое значение только по требованию генерируется, можно и бесконечный ряд генерировать.



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

Офлайн

#8 Ноя. 6, 2009 18:09:03

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Подскажите

PooH
ну так первый же пример не работал а теперь другое дело спасибо за объяснения!



Отредактировано (Ноя. 6, 2009 18:09:34)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version