Esercizi Python di pratica con soluzioni da eseguire

Quando conosci cicli, liste e dizionari, ti servono problemi su cui esercitarti. Questi sei tornano continuamente nei corsi e nei colloqui. Ogni soluzione è una delle molte valide, e ognuna è stata eseguita per ottenere l'output mostrato.

FizzBuzz

Stampa i numeri da 1 a 15. Per i multipli di 3 stampa Fizz, per i multipli di 5 stampa Buzz, e per i multipli di entrambi stampa FizzBuzz. Il trucco è verificare prima il caso combinato, perché 15 è anche multiplo di 3 e di 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)

Output:

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

Controllo del palindromo

Un palindromo si legge uguale al contrario. Converti il testo in minuscolo e rimuovi gli spazi, così maiuscole e spaziatura non contano, poi confrontalo con il suo inverso.

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

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

Output:

True
False

Conta le vocali

Scorri i caratteri e conta quelli presenti nella stringa delle vocali. sum() su un generatore di 1 è un modo compatto di contare.

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

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

Output:

6

La parola più comune

Usa un dizionario come contatore. counts.get(word, 0) restituisce 0 per una parola che non hai ancora visto, quindi puoi aggiungere 1 senza controllare. max con key=counts.get sceglie la parola con il conteggio più alto.

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])

Output:

the 3

Rimuovi i duplicati e mantieni l'ordine

Convertire in un set rimuove i duplicati ma perde l'ordine. Per mantenere la prima occorrenza di ogni elemento, tieni una lista di quelli già visti.

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

Output:

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

Due numeri che sommati danno un obiettivo

Data una lista e un obiettivo, restituisci le posizioni di due numeri la cui somma è l'obiettivo. Un dizionario dei numeri già visti risponde in un solo passaggio: per ogni numero, controlla se quello che ti manca era già stato visto.

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))

Output:

(0, 1)

Domande comuni

Dove trovo altri esercizi di pratica in Python?
Parti dalle idee sopra e cambiale: conta le consonanti invece delle vocali, trova la parola meno comune, o restituisci tutte le coppie per two-sum. Modificare un problema risolto è il prossimo esercizio migliore.
Devo guardare la soluzione se mi blocco?
Prova almeno dieci minuti prima. Poi leggi la soluzione, chiudila e riscrivila a memoria il giorno dopo. Copiare senza riscrivere non costruisce la competenza.
Questi problemi sono adatti per esercitarsi ai colloqui?
Sì, FizzBuzz, i palindromi, il conteggio e two-sum sono tutti classici esercizi di riscaldamento. Consulta la guida ai colloqui di questo sito per le domande concettuali (liste contro tuple, is contro ==).

Esercitati