Форум сайта python.su
Нужно запрограммировать функцию, которая вернёт True, если последовательность в списке является геометрической прогрессией, и False, если нет.
Подскажите, как сие чудо решить?
Отредактировано Denis_Yakovenko (Окт. 21, 2013 19:59:40)
Офлайн
Denis_YakovenkoЧудо это ты :D
сие чудо
Офлайн
Budulianin
Дело в том, что я уже читал эту статью, и не только её. Если бы я знал как решить или хотябы имел идею, я бы не просил помощи
Офлайн
Denis_Yakovenko
BudulianinДело в том, что я уже читал эту статью, и не только её. Если бы я знал как решить или хотябы имел идею, я бы не просил помощи
2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 — прогрессия со знаменателем 2 из тринадцати членов.
Своё название прогрессия получила по своему характеристическому свойству
Отредактировано Budulianin (Окт. 21, 2013 20:21:27)
Офлайн
Budulianin
def gprogrestion (lst): for x in lst: if x == int: lst[1]/lst[0] = n if lst[2] == lst[0]*n: return True else: return False
Офлайн
Budulianin
Или еще, как вариант, создать цикл, который будет проверять, равно ли a1/a2 и a2/a1 и так далее
но только не знаю, как реализовать
Офлайн
Denis_Yakovenko
Я же тебе написал про характеристическое свойство, это равенство должно выполняться, для каждого члена.
Понятно?
Офлайн
lst = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192] n = lst[1]/lst[0] start = lst[0] def get_progress(start, n): val = start while 1: val *= n yield val progress = get_progress(start, n) success = True for x in lst[1:]: if x != progress.next(): success = False break print success
Офлайн
FishHook
Ну вот, взял всё испортил.
Офлайн
lst = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192] l = lst[-1::-1] s = map(lambda x: x[0]/x[1], zip(*[iter(l)]*2)) if not len(lst): s += lst[0] print len(set(s)) == 1
Офлайн