Questão FC331174
Pedro está dando seus primeiros passos na programação Python e pretende construir uma função para colocar em ordem crescente os elementos de uma lista. A versão corrente do seu scr
Linguagens de Programação
FGV · 2022
Pedro está dando seus primeiros passos na programação Python e pretende construir uma função para colocar em ordem crescente os elementos de uma lista. A versão corrente do seu script de teste é a mostrada abaixo.
def enigma(L):
for i in range(0, len(L)-2):
achou=False
for j in range(1, len(L) -1):
if L[i] > L[j]:
L[i], L[j] = L[j], L[i]
achou=True
if achou:
break
return len(L)
x=[4,2,6,5,10]
print (enigma(x))
print (x)
Nesse estágio, a lista exibida pelo último comando print é:
- [10, 4, 6, 5, 2]
- [2, 6, 5, 4, 10]
- [2, 4, 6, 5, 10]
- [4, 5, 6, 2, 10]
- [4, 2, 5, 6, 10]
Mostrar resposta e comentário
Gabarito
Certo
Comentário do professor
Ao executar o código, a lista final é [2, 4, 6, 5, 10]. Isso acontece porque a função enigma faz apenas a primeira troca necessária e interrompe o processo.
Detalhando: o primeiro for usa range(0, len(L)-2) (para len=5, i = 0,1,2). O segundo for usa range(1, len(L)-1) (j = 1,2,3). Na primeira iteração com i=0, compara-se L[i] com L[j].
Para j=1 temos L[0]=4 e L[1]=2; como 4 > 2 a linha L[i], L[j] = L[j], L[i] faz a troca resultando em [2, 4, 6, 5, 10]. A variável achou passa a True.
Após o término do laço interno, a condição if achou: break provoca a saída do laço externo, impedindo novas trocas. Por isso a lista final permanece [2, 4, 6, 5, 10].
Conteúdo do catálogo FC Concursos · Atualizado em