Problemas práticos de Python com soluções que você pode executar

Quando você já conhece laços, listas e dicionários, precisa de problemas para praticar. Estes seis aparecem de novo e de novo em cursos e entrevistas. Cada solução é uma entre várias formas válidas, e todas foram executadas para gerar a saída mostrada.

FizzBuzz

Imprima os números de 1 a 15. Para múltiplos de 3, imprima Fizz; para múltiplos de 5, imprima Buzz; e para múltiplos de ambos, imprima FizzBuzz. O truque é testar primeiro o caso combinado, porque 15 também é múltiplo de 3 e de 5.

for n in range(1, 16):
    if n % 15 == 0:
        print("FizzBuzz")
    elif n % 3 == 0:
        print("Fizz")
    elif n % 5 == 0:
        print("Buzz")
    else:
        print(n)

Saída:

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz

Verificação de palíndromo

Um palíndromo se lê igual de trás para frente. Converta o texto para minúsculas e remova os espaços, para que maiúsculas e espaçamento não importem, e depois compare-o com o seu inverso.

def is_palindrome(text):
    cleaned = text.lower().replace(" ", "")
    return cleaned == cleaned[::-1]

print(is_palindrome("Never odd or even"))
print(is_palindrome("Python"))

Saída:

True
False

Contando as vogais

Percorra os caracteres e conte os que estão na string de vogais. sum() sobre um gerador de 1s é uma forma compacta de contar.

def count_vowels(text):
    return sum(1 for ch in text.lower() if ch in "aeiou")

print(count_vowels("Pip and the Scrap Isle"))

Saída:

6

A palavra mais comum

Use um dicionário como contador. counts.get(word, 0) retorna 0 para uma palavra que você ainda não viu, então você pode somar 1 sem verificar. max com key=counts.get escolhe a palavra com a maior contagem.

text = "the robot and the island and the sea"
counts = {}
for word in text.split():
    counts[word] = counts.get(word, 0) + 1
best = max(counts, key=counts.get)
print(best, counts[best])

Saída:

the 3

Remova duplicatas e mantenha a ordem

Converter para um set remove as duplicatas, mas perde a ordem. Para manter a primeira ocorrência de cada item, guarde uma lista do que você já viu.

items = ["a", "b", "a", "c", "b"]
seen = []
for item in items:
    if item not in seen:
        seen.append(item)
print(seen)

Saída:

['a', 'b', 'c']

Dois números que somam um alvo

Dada uma lista e um alvo, retorne as posições de dois números que somam o alvo. Um dicionário com os números já vistos resolve em uma só passagem: para cada número, verifique se o número de que ainda precisa já foi visto antes.

def two_sum(numbers, target):
    seen = {}
    for i, n in enumerate(numbers):
        if target - n in seen:
            return seen[target - n], i
        seen[n] = i

print(two_sum([2, 7, 11, 15], 9))

Saída:

(0, 1)

Perguntas comuns

Onde posso encontrar mais problemas práticos de Python?
Comece pelas ideias acima e mude-as: conte consoantes em vez de vogais, encontre a palavra menos comum, ou retorne todos os pares do two-sum. Mudar um problema já resolvido é o melhor próximo problema.
Devo olhar a solução se estiver travado?
Tente por pelo menos dez minutos primeiro. Depois leia a solução, feche-a e escreva-a de novo a partir da memória no dia seguinte. Copiar sem reescrever não desenvolve a habilidade.
Estes problemas servem para treinar entrevistas?
Sim: FizzBuzz, palíndromos, contagem e two-sum são perguntas clássicas de aquecimento. Veja o guia de entrevistas deste site para as perguntas conceituais (listas versus tuplas, is versus ==).

Pratique