FizzBuzz è un popolare gioco matematico spesso usato come esercizio per insegnare ai bambini i concetti di divisione e multipli. Questo gioco può essere utilizzato sia come strumento didattico per insegnare i concetti di divisione ai bambini, sia come esercizio di programmazione per valutare le abilità di programmazione di base.
L’obiettivo è generare una sequenza di numeri da 1 a N, sostituendo determinati numeri con parole specifiche in base a determinate regole. Per ogni numero nella sequenza, si applicano le seguenti regole:
- Se il numero è divisibile sia per 3 che per 5, anziché stampare il numero, si stampa “FizzBuzz“.
- Se il numero è solo divisibile per 3, si stampa “Fizz”.
- Se il numero è solo divisibile per 5, si stampa “Buzz”.
- Se il numero non è divisibile né per 3 né per 5, si stampa semplicemente il numero stesso.
L’obiettivo è creare una sequenza di numeri in cui i multipli di 3 vengono sostituiti da “Fizz”, i multipli di 5 vengono sostituiti da “Buzz”, e i multipli di entrambi 3 e 5 vengono sostituiti da “FizzBuzz”. Il problema FizzBuzz è un esercizio di programmazione molto popolare, spesso utilizzato nei colloqui di lavoro per valutare la comprensione delle strutture di controllo e della logica condizionale.
Nonostante la sua apparente semplicità, ci sono diversi errori comuni che i programmatori possono commettere nella sua implementazione:
-
Ordine errato delle condizioni: Verificare prima la divisibilità per 3 o per 5 anziché per entrambi. Questo può portare a non stampare mai “FizzBuzz” per i numeri divisibili sia per 3 che per 5, poiché le condizioni precedenti catturano già questi numeri. È importante controllare prima la condizione più specifica (divisibilità per 3 e 5) e poi quelle più generali. mautoblog.com
-
Mancata gestione dei numeri non divisibili: Dimenticare di stampare il numero stesso quando non è divisibile né per 3 né per 5. Ogni numero che non soddisfa le condizioni per “Fizz”, “Buzz” o “FizzBuzz” dovrebbe essere stampato come numero stesso. Medium+13mautoblog.com+13codenewbie.org+13
-
Uso improprio dell’operatore confronto/assegnamento: Non utilizzare correttamente l’operatore modulo (%) per determinare la divisibilità. Ad esempio, usare
i % 3 = 0
invece dii % 3 == 0
può causare errori di sintassi o logici nel codice. -
Inizializzazione o range errato del ciclo: Iniziare il ciclo da 0 invece che da 1, o terminare prima di raggiungere il numero desiderato. Ad esempio, un ciclo che va da 0 a 99 invece che da 1 a 100 non rispetta le specifiche del problema.
-
Errori di stampa o formattazione: Stampare “Fizzbuzz” invece di “FizzBuzz” o includere spazi o caratteri non necessari può portare a risultati non conformi alle aspettative. blog.regehr.org
-
Mancata comprensione delle specifiche: Interpretare erroneamente le regole del problema, come scambiare l’associazione tra “Fizz” e “Buzz” con i numeri 3 e 5, rispettivamente. Reddit
Evitando questi errori comuni, è possibile implementare una soluzione FizzBuzz corretta ed efficiente.
Dispensa in PDF: Re-Code
Come imparare velocemente a programmare in C++, con una semplice guida progressiva passo-passo.
Fizz Buzz in C++
#include <iostream> using namespace std; void fizzbuzz(int n) { for (int i = 1; i <= n; ++i) { if (i % 3 == 0 && i % 5 == 0) { cout << "FizzBuzz" << endl; } else if (i % 3 == 0) { cout << "Fizz" << endl; } else if (i % 5 == 0) { cout << "Buzz" << endl; } else { cout << i << endl; } } } int main() { int n = 20; // Puoi cambiare questo numero per visualizzare la sequenza fino a un limite diverso fizzbuzz(n); return 0; }
Una delle migliori codifiche del problema prevede che vengano utilizzate solo tre righe di codice, sfruttando le condizioni implicite innestate, che in C++ diventano come segue.
# include < iostream > using namespace std ; int main () { for ( int i = 1; i <= 100; i ++) cout << ( i % 3 == 0 ? " Fizz " : " " ) << ( i % 5 == 0 ? " Buzz " : " " ) << ( i % 3 && i % 5 ? to_string ( i ) : " " ) << endl ; return 0; }
Fizz Buzz in JS
Altre versioni corrette, più standard, sono queste (fonte).
// JavaScript program for Fizz Buzz Problem // by checking every integer individually function fizzBuzz(n) { let res = []; for (let i = 1; i <= n; ++i) { // Check if i is divisible by both 3 and 5 if (i % 3 === 0 && i % 5 === 0) { // Add "FizzBuzz" to the result array res.push("FizzBuzz"); } // Check if i is divisible by 3 else if (i % 3 === 0) { // Add "Fizz" to the result array res.push("Fizz"); } // Check if i is divisible by 5 else if (i % 5 === 0) { // Add "Buzz" to the result array res.push("Buzz"); } else { // Add the current number as a string to the // result array res.push(i.toString()); } } return res; } // Driver code let n = 20; let res = fizzBuzz(n); console.log(res.join(' '));
Fizz Buzz in Python
Procedendo per gradi, un programmatore principiante potrebbe essere tentato dallo scrivere qualcosa del genere, considerando che i casi in gioco sono soltanto tre per cui servono tre condizioni per tutti i numeri che vanno da 1 ad N:
def fizzbuzz(n):
# Iniziamo un ciclo che va da 1 fino a n (incluso)
for i in range(1, n+1):
# Se i è divisibile per 3, stampiamo "Fizz"
if i % 3 == 0:
print("Fizz")
# Altrimenti, se i è divisibile per 5, stampiamo "Buzz"
elif i % 5 == 0:
print("Buzz")
# Altrimenti, se non è divisibile né per 3 né per 5, stampiamo "FizzBuzz"
else:
print("FizzBuzz")
# Assegniamo un valore di esempio a n e chiamiamo la funzione fizzbuzz con questo valore
n = 10
fizzbuzz(n)
A leggerla così potrebbe sembrare corretto, ma basta lanciare il programma per rendersi conto che non tira fuori quello che servirebbe. La sequenza risultante infatti è solo parzialmente corretta:
FizzBuzz
FizzBuzz
Fizz
FizzBuzz
Buzz
Fizz
FizzBuzz
FizzBuzz
Fizz
Buzz
Non abbiamo considerato un caso importante, in questo caso, che consiste in quello in cui viene stampato il numero direttamente.
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
Per fare questo, ci rendiamo conto che i casi da considerare sono in realtà 4:
- Se un numero è divisibile solo per 3, viene sostituito con “Fizz”.
- Se un numero è divisibile solo per 5, viene sostituito con “Buzz”.
- Se un numero è divisibile sia per 3 che per 5, viene sostituito con “FizzBuzz”.
- Se un numero non è divisibile né per 3 né per 5, rimane invariato e viene semplicemente stampato.
Chiarito questo, scriviamo:
# Definiamo una funzione chiamata fizzbuzz che prende un parametro n def fizzbuzz(n): # Iniziamo un ciclo che va da 1 fino a n (incluso) for i in range(1, n+1): # Se i è divisibile per 3, stampiamo "Fizz" if i % 3 == 0: print("Fizz") # Altrimenti, se i è divisibile per 5, stampiamo "Buzz" elif i % 5 == 0: print("Buzz") # Altrimenti, se non è divisibile né per 3 né per 5, stampiamo "FizzBuzz" else: print("FizzBuzz") # Assegniamo un valore di esempio a n e chiamiamo la funzione fizzbuzz con questo valore n = 10 fizzbuzz(n)
👇 Contenuti da non perdere 👇
- Domini Internet 🌍
- Gratis 🎉
- Internet 💻
- Marketing & SEO 🌪
- Meteo
- monitoraggio servizi online 📈
- Scrivere 🖋
- Sicurezza & Privacy 👁
- 💬 Il nostro canale Telegram: iscriviti
- 🔵 Che vuol dire chetogenica?
- 🔵 Che cosa sono le sinapsi (per le reti neurali)
- 🔵 Mini corso / Spiegone di machine learning per newbie totali