1.
def
desliza_n_d_e(n, lista):
2.
"""Desliza n posições para a direita ou esquerda,de modo circular, os elementos de uma lista."""
3.
if
n >
0
:
4.
return
desliza_d_n(n,lista)
5.
else
:
6.
return
desliza_e_n(abs(n), lista)
Temos agora que resolver cada um dos dois sub-problemas quer introduzimos. Eles são muito semelhantes. Comecemos pelo deslizar para a direita. A silução consiste em dividir a lista em dois pedaços, em função do valor de n. Guardamos a parte final numa variável auxiliar e depois acrescentamos à sua frente a parte inicial da lista de que partimos. A figura ilustra a estratégia.

O programa tem apenas que ter o cuidado de testar se a lista é vazia ou não.
1.
def
desliza_d_n(n, lista):
2.
"""Desliza n posições para a direita,de modo circular, os elementos de uma lista."""
3.
if
lista
=
=
[]:
4.
return
lista
5.
else
:
6.
aux
=
lista[
-
n:]
7.
aux.extend(lista[:len(lista)
-
n])
8.
return
aux
Para o deslizar pata a esquerda usamos o mesmo mecanismo.
1.
def
desliza_e_n(n, lista):
2.
"""Desliza n posições para a esquerda,de modo circular, os elementos de uma lista."""
3.
if
lista
=
=
[]:
4.
return
lista
5.
else
:
6.
aux
=
lista[n:]
7.
aux.extend(lista[:n])
8.
return
aux
Como é lógico podíamos ter resolvido o problema só com uma função, cobrindo os dois casos. Fica para o leitor resolver.