while e slicing: laços condicionais e a joia do Python
Nem sempre você sabe de antemão quantas vezes repetir. E existe um recurso de recorte de listas tão elegante que costuma ser chamado, com carinho, de 'a joia do Python'.
Estudar esta lição interativa →Um for é ótimo quando você sabe, de antemão, quantas vezes repetir (todo item de uma lista, um range fixo). Mas em muitos problemas reais você não sabe: um jogo de adivinhação repete até o jogador acertar; um cadastro repete até o usuário digitar um e-mail válido. Para esses casos, existe o while (enquanto): ele repete o bloco enquanto uma condição continuar verdadeira.
tentativas = 0
while tentativas < 3:
print(f"Tentativa número {tentativas + 1}")
tentativas = tentativas + 1
print("Acabaram as tentativas.")O laço para sozinho assim que tentativas chega a 3.
Dentro de qualquer laço (for ou while), duas palavras mudam o fluxo normal: break encerra o laço imediatamente, mesmo que a condição ainda fosse verdadeira; continue pula direto para a próxima volta, ignorando o resto do bloco naquela iteração específica.
for numero in range(10):
if numero == 5:
break
if numero % 2 == 0:
continue
print(numero)Pense num while como alguém secando louça "enquanto ainda houver louça na pia", sem saber de antemão quantos pratos vai lavar. Já um for é mais como "lave estes 8 pratos específicos", uma quantidade já conhecida antes de começar.
Agora o recurso que costuma receber o apelido de "joia do Python": o slicing (fatiamento), que extrai um pedaço de uma lista (ou de uma string, elas funcionam igual aqui) com a sintaxe sequencia[início:fim:passo], sem precisar de nenhum laço.
letras = ["a", "b", "c", "d", "e"]
print(letras[1:3])
print(letras[:2])
print(letras[2:])
print(letras[-1])
print(letras[::-1])Repare que o índice final NUNCA é incluído: [0:2] pega os índices 0 e 1, não o 2.
lista[-1] é sempre o último item, lista[-2] o penúltimo, sem precisar calcular len(lista) - 1. E lista[::-1] (início e fim vazios, passo -1) é o jeito mais curto de inverter qualquer lista ou string em Python.
Se a condição de um while nunca vira False (por exemplo, esquecer de incrementar a variável de controle dentro do laço), ele roda para sempre. Nesta plataforma, um código assim é interrompido automaticamente depois de alguns segundos, com um aviso de "loop infinito", mas num programa Python de verdade fora daqui, isso trava o programa até alguém encerrá-lo à força. Sempre confira: existe, dentro do laço, alguma linha que empurra a condição em direção a se tornar falsa?
frutas = ["maçã", "banana", "uva", "pera", "manga"]
ultimas = frutas[-3:]
print(ultimas)Use slicing negativo para pegar os três últimos itens.
pares guarde, na ordem, só os números pares da lista numeros (use o operador %: um número é par quando numero % 2 == 0).numeros = [3, 8, 15, 22, 7, 40, 11, 6]
pares = []
# para cada número em numeros, se ele for par, adicione a pares com pares.append(numero)
🧩 Este é um exercício com correção automática — abra no app para completá-lo e verificar.