Python

Una Tombola in Python

Come realizzare il gioco della Tombola con Python3

Il gioco della Tombola lo conoscono tutti, non serve quindi spiegare le regole.
Condivido di seguito il codice in Python3 ed un video di spiegazione della mia versione del gioco più famoso delle festività natalizie. Potrete giocare da subito con amici e parenti estraendo i numeri dal PC anziché dal bussolotto/sacchetto (avete smarrito qualche numeretto?).

from random import choice

sacco = set()
numeriEstratti = []

for n in range(1, 91):
    sacco.add(n)

def estrai() -> int:
    """Estrae dal sacco un numero, lo rimuove, inserisce il numero nella lista degli estratti e restituisce il valore

    Returns:
        int: numero estratto
    """
    x = choice(tuple(sacco))
    sacco.remove(x)
    numeriEstratti.append(x)
    return x

while len(sacco) > 0:
    response = input("Estrarre il prossimo numero?")
    if response.upper() == "ESTRATTI":
        print("Numeri estratti:", numeriEstratti)
    else:
        x = estrai()
        print("Ho estratto il numero", x)

print("Hai estratto tutti i numeri dal sacco")

Tombola orientata agli oggetti

Il codice che segue, a differenza di quello precedente scritto con un paradigma di programmazione imperativo procedurale, è stato scritto in maniera OOP, ossia orientato agli oggetti:

from random import choice

class Tombola:

    def __init__(self) -> None:
        self.sacco = set()
        self.numeriEstratti = []
        self.inizializzaSacco()

    def inizializzaSacco(self) -> None:
        """Svuota e popola il sacco di numeri
        """
        self.sacco.clear()
        self.numeriEstratti.clear()
        for n in range(1, 91):
            self.sacco.add(n)

    def estrai(self) -> int:
        """Estrae dal sacco un numero, lo rimuove, inserisce il numero nella lista degli estratti e restituisce il valore

        Returns:
            int: numero estratto
        """
        x = choice(tuple(self.sacco))
        self.sacco.remove(x)
        self.numeriEstratti.append(x)
        return x

    def getEstratti(self):
        """Restituisce la lista dei numeri estratti

        Returns:
            _type_: lista di numeri estratti
        """
        return self.numeriEstratti

    def isEstratto(self, n) -> bool:
        """Resitituisce un booleano a seconda se il numero passato in input è già stato estratto

        Args:
            n (int): numero da verificare

        Returns:
            bool: presenza del numero tra i numeri estratti
        """
        return n in self.numeriEstratti

    def getUltimo(self) -> int:
        """Restituisce l'ultimo numero estratto

        Returns:
            int: ultimo numero estratto
        """
        return self.numeriEstratti[-1]

    def hasNext(self) -> bool:
        """Indica se sono presenti altri numeri da estrarre

        Returns:
            bool: true se il sacco ha ancora elementi
        """
        return len(self.sacco) > 0

if __name__ == "__main__":

    tombola = Tombola()

    while tombola.hasNext():
        response = input("Estrarre il prossimo numero?")
        if response.upper() == "ESTRATTI":
            print("Numeri estratti:", tombola.getEstratti())
        elif response.upper() == "ULTIMO":
            print("Ultimo numero estratto:", tombola.getUltimo())
        elif response.isnumeric():
            s = "è stato estratto" if tombola.isEstratto(int(response)) else "non è stato estratto"
            print(f"Il numero {response} {s}")
        else:
            x = tombola.estrai()
            print(f"Ho estratto il {len(tombola.getEstratti())}° numero {x}")

    print("Hai estratto tutti i numeri dal sacco")

Siti di riferimento ed approfondimento

https://it.wikipedia.org/wiki/Programmazione_orientata_agli_oggetti
https://it.wikipedia.org/wiki/Programmazione_imperativa
https://it.wikipedia.org/wiki/Tombola
https://it.wikipedia.org/wiki/Python

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *