Guide

Guida pratica al Fizz Buzz: come imparare a programmare (bene)

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:

  1. 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

  2. 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

  3. Uso improprio dell’operatore confronto/assegnamento: Non utilizzare correttamente l’operatore modulo (%) per determinare la divisibilità. Ad esempio, usare i % 3 = 0 invece di i % 3 == 0 può causare errori di sintassi o logici nel codice.

  4. 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.

  5. 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

  6. 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.

fizzBuzz-1.pdf (free download)

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 👇



Questo sito esiste da 4831 giorni (13 anni), e contiene 5981 articoli (circa 4.784.800 parole in tutto), con la bellezza di 32 tool gratuiti.