Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 22, 2016 23:07:34

Qwerty16
Зарегистрирован: 2016-03-20
Сообщения: 38
Репутация: +  -1  -
Профиль   Отправить e-mail  

Неправильно работает код

def lol(s,k):
k %= len(s)
i = 0
for j in range(len(s)-k):
s[i], s[i+k] = s[i+k], s[i]
i += 1
return s

Нужно сдвинуть элементы линейного массива на k позиций влево работает только когда сдвиг на 1 или 2 элемента где ошибка

Офлайн

#2 Апрель 23, 2016 22:54:05

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Неправильно работает код

А почему у вас в условии цикла переменная j, а в теле цикла i?

Офлайн

#3 Апрель 23, 2016 23:16:25

Qwerty16
Зарегистрирован: 2016-03-20
Сообщения: 38
Репутация: +  -1  -
Профиль   Отправить e-mail  

Неправильно работает код

i индекс а j переменная цикла

Офлайн

#4 Апрель 23, 2016 23:24:47

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Неправильно работает код

А не проще ли так:

def lol(s,k):
    k %= len(s)
    s = s[k:]+s[:k]
    return s
?

Отредактировано Elaphe (Апрель 23, 2016 23:26:37)

Офлайн

#5 Апрель 23, 2016 23:31:32

Qwerty16
Зарегистрирован: 2016-03-20
Сообщения: 38
Репутация: +  -1  -
Профиль   Отправить e-mail  

Неправильно работает код

я так делал но через срезы нельзя

Офлайн

#6 Апрель 23, 2016 23:36:05

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Неправильно работает код

Тогда k раз сделать pop(0) и добавить полученный элемент в конец?

def lol(s,k):
    k %= len(s)
    while k>0:
        n = s.pop(0)
        s+=n
        k-=1
    return s

Офлайн

#7 Апрель 23, 2016 23:38:30

Qwerty16
Зарегистрирован: 2016-03-20
Сообщения: 38
Репутация: +  -1  -
Профиль   Отправить e-mail  

Неправильно работает код

а через for и range можно както зделать

Офлайн

#8 Апрель 23, 2016 23:55:22

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Неправильно работает код

У вас ошибка в логике работы программы. Вот эта строка:

s[i], s[i+k] = s[i+k], s[i]
Просто меняет местами два элемента массива, а вам надо не поменять местами, а сдвинуть весь массив. При вашем же алгоритме, если k< len(s)/2, то центральные элементы не сдвигаются вообще.
Проверить значение каждой переменной вы можете здесь: link
Попробуйте выставить, например,
s = [1,2,3,4,5,6,7]
k=3
и посмотрите, что получится…

Отредактировано Elaphe (Апрель 24, 2016 00:00:49)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version