def desliza_n_d_e(n, lista):
"""Desliza n posições para a direita ou esquerda,de modo circular, os elementos de uma lista."""
if n > 0:
return desliza_d_n(n,lista)
else:
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.
def desliza_d_n(n, lista):
"""Desliza n posições para a direita,de modo circular, os elementos de uma lista."""
if lista == []:
return lista
else:
aux = lista[-n:]
aux.extend(lista[:len(lista) - n])
return aux
Para o deslizar pata a esquerda usamos o mesmo mecanismo.
def desliza_e_n(n, lista):
"""Desliza n posições para a esquerda,de modo circular, os elementos de uma lista."""
if lista == []:
return lista
else:
aux = lista[n:]
aux.extend(lista[:n])
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.
Sem comentários:
Enviar um comentário