Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 24, 2010 09:00:21

breidos
От:
Зарегистрирован: 2010-09-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Числа Фибоначчи

Вот у меня есть такая часть кода:

# -*- coding: cp1251 -*-
n = input("Введите последнее число дапозона ряда Фиббоначи: ")
def fib(n):
a, b = 0, 1
while b < n:
print b,
a, b = b, a+b
Хочу выполнить такое условие: “Введенное число должно быть целым и больше 0”. Но он ничего не выводит. В каком месте я ошибся?
if n==int: print "Введенное число должно быть целым и больше 0"
else:
fib(n)
Можно было бы просто написать так:
# -*- coding: cp1251 -*-
def fib(n):
a, b = 0, 1
while b < n:
print b,
a, b = b, a+b
n = int(input("Введите последнее число дапозона ряда Фиббоначи: "))
if n<0: print "Введенное число должно быть целым и больше 0"
else:
fib(n)
Но вот как как можно сделать, чтобы при введении числа с запятой вышло сообщение?
А еще можно как нибудь отловить нажатие определнных клавиш/кнопок?



Отредактировано (Сен. 24, 2010 10:59:18)

Офлайн

#2 Сен. 24, 2010 11:05:34

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Числа Фибоначчи

breidos
Хочу выполнить такое условие: “Введенное число должно быть целым и больше 0”
Вы пытались сравнить “тип” с числом.
Посмотрите
>>> a=15
>>> a
15
>>> type(a)
<type 'int'>
>>> int
<type 'int'>
Сравнивайте тип с типом:
if type(a)==int and a>0



Офлайн

#3 Сен. 24, 2010 12:18:13

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

Числа Фибоначчи

igor.kaist
if type(a)==int and a>0
наверно идеологически правильнее будет использовать isinstance :)



Офлайн

#4 Сен. 25, 2010 08:42:51

breidos
От:
Зарегистрирован: 2010-09-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Числа Фибоначчи

Вот у меня есть такой код:

# -*- coding: cp1251 -*-
def fib(n):
a, b = 0, 1
while b < n:
print b,
a, b = b, a+b
c=0
d=1
while c!=d:
n = input("Введите последнее число дапозона ряда Фиббоначи: ")
if type(n)==int and n>0:
fib(n)
c=1
else:
print "Введенное число должно быть целым и больше 0"
Подскажите, как сделать так, чтобы в строке выводилось по 5 чисел. Ну т.е. если введем в коде 200, то должно получиться:

1 1 2 3 5
8 13 21 34 55
89 144



Офлайн

#5 Сен. 25, 2010 11:03:27

qweqwe
От:
Зарегистрирован: 2010-09-23
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Числа Фибоначчи

я в этом случае добавил

f=fib2(1000)
d=len(f)
x,y=0,5
while x<=d:
print f[x:y]
x,y=x+5,y+5
не самый лучший вариант =) но по другому пока не умею



Отредактировано (Сен. 25, 2010 11:16:28)

Офлайн

#6 Сен. 26, 2010 22:05:42

maxwell
От:
Зарегистрирован: 2008-08-26
Сообщения: 111
Репутация: +  0  -
Профиль   Отправить e-mail  

Числа Фибоначчи

На вскидку:

def fibonacci():
a, b = 0, 1
while 1:
yield b
a, b = b, a+b


def fibonacci_print(range):
f = fibonacci()
current_number = f.next()
c = 1
while current_number <= range:
if c % 5:
print current_number,
else:
print current_number
c += 1
current_number = f.next()
В офф доках по генераторам отличный пример и как раз про числа Фибоначи.

Далее.
c=0
d=1
while c!=d:
смело меняем на что-то вроде:
while True:
if <condition>:
break;
И настоятельно рекомендую не мешать в кучу вывод и расчёты.



Отредактировано (Сен. 26, 2010 22:12:44)

Офлайн

#7 Ноя. 2, 2013 02:06:09

Pytophone
От: Владивосток
Зарегистрирован: 2013-11-01
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Числа Фибоначчи

Почему не работает такая система?

while b<10:
	print (b)
	a=b
	b=a+b

Офлайн

#8 Ноя. 2, 2013 09:44:51

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Числа Фибоначчи

Если начальное значение b задано не меньше 10, то цикл ни разу не выполнится, иначе всё работает

Офлайн

#9 Ноя. 2, 2013 17:52:39

Pytophone
От: Владивосток
Зарегистрирован: 2013-11-01
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Числа Фибоначчи

Это неправильное решение, ибо надо, по моему мнению вводить третью переменную.

>>> a=0
>>> b=1
>>> while b<10:
	print (b)
	a=b
	b=a+b
	
1
2
4
8
>>> 

В итоге нашел решение с третьей переменной:
>>> a=0
>>> b=1
>>> c=0
>>> while b<10:
	c=a+b
	a=b
	b=c
	print(c)

Это самый короткий вариант.

Офлайн

#10 Ноя. 2, 2013 18:03:23

Aris_P@
От:
Зарегистрирован: 2010-07-24
Сообщения: 46
Репутация: +  2  -
Профиль   Отправить e-mail  

Числа Фибоначчи

a,b=b,a+b
это не тоже самое, что и
a=b
b=a+b



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version