programandoai

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.

Índices negativos contam do fim

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.

Um while sem condição de parada trava a execução

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.

Complete o laço para que 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.

← Voltar ao índice do curso