[Python] IA, Match e case.

Gabriele Battaglia iz4apu a libero.it
Sab 15 Giu 2024 00:01:00 CEST


Sera. Voglio condividere con voi una cosa che ho scoperto su Python ed 
il mio entusiasmo per alcune cose che questa IA fa davvero bene.


Chiacchierando con ChatGPT 4o, questa sera ho imparato qualcosa che non 
conoscevo sul mio linguaggio di programmazione preferito.

Ammetto che non leggo quasi mai i what's new di Python e so di sbagliare.


Ad ogni modo, non so cosa ne pensiate voi ma io trovo entusiasmante 
ChatGPT 4o, mi ha spalancato un mondo; probabilmente non sarà così per 
la maggior parte di quelli bravi, alle cui competenze è molto più 
difficile arrivare ma per me è una manna dal cielo.

Non è il primo che provo, seguo la IA da quando i non addetti ai lavori, 
come il sottoscritto, hanno iniziato a sentirne parlare, cos'era? 
Gennaio 2023? Ho provato ovviamente Gemini, GPT3.5 e compagnia, tuttavia 
mi pare che la 4o abbia fatto un bel salto.

Mi piacerebbe leggere qualche vostra riflessione, se ne avete voglia: 
intendo tenendosi stretti al rapporto fra IA e programmazione perchè con 
altre tematiche IA, finiremmo per non uscirne più.


Beh, intanto ditemi, vi piace questa spiegazione?


ChatGPT4o:

L'istruzione `match` e `case` è una nuova funzionalità introdotta in 
Python 3.10, che implementa il concetto di "pattern matching". È simile 
all'istruzione `switch`/`case` presente in altri linguaggi di 
programmazione come C, C++ e Java, ma è più potente e flessibile.
Pattern Matching con `match` e `case`
Il pattern matching consente di confrontare una variabile con una serie 
di modelli (patterns) e di eseguire il codice corrispondente al primo 
modello che corrisponde. Ecco come funziona:
Sintassi di Base
python
def example(value):
     match value:
         case 1:
             print("Value is 1")
         case 2:
             print("Value is 2")
         case 3:
             print("Value is 3")
         case _:
             print("Value is something else")
Spiegazione del Codice
1.
Dichiarazione `match`:
• La variabile `value` viene confrontata con una serie di modelli 
all'interno del blocco `match`.
2.
Dichiarazioni `case`:
• Ogni `case` rappresenta un modello a cui `value` potrebbe corrispondere.
• Se `value` corrisponde al modello specificato, viene eseguito il 
codice all'interno del blocco `case`.
3.
Modello `_`:
• Il modello `_` è un jolly che corrisponde a qualsiasi valore non 
gestito dagli altri `case`.
• È simile all'istruzione `default` in altri linguaggi di programmazione.
Esempi Avanzati
Il pattern matching in Python non si limita ai semplici confronti di 
valori. Può anche essere utilizzato per confrontare strutture dati 
complesse come tuple, liste e dizionari.
Confronto di Tuple
python
def example(value):
     match value:
         case (1, x):
             print(f"Tuple starts with 1, second element is {x}")
         case (2, y):
             print(f"Tuple starts with 2, second element is {y}")
         case _:
             print("Tuple does not match any pattern")
Confronto di Liste
python
def example(value):
     match value:
         case [1, x]:
             print(f"List starts with 1, second element is {x}")
         case [2, y]:
             print(f"List starts with 2, second element is {y}")
         case _:
             print("List does not match any pattern")
Confronto di Dizionari
python
def example(value):
     match value:
         case {"key1": x}:
             print(f"Dictionary contains key 'key1' with value {x}")
         case {"key2": y}:
             print(f"Dictionary contains key 'key2' with value {y}")
         case _:
             print("Dictionary does not match any pattern")
Esempio Applicato alla Tua Richiesta
Nel contesto del tuo progetto, puoi utilizzare `match` e `case` per 
filtrare le partite in base a diversi criteri:
python
def filter_games(games, criterion):
     filtered_games = []
     for game in games:
         match criterion["criterion"]:
             case "white_player":
                 if game.headers['White'] == criterion['value']:
                     filtered_games.append(game)
             case "black_player":
                 if game.headers['Black'] == criterion['value']:
                     filtered_games.append(game)
             case "result":
                 if game.headers['Result'] == criterion['value']:
                     filtered_games.append(game)
             case _:
                 raise ValueError("Unsupported criterion")
     return filtered_games
In questo esempio, il pattern matching viene utilizzato per determinare 
quale criterio utilizzare per filtrare le partite.
Conclusione
Il pattern matching con `match` e `case` in Python 3.10 è una 
funzionalità potente e flessibile che consente di scrivere codice più 
leggibile e conciso per confrontare valori e strutture dati complessi. 
Se stai utilizzando una versione di Python precedente alla 3.10, questa 
funzionalità non sarà disponibile, e dovrai utilizzare costrutti 
alternativi come catene di `if`/`elif`/`else`.
Se hai ulteriori domande o necessiti di ulteriori chiarimenti, fammi sapere!

Gabry: la richiesta era stata qualcosa del genere.

In python, usando la libreria chess, devo caricare un PGN con svariate 
migliaia di partite di scacchi. Mi aiuti a filtrarle in maniera che 
possa ricavarne un sottoinsieme da cui scegliere?


Questa è una parte della risposta. Altrove mi ha spiegato in maniera 
direi perfetta, come caricare il file, visualizzarlo eccetera.

Si sente che sono entusiasta?


Grazie per avermi letto.


-- 
Gabriele Battaglia (IZ4APU)
--... ...--  -.. .  .. --.. ....- .- .--. ..-  - ..-  . .
Sent from my Giant Desktop PC



Maggiori informazioni sulla lista Python