Найти - Пользователи
Полная версия: Неправильно работает код
Начало » Python для новичков » Неправильно работает код
1
Qwerty16
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 элемента где ошибка
Elaphe
А почему у вас в условии цикла переменная j, а в теле цикла i?
Qwerty16
i индекс а j переменная цикла
Elaphe
А не проще ли так:
def lol(s,k):
    k %= len(s)
    s = s[k:]+s[:k]
    return s
?
Qwerty16
я так делал но через срезы нельзя
Elaphe
Тогда k раз сделать pop(0) и добавить полученный элемент в конец?
def lol(s,k):
    k %= len(s)
    while k>0:
        n = s.pop(0)
        s+=n
        k-=1
    return s
Qwerty16
а через for и range можно както зделать
Elaphe
У вас ошибка в логике работы программы. Вот эта строка:
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
и посмотрите, что получится…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB