Уведомления

Группа в Telegram: @pythonsu

#1 Март 29, 2015 18:13:39

Emma
Зарегистрирован: 2015-03-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите сгенерировать монотонную последовательность)

Здраствуйте!
Мне нужно сгенерировать последовательность чисел, элементы которой возрастают, пока номер элемента не удовлетворяет условию: делится на пять без остатка, а затем убывают до следующего номера и т.д.
Есть идеи как это можно осуществить?

Офлайн

#2 Март 29, 2015 18:41:13

Emma
Зарегистрирован: 2015-03-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите сгенерировать монотонную последовательность)

def f(n):
    """Печатает первые n элементов последовательности """
     
    k=1
    m=0
    while k<=n:
        if k%5==0:
            m=m-1
            print(m)
         
        else:
            m=m+1
            print(m)
        k=k+1
            
    return          
    

f(12): 1, 2, 3, 4, 3, 4, 5, 6, 7, 6, 7, 8
Убывают элементы № 5, 10…
А должно получится: 1, 2, 3, 4, 3, 2, 1, 0, -1, 0, 1, 2
Убывают элементы № 5-9, а дальше опять возрастают

Офлайн

#3 Март 29, 2015 21:10:59

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Помогите сгенерировать монотонную последовательность)

может так

def f(n):
    """Печатает первые n элементов последовательности """
    k=1
    m=0
    while k<=n:
        if k%5==0:
            for x in range(k):
                m=m-1
                print(m)
                k=k+1
        
        else:
            m=m+1
            print(m)
        k=k+1

Офлайн

#4 Март 29, 2015 21:56:55

Emma
Зарегистрирован: 2015-03-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите сгенерировать монотонную последовательность)

Правильно выводит, только первые 10 элементов)

Офлайн

#5 Март 29, 2015 22:26:50

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Помогите сгенерировать монотонную последовательность)

Emma
Убывают элементы № 5-9, а дальше опять возрастают
возрастают уже без проверки условия k%5==0 или с проверкой7
если возрастает с проверкой условия то после k%5==0 опять должны убывать7

Офлайн

#6 Март 29, 2015 22:30:17

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Помогите сгенерировать монотонную последовательность)

def f(n):
    r, k = 0, 1
    for i in range(1, n+1):
        if not i % 5:
            k *= -1
        r += k
        print(r)



————————————————
-*- Simple is better than complex -*-

Офлайн

#7 Март 30, 2015 22:02:30

Emma
Зарегистрирован: 2015-03-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите сгенерировать монотонную последовательность)

Спасибо большое, очень помогли!
А можно написать то же самое через рекурсию?

Офлайн

#8 Март 30, 2015 22:24:10

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Помогите сгенерировать монотонную последовательность)

Emma
А можно написать то же самое через рекурсию?
можно, но это задача которая решается не через рекурсию! поэтому это очень-очень плохой код
def f(k, s, e, r):
    for i in range(s, e+1):
        if not i % 5:
            print(r-k)
            return f(k * -1, i+1, e, r-k)
        r += k
        print(r)



————————————————
-*- Simple is better than complex -*-

Офлайн

#9 Март 31, 2015 06:23:17

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите сгенерировать монотонную последовательность)

Почему никто не вспомнил про генераторы?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version