Skillbook Logo
foto profilo

Skill Factory

Categoria: Tutorials


Excel delle meraviglie Lezione 9 - Come estrarre dati da un elenco

Gino Visciano | Skill Factory - 01/06/2020 20:56:58 | in Tutorials

Questa lezione è molto interessante perché imparerete ad estrarre dati da un Elenco, impostando criteri di selezione avanzati, per creare tabelle personalizzate.

Per svolgere questo tipo di attività, nel  foglio di lavoro dovete creare tre aree.

1) Nella prima area dovete inserire l'elenco con i dati, come mostra l'immagine seguente:

2)  Nella seconda area dovete inserire i criteri di selezione, come mostra l'immagine seguente:

3) Nella terza area dovete inserire la tabella di estrazione, come mostra l'immagine seguente:

Attenzione, sotto le tre aree non dovete inserire nulla!

COME CREARE L'AREA DEI CRITERI

Per creare l'area dei CRITERI, procedete nel modo seguente:

1) nella cella P1 scrivete la parola CRITERI;
2) scegliete il menu Home;
3) selezionate le celle da P1 a X1;
4) cliccate sul comando unisci e allinea al centro:

5) Successivamente impostate un colore a piacere, con il comando Colore riempimento;

Per completare l'area dei CRITERI, dovete impostare le colonne in cui inserire i valori da usare per la selezione. Per eseguire questa operazione, procedete nel modo seguente:

1) copiate le celle da A1 ad I1;


 

2) incollate le cella copiate nella cella P3, utilizzando il comando Incolla speciale (Mantieni larghezza colonna origine) come mostra l'immagine seguente:

 

 

COME CREARE L'AREA DI ESTRAZIONE

Per creare l'area di ESTRAZIONE, procedete nel modo seguente:

1) nella cella Z1 scrivete la parola ESTRAZIONE;
2) scegliete il menu Home;
3) selezionate le celle da Z1 ad AK1;
4) cliccate sul comando unisci e allinea al centro:

5) Successivamente impostate un colore a piacere, con il comando Colore riempimento;

Per completare l'area di ESTRAZIONE, dovete copiare tutte  le colonne dell'elenco da A1 a L1 ed incollarle in Z3,  con il comando Incolla speciale (Mantieni larghezza colonna origine) come mostra l'immagine seguente:

 

 

LABORATORIO 01

A. CREARE UNA TABELLA CON TUTTE LE DIPENDENTI LAUREATE

1) Inserite un nuovo foglio di lavoro, come indica l'immagine seguente:

  

2) Doppio click sul nome del nuovo foglio ed inserite il nome Dipendenti Laureate, come mostra l'immagine seguente:

3) Nell'area dei criteri impostate la colonna Sesso=Femmina e Titolo di studio=Laurea, come mostra l'immagine seguente:

3) Posizionate il cursore nella cella A1, selezionate il menu Dati e cliccate sul comando Avanzate, come mostra l'immagine seguente:

4) Nella scheda Filtro avanzato, selezionate l'opzione Copia in un'altra posizione ed inserite le coordinate dell'elenco, dell'area dei criteri, inclusa la riga in cui avete inserito le condizioni e dell'area di estrazione, includendo solo i nomi delle colonne, come mostra l'immagine seguente:

   

Per ottenere le coordinate delle tre aree potete anche usare il mouse. Cliccate sulla freccia a destra delle caselle di testo e selezionate con il mouse l'area corrispondente, come mostra l'immagine seguente:

5) Per eseguire l'estrazione cliccate sul pulsante "OK". Tutti i dipendenti che soddisfano i criteri di selezione verranno aggiunti nell'area di estrazione, come mostra l'immagine seguente:

Per completare il laboratorio copiate tutta la tabella nel foglio di lavoro Dipendenti laureate, come mostra l'immagine seguente:

B. ESTRARRE TUTTI PROGRAMMATORI DIPLOMATI

1) Nell'area dei criteri impostate la colonna Titolo di studio=Diploma e Ruolo aziendale=Programmatore, come mostra l'immagine seguente:

2) Posizionate il cursore nella cella A1, Selezionate il menu Dati e cliccate sul comando Avanzate;

3) Nella scheda Filtro avanzato, selezionate l'opzione Copia in un'altra posizione, controllate se le coordinate sono esatte e cliccate sul pulsante "OK", per estrarre i dati.

 

COME IMPOSTARE CRITERI PERSONALIZZATI AVANZATI

L'area dei CRITERI può contenere molte altre sezioni dove inserire condizioni per l'estrazione dei dati. Questa esigenza nasce quando volete applicare condizioni complesse che richiedono l'uso degli operatori logici AND ed OR.

Ricordate che se più condizioni sono associate da una logica AND il dato viene estratto se solo se tutte le condizioni sono vere.

Ad esempio per estrarre tutti i dipendenti con uno stipendio maggiore di 1800,00 e minore di 3000,00 euro dovete utilizzare una logica AND, perché tutte è due le condizioni devono essere soddisfatte:

Stipendio>1800 AND Stipendio<3000. 

In Excel per associare più condizioni con un operatore logico AND basta impostare le condizioni nel modo seguente:

Se più condizioni sono associate da una logica OR il dato viene estratto se almeno una delle condizioni è vera.

Ad esempio per estrarre i dipendenti di Milano, Napoli oppure Potenza dovete usare una logica OR, perché basta che almeno una delle condizioni sia esatta:

Città=Milano OR Città=Napoli OR Città=Potenza.

In Excel per associare più condizioni con un operatore logico OR basta impostare le condizioni nel modo seguente:

Potete anche associare tra loro più condizioni utilizzando contemporaneamente operatori logici AND ed OR. Ad esempio immaginate di voler estrarre dall'elenco  i dipendenti di Milano, Napoli oppure Potenza, Programmatori Laureati. Per ottenere questo risultato dovete applicare la condizione seguente:

(Città=Milano AND Titolo di studio=Laurea AND Ruolo Aziendale=Programmatore) OR (Città=Napoli AND Titolo di studio=Laurea AND Ruolo Aziendale=Programmatore) OR (Città=Potenza AND Titolo di studio=Laurea AND Ruolo Aziendale=Programmatore).

Questa condizione in Excel può essere impostata nel modo seguente: 

 

LABORATORIO 02

A. ESTRARRE DALL'ELENCO TUTTI I DIPENDENTI CHE HANNO UNO STIPENDIO MAGGIORE DI €1800,00 E MINORE DI €3000,00

Per svolgere questo laboratorio, nell'area dei CRITERI dovete inserire la condizione seguente:

 

Per estrarre i dati, posizionate il cursore nella cella A1, selezionate il menu Dati e cliccate sul comando Avanzate.

Nella scheda Filtro avanzato, selezionate l'opzione Copia in un'altra posizione ed inserite:
1) le coordinate dell'elenco;
2) le coordinate dell'area dei criteri che corrisponde alla condizione inserita;
3) le coordinate della riga d'intestazione nell'area di estrazione.

Alla fine cliccate sul pulsante "OK".

Le immagini seguenti mostrano le informazioni da inserire nella scheda Filtro avanzato ed il risultato dell'estrazione:

 

B. ESTRARRE DALL'ELENCO TUTTI I DIPENDENTI CHE HANNO UNO STIPENDIO MAGGIORE DI €1800,00 E MINORE DI €3000,00 E SONO FORMATORI

Per svolgere questo laboratorio, nell'area dei CRITERI dovete inserire la condizione seguente:

 

Per estrarre i dati, posizionate il cursore nella cella A1, selezionate il menu Dati e cliccate sul comando Avanzate.

Nella scheda Filtro avanzato, selezionate l'opzione Copia in un'altra posizione ed inserite:
1) le coordinate dell'elenco;
2) le coordinate dell'area dei criteri che corrisponde alla condizione inserita;
3) le coordinate della riga d'intestazione nell'area di estrazione.

Alla fine cliccate sul pulsante "OK".

Le immagini seguenti mostrano le informazioni da inserire nella scheda Filtro avanzato ed il risultato dell'estrazione:

C. ESTRARRE DALL'ELENCO TUTTI I DIPENDENTI CHE HANNO UNO STIPENDIO MAGGIORE DI €1800,00 E MINORE DI €3000,00 E SONO FORMATORI OPPURE PROJECT MANAGER

Per svolgere questo laboratorio, nell'area dei CRITERI dovete inserire la condizione seguente:

 

Per estrarre i dati, posizionate il cursore nella cella A1, selezionate il menu Dati e cliccate sul comando Avanzate.

Nella scheda Filtro avanzato, selezionate l'opzione Copia in un'altra posizione ed inserite:
1) le coordinate dell'elenco;
2) le coordinate dell'area dei criteri che corrisponde alla condizione inserita;
3) le coordinate della riga d'intestazione nell'area di estrazione.

Alla fine cliccate sul pulsante "OK".

Le immagini seguenti mostrano le informazioni da inserire nella scheda Filtro avanzato ed il risultato dell'estrazione:

D. ESTRARRE DALL'ELENCO TUTTI I DIPENDENTI DI MILANO, NAPOLI OPPURE POTENZA CHE SONO PROGRAMMATORI E LAUREATI

Per svolgere questo laboratorio, nell'area dei CRITERI dovete inserire la condizione seguente:

 

Per estrarre i dati, posizionate il cursore nella cella A1, selezionate il menu Dati e cliccate sul comando Avanzate.

Nella scheda Filtro avanzato, selezionate l'opzione Copia in un'altra posizione ed inserite:
1) le coordinate dell'elenco;
2) le coordinate dell'area dei criteri che corrisponde alla condizione inserita;
3) le coordinate della riga d'intestazione nell'area di estrazione.

Alla fine cliccate sul pulsante "OK".

Le immagini seguenti mostrano le informazioni da inserire nella scheda Filtro avanzato ed il risultato dell'estrazione:

 

COME ESTRARRE UNA COPIA UNIVICA DEI RECORD DA UN ELENCO

Due o più record sono uguali se contengono le stesse informazioni in tutte le colonne, la copia univoca dei record è La funzionalità che permette di estrarre da un elenco solo record distinti, eliminando i duplicati.

Nell'elenco seguente i record con matricola A001, A002 e A003 sono duplicati.

L'esempio seguente mostra la copia univoca dei record presenti nell'elenco precedente:

Questa funzionalità in Excel può essere applicata anche solo ad una o più colonne e questo permette di estrarre da un elenco informazioni molto utili.

Ad esempio, applicando la copia univoca dei record all'Elenco dei dipendenti, agendo solo su una o più colonne, è possibile  estrarre, escludendo i duplicati, le seguenti informazioni:

1) Le città dei dipendenti;
2) I ruoli aziendali dei dipendenti;
3) I titoli di studio dei dipendenti.

Inoltre potreste confrontare gli stipendi dei dipendenti in relazione al loro ruolo aziendale oppure in relazione al ruolo aziendale, al titolo di studio ed al sesso.

LABORATORIO 03

A. ESTRARRE DALL'ELENCO UNA COPIA UNIVOCA DELLE CITTA' DEI DIPENDENTI

1) Lasciando le intestazioni, pulite l'area dei CRITERI e l'area di ESTRAZIONE
2) Nell'area dei CRITERI, in corrispondenza della colonna CITTA' inserite come condizione un asterisco
3) Posizionate il cursore all'inizio dell'elenco dipendenti nella colonna matricola (cella A1)
4) Selezionate il menu Dati e cliccate sul comando Avanzate
5) Nella scheda Filtro avanzato, selezionate l'opzione Copia in un'altra posizione ed inserite:
a) le coordinate dell'elenco;
b) le coordinate dell'area dei criteri che corrisponde alla colonna città e la cella in cui avete inserito l'asterisco;
c) le coordinate della colonna città nella riga d'intestazione nell'area di estrazione.

Alla fine, spuntate la voce Copia univoca dei record e cliccate sul pulsante "OK".

Le immagini seguenti mostrano le informazioni da inserire nella scheda Filtro avanzato ed il risultato dell'estrazione:

B. ESTRARRE DALL'ELENCO UNA COPIA UNIVOCA DEI RUOLI AZIENDALI DEI DIPENDENTI

1) Lasciando le intestazioni, pulite l'area dei CRITERI e l'area di ESTRAZIONE
2) Nell'area dei CRITERI, in corrispondenza della colonna RUOLO AZIENDALE inserite come condizione un asterisco
3) Posizionate il cursore all'inizio dell'elenco dipendenti nella colonna matricola (cella A1)
4) Selezionate il menu Dati e cliccate sul comando Avanzate
5) Nella scheda Filtro avanzato, selezionate l'opzione Copia in un'altra posizione ed inserite:
a) le coordinate dell'elenco;
b) le coordinate dell'area dei criteri che corrisponde alla colonna città e la cella in cui avete inserito l'asterisco;
c) le coordinate della colonna città nella riga d'intestazione nell'area di estrazione.

Alla fine, spuntate la voce Copia univoca dei record e cliccate sul pulsante "OK".

Le immagini seguenti mostrano le informazioni da inserire nella scheda Filtro avanzato ed il risultato dell'estrazione:

C. ESTRARRE DALL'ELENCO UNA COPIA UNIVOCA DEI TITOLI DI STUDIO DEI DIPENDENTI

1) Lasciando le intestazioni, pulite l'area dei CRITERI e l'area di ESTRAZIONE
2) Nell'area dei CRITERI, in corrispondenza della colonna TITOLO DI STUDIO inserite come condizione un asterisco
3) Posizionate il cursore all'inizio dell'elenco dipendenti nella colonna matricola (cella A1)
4) Selezionate il menu Dati e cliccate sul comando Avanzate
5) Nella scheda Filtro avanzato, selezionate l'opzione Copia in un'altra posizione ed inserite:
a) le coordinate dell'elenco;
b) le coordinate dell'area dei criteri che corrisponde alla colonna città e la cella in cui avete inserito l'asterisco;
c) le coordinate della colonna città nella riga d'intestazione nell'area di estrazione.

Alla fine, spuntate la voce Copia univoca dei record e cliccate sul pulsante "OK".

Le immagini seguenti mostrano le informazioni da inserire nella scheda Filtro avanzato ed il risultato dell'estrazione:

D. ESTRARRE DALL'ELENCO DEI DIPENDENTI UNA COPIA UNIVOCA DELLE SEGUENTI INFORMAZIONI: SESSO, TITOLI DI STUDIO, RUOLI AZIENDALI E STIPENDI

1) Lasciando le intestazioni, pulite l'area dei CRITERI e l'area di ESTRAZIONE
2) Nell'area dei CRITERI, in corrispondenza delle colonne  SESSO, TITOLO DI STUDIO e RUOLO AZIENDALE  inserite come condizione un asterisco
3) Posizionate il cursore all'inizio dell'elenco dipendenti nella colonna matricola (cella A1)
4) Selezionate il menu Dati e cliccate sul comando Avanzate
5) Nella scheda Filtro avanzato, selezionate l'opzione Copia in un'altra posizione ed inserite:
a) le coordinate dell'elenco;
b) le coordinate dell'area dei criteri che corrisponde alla colonna città e la cella in cui avete inserito l'asterisco;
c) le coordinate della colonna città nella riga d'intestazione nell'area di estrazione.

Alla fine, spuntate la voce Copia univoca dei record e cliccate sul pulsante "OK".

Le immagini seguenti mostrano le informazioni da inserire nella scheda Filtro avanzato ed il risultato dell'estrazione:

Nella prossima lezione imparerete a creare un cruscotto con informazioni statistiche per il supporto decisionale.


Per il download del file excel GestioneDipendenti.xlsx in formato zip clicca qui.


<< Lezione precedente           Lezione successiva >> |  Vai alla prima lezione


T U T O R I A L S    S U G G E R I T I


Per informazioni e contatti: www.skillfactory.it


EDUCATIONAL GAMING BOOK (EGB) "H2O"

Nell'era dello SMART LEARNING e di PYTHON i libri non si scrivono, ma si sviluppano, in questo modo chi studia, può sperimentare ed apprendere contemporaneamente; un libro con queste caratteristiche lo possiamo definire un  Educational Gaming Book (EGB).

"H2Oè un EGB che descrive tutte le caratteristiche dell'acqua, la sostanza formata da molecole di H2O, che attraverso il suo ciclo di vita garantisce la sopravvivenza di tutti gli esseri viventi del Pianeta

L'obiettivo dell'EGB è quello di far conoscere ai giovani le proprietà dell'acqua, sotto molti aspetti uniche, per sensibilizzarli a salvaguardare un bene comune raro, indispensabile per la vita


Per il DOWNLOAD di "H2Oclicca qui.


 

Share Button

Excel delle meraviglie Lezione 8 - Come lavorare con le Macro

Gino Visciano | Skill Factory - 28/05/2020 08:58:45 | in Tutorials

In questa lezione imparerete a lavorare con le Macro per automatizzare qualunque operazione fatta con il foglio elettronico.

Excel permette di creare applicazioni con il linguaggio Visual Basic, una Macro non è altro che la registrazione di tutti i comandi Visual Basic che servono per eseguire le operazioni richieste.

Per registrare una Macro dovete attivare il menu Sviluppo procedendo nel modo seguente:

1) Cliccate sul menu File in alto a sinistra;
2) Selezionate il comando Opzioni, che appare in basso a sinistra;
3) Nella scheda Opzioni di Excel, selezionate l'opzione Personalizzazione barra multifunzione;
4) Nella lista a destra aggiungete una spunta al menu Sviluppo, come mostra l'immagine seguente:

Dopo questa operazione tra le schede menu dovrebbe apparire la scheda Sviluppo, come mostra l'immagine seguente:

Nella prima sezione a sinistra trovate tutti i comandi per lavorare con le Macro.

 

COME REGISTRARE UNA MACRO
Prima di registrare una Macro dovete avere ben chiare tutte le operazioni che servono per svolgere l'attività richiesta, vi suggerisco di provare prima tutte le operazioni da associare alla Macro e solo successivamente procedere con la registrazione.

Nel nostro primo esempio, creiamo una Macro per ordinare l'elenco dei dipendeneti per Cognome, Nome ed Età:

1) Selezionate il menu Sviluppo e cliccate sul comando Registra macro, indicato nell'immagine seguente:

2) Nella scheda Registra macro inserite il nome della macro e come Tasto di scelta rapida inserite la lettera a, come mostra l'immagine seguente:

3) Per iniziare la registrazione cliccate sul pulsante OK.

Da questo momento in poi tutte le operazioni che farete verranno registrate dalla Macro, quindi attenti a non sbagliare, altrimenti dovrete cancellare la Macro e ripetere tutte le operazioni di nuovo.

Durante la registrazione per ordinare l'elenco dei dipendenti  procedete nel modo seguente:

1) Posizionate il cursore sulla riga d'intestazione dell'elenco, nella prima colonna;
2) Selezionate il menu dati e cliccate sull'icona ordina, indicata di seguito:

3)  Nella casella di selezione "Ordina per", scegliete la colonna cognome;

4) Successivamente per aggiungere anche le altre chiavi di ordinamento, usate il pulsante "+Aggiungi livello", come mostra l'immagine seguente:

    
 

5) Per ogni chiave impostate l'ordine a destra ed infine cliccate sul pulsante "OK".

A questo punto potete interrompere la registrazione, selezionando di nuovo il menu Sviluppo e cliccando sul comando interrompi registrazione, indicato nell'immagine seguente:

Per verificare se la Macro è stata registrata cliccate sul comando macro, indicato nell'immagine seguente:

Viene visualizzata la scheda Macro che permette di gestire tutte le Macro create, ad esempio le potete sia eseguire, sia eliminare.

Per eseguire una Macro senza aprire la scheda Macro , potete usare i Tasti di scelta rapida, ad esempio per eseguire la Macro appena creata dovete premere contemporaneamente i tasti ctrl a

Nel secondo esempio creiamo la Macro SommaPerRuoloAziendale.

1) Selezionate il menu Sviluppo e cliccate sul comando Registra macro:

2) Nella scheda Registra macro inserite il nome della macro e come tasto di scelta rapida inserite la lettera b, come mostra l'immagine seguente:

3) Per iniziare la registrazione cliccate sul pulsante OK.

Ricordate che da questo momento in poi qualunque operazione fate verrà registrata, quindi procedete nel modo seguente:

1) Prima di tutto dovete ordinare l'elenco impostando come chiave di ordinamento la colonna Ruolo Aziendale, come mostra l'immagine seguente:
 
 
2) Successivamente selezionate l'icona subtotale:
 
 
3) Impostate la chiave di raggruppamento , la funzione somma e la colonna a cui applicare il subtotale, come mostra l'immagine seguente:
 
 
4) Per completare l'operazione cliccate sul pulsante "OK".
 
A questo punto potete interrompere la registrazione, selezionando di nuovo il menu Sviluppo e cliccando sul comando interrompi registrazione:

Per eseguire la Macro basta aprire la scheda Macro:

selezionarla e cliccare sul pulsante esegui come mostra l'immagine seguente:

Per eseguire la Macro appena creata, senza aprire la scheda Macro, potete usare i Tasti di scelta rapida  ctrl b.  

 

COME SALVARE UNA CARTELLA CHE CONTIENE MACRO
Per motivi di sicurezza, una cartella che contiene Macro bisogna salvarla nel formato "Cartella di lavoro con attivazione macro di Excel", come mostra l'immagine seguente:

 Un file che contiene Macro  viene salvato con l'estension xlsm, a differenza di un file di Excel normale che ha l'estensione xlsx.

 

COME ASSOCIARE UNA MACRO AD UN PULSANTE

Per eseguire una Macro velocemente, oltre ai Tasti di scelta rapida, potete anche associare la  Macro ad un pulsante.
 
Per associare una Macro ad un pulsante comando, dovete eseguire le seguenti operazioni:
 
1) Selezionate il menu Sviluppo e cliccate sul comando Modalità progettazione:
 
 
Assicuratevi che lo sfondo del comando sia grigio, solo in questo caso la modalità è stata attivata.
 
2) Successivamente cliccate sul comando Inserisci e scegliete il Pulsante (Controllo modulo)  come mostra l'immagine seguente:
 
 
3) Disegnate il pulsante nel foglio di calcolo e quando vi viene richiesto associategli la Macro che volete eseguire, come mostra l'immagine seguente:
 
 
 
4)  Per verificare se la Macro è stata associata correttamente oppure per scegliere una Macro diversa, posizionate il puntatore del mouse sul pulsante, premete il tasto destro e selezionate il comando Assegna macro:
 
 
 
5) Infine per modificare il nome del pulsante, aprite di nuovo il menu precedente e selezionate Modifica testo.
 
Per concludere, cliccate di nuovo sul comando Modalità progettazione, per disattivare questa funzionalità.  
 
Attenzione la modalità è disattiva se lo sfondo del comando è bianco.
 
Inoltre ricordate che tutte le volte che dovete modificare un pulsante macro, bisogna riattivare la  Modalità progettazione
 
 
COME CREARE UN PANNELLO DI CONTROLLO PER GESTIRE L'ELENCO DEI DIPENDENTI
In questo laboratorio creiamo un Pannello di controllo per automatizzare alcune operazioni per la gestione dell'elenco dipendenti.
 
 Per svolgere questo laboratorio servono quattro Macro:
 
 
Le prime due Macro le avete già create negli esempi precedenti, quindi dovete registrare solo le MacroRimuoviSomma e OrdinaPerMatricola.
 
La Macro RimuoviSomma serve per disattivare i subtotali inseriti nel foglio di calcolo per calcolare la somma degli stipendi dei dipendenti raggruppati per Ruolo aziendale.
 
Per creare questa  Macro dal menu Sviluppo avviate registrazione Macro:
 
 
inserite il nome (RimuoviSomma) ed il Tasto di scelta rapida c. Successivamente posizionate il cursore nella prima colonna della riga d'intestazione dell'elenco dipendenti e dopo aver selezionato il menu Dati, cliccate sul comando Subtotale:
 
 
Per completare l'operazione di registrazione cliccate sul pulsante Rimuovi tutti
 
 
poi spostatevi di nuovo sul menu Sviluppo ed interrompete la registrazione:
 
 
La Macro OrdinaPerMatricola serve per ripristinare l'ordinamento iniziale dell'elenco dipendenti, per creare questa Macro dovete eseguire le stesse operazioni fatte per creare la macro  OrdinaPerCognomeNomeEta, assegnategli come Tasto di scelta rapida la lettera d.
 
Un volta che le quattro Macro sono pronte, per creare il Pannello di controllo, dovete creare quattro pulsanti di comando, come avete visto nel capitolo precedente ed associare ad ogni pulsante la Macro  corrispondente.
 
Alla fine il risultato che si ottiene è il seguente:
 
 
Nella prossima lezione imparerete ad estrarre da un elenco di dati solo le informzioni che vi servono per creare nuovi elenchi con dati personalizzati. 
 

Per il download del file excel GestioneDipendenti.xlsm in formato zip clicca qui.


<< Lezione precedente           Lezione successiva >> |  Vai alla prima lezione


T U T O R I A L S    S U G G E R I T I


EDUCATIONAL GAMING BOOK (EGB) "H2O"

Nell'era dello SMART LEARNING e di PYTHON i libri non si scrivono, ma si sviluppano, in questo modo chi studia, può sperimentare ed apprendere contemporaneamente; un libro con queste caratteristiche lo possiamo definire un  Educational Gaming Book (EGB).

"H2Oè un EGB che descrive tutte le caratteristiche dell'acqua, la sostanza formata da molecole di H2O, che attraverso il suo ciclo di vita garantisce la sopravvivenza di tutti gli esseri viventi del Pianeta

L'obiettivo dell'EGB è quello di far conoscere ai giovani le proprietà dell'acqua, sotto molti aspetti uniche, per sensibilizzarli a salvaguardare un bene comune raro, indispensabile per la vita


Per il DOWNLOAD di "H2Oclicca qui.


 

Share Button

Excel delle Meraviglie Lezione 7 - Come lavorare con un elenco di dati

Gino Visciano | Skill Factory - 13/05/2020 00:18:01 | in Tutorials

In questa lezione imparerete a lavorare con un elenco di dati utilizzando i comandi del menu Dati

Per creare un elenco d'informazioni, è importante rispettare le seguenti regole:

1) l'elenco deve avere sempre una riga d'intestazione con i nomi delle colonne;
2) l'elenco dev'essere compatto, senza righe e colonne vuote;
3) se è possibile, iniziare  l'elenco partendo dalla cella A1;
4) se 
è possibile, dedicare l'intero foglio di lavoro per la gestione dei dati dell'elenco, soprattutto se sono tanti;
5) a parte la riga d'intestazione, non inserire bordi al contenuto dell'elenco.

L'immagine seguente mostra un esempio di elenco di dati.

Come ordinare i dati di un elenco

Prima di procedere con l'ordinamento dei dati dell'elenco, dovete decidere quali sono le chiavi da utilizzare per l'ordinamento.

In questo esempio le chiavi potrebbero essere le seguenti:

A) Cognome, Nome ed Età;
B) Titolo di Studio, Cognome, Nome ed Età;
C) Città, Cognome, Nome ed Età;
D) Sesso, Cognome, Nome ed Età;
E) Ruolo Aziendale, Cognome, Nome ed Età;
F) Matricola.

La prima chiave si chiama primaria, perché l'elenco viene prima ordinato utilizzando questa chiave.
Se dopo l'ordinamento, in alcune righe  la chiave primaria si ripete, queste righe vengono ordinate utilizzando la chiave seguente e così via fin quando l'elenco non risulta ordinato in base a tutte le chiavi indicate.

Attenzione se la chiave primaria di ordinamento non si ripete mai, come accade nel nostro esempio per la matricola, è inutile indicare ulteriori chiavi di ordinamento.

Una volta individuate la chiavi da utilizzare per l'ordinamento potete procedere nel modo seguente:

1) Posizionate il cursore sulla riga d'intestazione dell'elenco, nella prima colonna;
2) Selezionate il menu dati e cliccate sull'icona ordina, indicata di seguito:

3)  Nella casella di selezione "Ordina per", scegliete la colonna cognome;

4) Successivamente per aggiungere anche le altre chiavi di ordinamento, usate il pulsante "+Aggiungi livello, come mostra l'immagine seguente:

   
 

5) Per ogni chiave impostate l'ordine a destra e cliccate sul pulsante "OK".

Per ordinare l'elenco con chiavi di ordinamento diverse, procedete nel modo seguente:

1) Posizionate il cursore sulla riga d'intestazione dell'elenco, nella prima colonna;
2) Selezionate il menu dati e cliccate sull'icona ordina, indicata di seguito:

3) Utilizzare il pulsate:



per eliminare le chiavi precedenti ed aggiungete le nuove chiavi di ordinamento.

Come filtrare i dati di un elenco

Per filtrare i dati di un elenco dovete prima decidere quali sono le condizioni da impostare nelle colonne.
 
Ad esempio immaginate di voler selezionare solo i dipendenti con le seguenti caratteristiche:
 
A) Sesso: Femmina;
B) Città: Potenza;
C) Titolo di studio: Laurea;
 
Per ottenere questo risultato procedete nel modo seguente:
 
1) Posizionate il cursore sulla riga d'intestazione dell'elenco, nella prima colonna;
2) Selezionate il menu dati e cliccate sull'icona filtro, indicata di seguito:
 
 
3) Sulla destra di ogni colonna apparirà una freccia, utilizzare  le frecce per impostare le condizioni filtro, come mostrano le immagini seguenti:
 
 
Per selezionare una sola opzione, cliccate su Seleziona tutto, per togliere tutte le spunte e successivamente cliccate sulla condizione che serve.
Se è necessario, nello stesso elenco potete anche scegliere più condizioni, in questo caso verranno visualizzate solo le righe che nella colonna filtro contengono una delle voci spuntate.   
Più condizioni impostate sulla stessa colonna vengono associate tra loro con un operatore logico di tipo OR,  ad esempio:
 
Città="Potenza" OR Città="Napoli;
 
Quando le condizioni sono associate con un operatore logico di tipo OR, la riga viene visualizzata se almeno una delle condizioni indicate è vera.
 
 
Man mano che aggiungete nuovi filtri ad altre colonne, le condizioni vendono aggiunte alle precedenti attraverso un operatore logico di tipo AND, filtrando  un maggior numero righe dell'elenco.
 
Quando le condizioni sono associate con un operatore logico di tipo AND, la riga viene visualizzata solo se tutte le condizioni indicate sono vere.
 
 
In questo esempio è come se avessimo impostato la condizione logica seguente:
 
Titolo di studio="Laurea" AND sesso="Femmina" AND Città="Potenza".
 
Per eliminare i filtri applicati, cliccate sull'icona filtro, indicata di seguito:
 
 
Nell'esempio seguente imparerete a selezionare le righe di un elenco in base ad un intervallo di valori.
 
Immaginate di voler selezionare tutti i dipendenti che hanno uno stipendio maggiore di €1200.00 e minore di €3000.00, in base alla condizione seguente:
 
Stipendio>1200.00 AND Stipendio<3000.00.
 
Per ottenere questo risultato procedete nel modo seguente:
 
1) Posizionate il cursore sulla riga d'intestazione dell'elenco, nella prima colonna;
2) Selezionate il menu dati e cliccate sull'icona filtro, indicata di seguito:
 

3) Sulla destra di ogni colonna apparirà una freccia, cliccate sulla freccia corrispondente alla colonna Stipendio e scegliete le opzioni seguenti:
 
 
4)  Successivamente completate la scheda seguente e cliccate sul pulsante OK.
 
 
Come impostare un subtotale in un elenco di dati
 
Per impostare un subtotale in un elenco di dati, dovete prima rispondere alle seguenti domande:
 
1) Qual è la chiave di raggruppamento;
2) Che funzione applicare al subtotale, ad esempio: somma, conteggio, media, min, max, prodotto, etc..
3) Qual è la colonna a cui applicare la funzione per il calcolo del subtotale.
 
Ad esempio, immaginate di voler ottenere il totale degli stipendi, raggruppando i dipendenti per ruolo aziendale.
 
1) Prima di tutto dovete ordinare l'elenco impostando come chiave di ordinamento la colonna Ruolo Aziendale, come mostra l'immagine seguente:
 
 
2) Successivamente selezionate l'icona subtotale:
 
 
3) Impostate la chiave di raggruppamento , la funzione somma e la colonna a cui applicare il subtotale, come mostra l'immagine seguente:
 
 
L'immagine seguente mostra l'elenco dati con i subtotali richiesti:
 
 
Per eliminare dall'elenco dati i subtotali cliccate sul pulsante "Rimuovi tutti", in basso a sinistra della finestra dei Subtotali.
 
Nella prossima lezione utilizzeremo delle macro per applicare con un semplice click gli ordinamenti, i filtri ed i subtotali visti in questa lezione.

Per il download del file excel GestioneDipendenti.xlsx clicca qui.


<< Lezione precedente           Lezione successiva >>


T U T O R I A L S    S U G G E R I T I


Share Button

Impariamo Python creando il "Calendario Perpetuo" - Lezione 7

Gino Visciano | Skill Factory - 30/01/2020 23:29:56 | in Tutorials

In questa lezione creiamo un Calendario perpetuo,  per ricavare il giorno della settimana di qualsiasi data

L'algoritmo per creare un calendario perpetuo richiede le seguenti informazioni:

1) Codice dell'anno
2) Codice del mese
3) Numero del giorno della settimana
4) Se l'anno è Bisestile oppure no

Come calcolare il Codice dell'anno

Per calcolare Il codice dell'anno bisogna prima ottenere le due cifre a destra dell'anno scelto, ad esempio per l'anno 2019 serve il 19, che per comodità indichiamo con aa.

In Python per ottenere aa possiamo usare il comando seguente:

aa=int(str(anno)[2:])

La funzione str(...) converte la variabile intera anno  in stringa, mentre con [2:] indichiamo a Python di eliminare dalla stringa i due caratteri a sinistra. Infine i due caratteri che restano vengono di nuovo convertiti in intero ed assgnati alla variabile aa.

Successivamente dobbiamo calcolare il codice_anno_intermedio che è dato dalla formula:

codice_anno_intermedio=aa+int(aa/4)

Infine per ottenere il codice_anno occorre sottrarre al codice_anno_intermedio il suo multiplo di 7 più piccolo, come mostra la formula seguente:

codice_anno=codice_anno_intermedio-int(codice_anno_intermedio/7)*7.

Facciamo un esempio, calcoliamo il codice anno del 2019:

1) aa=19

2) codice_anno_intermendio=aa+int(aa/4)=19+4=23

3) codice_anno=codice_anno_intermedio-int(codice_anno_intermedio/7)*7=23-21=2

 

Come ottenere il Codice del mese

Il codice del mese è un valore intero difficile da calcolare, fortunatmente c'è già chi l'ha fatto per noi, quindi basta guardare semplicemente i risultati ottenuti: 

1)   gennaio = 6 se l'anno è bisestile 5
2)   febbraio =  2 se l'anno è bisestile 1
3)   marzo = 2
4)   aprile = 5
5)   maggio = 0
6)   giuugno = 3
7)   luglio = 5
8)   agosto = 1
9)   settembre = 4
10) ottobre = 6
11) novembre = 2
12) dicembre = 4

Come potete vedere per ottenere il codice del mese è importante sapere se l'anno di riferimento è bisestile.

Come verificare se un anno è bisestile

Nel calendario Gregoriano è bisestile un anno ogni 4. Questa correzione è necessaria perché astronomicamente un anno dura circa 365,25 giorni.
Un anno è bisestile nei casi seguenti:
 
1) se l'anno è divisibile contemporaneamente per 100 e per 400;
 
2) se l'anno è divisibile per 4
 
In Python per verificare se un anno è bisestile possiamo usare la funzione seguente:
 

def verificaBisestile(anno):
    bisestile=False
    if anno%100==0:
        if anno%400==0:
            bisestile=True
    elif anno%4==0:
            bisestile=True
    return bisestile

In questa funzione l'opertore % (modulo) permette di capire se l'anno è divisibile prima per 100 e poi per 400 oppure se è divisibile direttamente per 4.

Come calcolare il numero del giorno
Il numero del giorno corrisponde al giorno della settimana di una data qualunque del calendario, come mostra la tabella seguente:

1) Lunedì = 1
2) Martedì = 2
3) Meercoledì = 3
4) Giovedì = 4
5) Venerdì = 5
6) Sabato = 6
7) Domenica = 7 oppure 0

La formula per calcolare il numero del giorno è la seguente:

Numero giorno = (Codice anno + Codice Mese + Progressivo giorno del mese)%7

Facciamo un esempio, con un anno non bisestile ed uno bisestile:

Esempio 1

Il 18 marzo 2019, corrisponde ad un  lunedì, per verificare calcolare il numero del giorno:

1) aa=19

2) codice_anno_intermendio=aa+int(aa/4)=19+4=23

3) codice_anno=codice_anno_intermedio-int(codice_anno_intermedio/7)*7=23-21=2

4) codice_mese=2

5) Numero giorno = (Codice anno + Codice Mese + Progressivo giorno del mese)%7 = (2+2+18)%7=1

6) Il numero giorno 1 corrisponde a lunedì

Esempio 2

Il 10 gennaio 2020, corrisponde ad un venerdì, per verificare calcolare il numero del giorno:

1) aa=20

2) codice_anno_intermendio=aa+int(aa/4)=20+5=25

3) codice_anno=codice_anno_intermedio-int(codice_anno_intermedio/7)*7=25-21=4

4) codice_mese=5 perché l'anno 2020 è bisestile

5) Numero giorno = (Codice anno + Codice Mese + Progressivo giorno del mese)%7 = (4+5+10)%7=5

6) Il numero giorno 5 corrisponde a venerdi


In Python per ottenere il numero del giorno della settimana di una data qualunque del calendario, possiamo usare la funzione seguente:

def giornoSettimana(gg,mm,aaaa):
    aa=int(str(aaaa)[2:])
    codici_mesi=[6,2,2,5,0,3,5,1,4,6,2,4]
    if verificaBisestile(aaaa)==True:
       codici_mesi=[5,1,2,5,0,3,5,1,4,6,2,4]
    codice_anno_intermedio=(aa+int(aa/4))
    codice_anno=codice_anno_intermedio-int(codice_anno_intermedio/7)*7
    giorno=(codice_anno+codici_mesi[mm-1]+gg)%7
    return giorno

Analisi del codice Python

# Calendario perpetuo

import tkinter as tk # Classe che permette di creare GUI
from PIL import Image, ImageTk # Classi per gestire immagini
import time # Classe che permette di gestire il tempo
  
# Funzione che calcola il numero del giorno della settimana
def giornoSettimana(gg,mm,aaaa):
    aa=int(str(aaaa)[2:])
    codici_mesi=[6,2,2,5,0,3,5,1,4,6,2,4]
    if verificaBisestile(aaaa)==True:
       codici_mesi=[5,1,2,5,0,3,5,1,4,6,2,4]
    codice_anno_intermedio=(aa+int(aa/4))
    codice_anno=codice_anno_intermedio-int(codice_anno_intermedio/7)*7
    giorno=(codice_anno+codici_mesi[mm-1]+gg)%7
    return giorno  
  
# Funzione che stampa i mesi dell'anno scelto
def stampaGiorni(mm,aaaa):
    mesi=["Gennaio", "Febbraio", "Marzo", "Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"]
    giorni=[31, 28, 31, 30,31,30,31,31,30,31,30,31]
    if mm==2:
       if verificaBisestile(aaaa)==True:
          giorni[1]=29 # Imposta il mese di febbraio a 29 giorni se l'anno è bisestile
    conta=0
    titolo=mesi[mm-1]+" "+str(aaaa)
    centra="          "[:10-int(len(titolo)/2)]
    T2.insert(tk.END, '\n'+centra+titolo+'\n')
    T2.insert(tk.END, " Lu Ma Me Gi Ve Sa Do\n")
    gg_settimana=giornoSettimana(1,mm,aaaa)
    if gg_settimana==0:
       gg_settimana=7
    for i in range(1,gg_settimana):
        T2.insert(tk.END, "   ")
    conta=gg_settimana-1
    for gg in range(1,giorni[mm-1]+1):
        giorno="   "[:(3-len(str(gg)))]+str(gg)
        T2.insert(tk.END, giorno)
        conta=conta+1
        if conta==7:
           T2.insert(tk.END,'\n')
           conta=0
    T2.insert(tk.END,'\n')
    T2.insert(tk.END,"---------------------\n")
  
# Funzione che verifica se l'anno è bisestile
def verificaBisestile(aaaa):
    bisestile=False
    if aaaa%100==0:
        if aaaa%400==0:
            bisestile=True
    elif aaaa%4==0:
            bisestile=True
    return bisestile
  
# Funzione che imposta l'anno precedente e lo visualizza
def anno_precedente():
    global anno
    anno=anno-1
    label_anno.config(text=anno)
    main()
  
# Funzione che imposta l'anno successivo e lo visualizza
def anno_successivo():
    global anno
    anno=anno+1
    label_anno.config(text=anno)
    main()
  
# Funzione che crea i Frame in cui visualizzare i mesi dell'anno
def main():
    global T2
    F=[]
    offset=0 # Permette di stampare 3 mesi in ogni Frame
    for f in range(0,4):
        F.append(tk.Frame(Frame_body)) # Il Frame_body contiene 4 Frame ciascuno con 3 mesi 
        F[f].grid(column = f, row = 0)
    for f in range(0,4):
        T2=tk.Text(F[f], height=29, width=25,font=("Courier", 12)) # Imposta lo stile del testo per stampare i mesi dell'anno
        T2.pack(side=tk.LEFT, fill=tk.Y)
        for mm in range(1+offset,4+offset):
            stampaGiorni(mm,anno)
        offset=offset+3 # Inizio programma  
root = tk.Tk()
root.wm_title('CALENDARIO PERPETUO')
root.resizable(False, False)
icona = ImageTk.PhotoImage(Image.open("icona_cal.ico")) # Carica l'immagine dell'icona visualizzata in alto a sinistra della finestra del calendario
root.tk.call("wm", "iconphoto", root._w, icona)

# Frame in cui vengono visualizzati i pulsanti freccia e l'anno corrente
Frame_top=tk.Frame(root)
Frame_top.pack(side="top", fill="both", expand = True) # Associa il Frame_top alla finestra root e lo espande in tutto lo spazio disponibile
# Pulsante freccia a sinistra usato per visualizzare l'anno precedente
freccia_sx=tk.Button(Frame_top,text="<",  bd=1,command=anno_precedente, bg="blue",fg="white",font=("courier", 28))
freccia_sx.pack(side="left")
t = time.localtime()
anno=t.tm_year
label_anno = tk.Label(Frame_top, text=anno, bg="blue", fg="white",font=("Courier", 38))
label_anno.pack(side="left",fill="both",expand=True)
# Pulsante freccia a destra usato per visualizzare l'anno successivo
freccia_dx=tk.Button(Frame_top,text=">", bd=1, command=anno_successivo, bg="blue",fg="white",font=("courier", 28))
freccia_dx.pack(side="left")
# Frame in cui vengono visualizzati i 4 Frame ciascuno con tre mesi dell'anno
Frame_body=tk.Frame(root)
Frame_body.pack()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
# Frame in cui viene visualizzato il logo Skill Factory ed il messaggio "Powered by Skill Factory"

Frame_bottom=tk.Frame(root)
Frame_bottom.pack()
logo=ImageTk.PhotoImage(Image.open('logo_sf.png'))
label_logo=tk.Label(Frame_bottom, image=logo)
label_powered_sf=tk.Label(Frame_bottom, text="2020 - Powered by Skill Factory",font=("times", 14,'italic'))
label_logo.pack(side="left")
label_powered_sf.pack(side="left",fill="both",expand=True)
main()
tk.mainloop()

Conclusioni

Questa lezione è sicuramente molto interessante perché oltre a permettere di acquisire nuove conoscenze ed abilità sull'utilizzo del linguaggio Pythonpermette anche di conoscere le caratteristiche fondamentali del calendario Gregoriano, come ad esempio la durata effettiva di un anno astronomico ed il meccanismo dell'anno bisestile per correggere il ritardo che si accumula ogni quattro anni.

L'applicazione può essere compilata per ottenere un eseguibile che vi permetterà di usare il calendario perpetuo senza dover usare l'interprete Python.   

Per compilare lo script Python dovete installare il tool pyinstaller, con il comando:

pip install pyinstaller

Per compilare lo script dovete usare il comando:

pyinstaller calendario.py --noconsole

Dopo la compilazione travate tutto quello che vi serve nella cartella \dist\calendario.

Prima di lanciare il file eseguibile calendario.exe, dovete caricare nella cartella \dist\calendario tutte le immagini.

Arrivederci alla prossima lezione!

 


<< Lezione precedente



  Per scaricare le risorse di questa lezione clicca sul link seguente:risorse_lezione_07

 



EDUCATIONAL GAMING BOOK (EGB) "H2O"

Nell'era dello SMART LEARNING e di PYTHON i libri non si scrivono, ma si sviluppano, in questo modo chi studia, può sperimentare ed apprendere contemporaneamente; un libro con queste caratteristiche lo possiamo definire un  Educational Gaming Book (EGB).

"H2Oè un EGB che descrive tutte le caratteristiche dell'acqua, la sostanza formata da molecole di H2O, che attraverso il suo ciclo di vita garantisce la sopravvivenza di tutti gli esseri viventi del Pianeta

L'obiettivo dell'EGB è quello di far conoscere ai giovani le proprietà dell'acqua, sotto molti aspetti uniche, per sensibilizzarli a salvaguardare un bene comune raro, indispensabile per la vita


Per il DOWNLOAD di "H2Oclicca qui.

Share Button

Impariamo Python giocando al "Solitario del Ferroviere" - Lezione 6

Gino Visciano | Skill Factory - 19/01/2020 23:16:45 | in Tutorials

In questa lezione completiamo il "Solitario del Ferroviere" implementando i tre livelli previsti: Apprendisti, Principianti ed Esperti.

  

Come abbiamo già visto nelle lezioni precedenti, i primi due livelli del gioco offrono aiuti differenti, quello per Esperti non prevede nessun tipo di aiuto, dipende tutto dalle capacità del giocatore.

Per scegliere uno dei tre livelli previsti, bisogna cliccare su una delle immagini seguenti presenti sul Frame di avvio:

Le immagini cliccabili, sono associate alle funzioni  apprendisti, principainti ed esperti che attivano i Frame con i componenti del livello scelto.

Di seguito i blocchi di codice python delle tre funzioni che permettono di gestire i livelli del solitario:

def apprendista(event):
    global livello
    frame_avvio.pack_forget()
    frame_avvio.quit()
    livello=1
    root.wm_title('Solitario del ferroviere:[Apprendista]')
    crea_primo_livello_solitario(root)

def principiante(event):
    global livello
    frame_avvio.pack_forget()
    frame_avvio.quit()
    livello=2
    root.wm_title('Solitario del ferroviere:[Principiante]')
    crea_altri_livelli_solitario(root)

def esperto(event):
    global livello
    frame_avvio.pack_forget()
    frame_avvio.quit()
    livello=3
    root.wm_title('Solitario del ferroviere:[Esperto]')
    crea_altri_livelli_solitario(root)

 

Come creare il pannello di gioco ed avviare il livello di avvio

Il blocco di codice Python seguente permette di avviare il solitario, vengono prima caricate le librerie richieste e successivamente viene prima creato il pannello di gioco e poi avviato il Frame di avvio. 

import pygame # Libreria usata nel gioco per gestire i suoni
import random # Libreria che serve a gestire valori casuale
import tkinter as tk # Libreria usata per creare, pannelli e finestre
import time # Libreria per gestire il tempo
from PIL import Image, ImageTk  # Libreria per gestire le immagini
from tkinter import messagebox # Libreria per gestire le finestre modali di scelta
 
root = tk.Tk() # Crea il pannello di gioco che contiene i Frame con i componenti di gioco 
root.wm_title('Solitario del ferroviere')
root.geometry("1400x600")
root.resizable(False, False)
root.protocol("WM_DELETE_WINDOW", on_closing)
flag=False 
# flag=True aggiorna tempo e punteggio, flag=False aggiorna solo orologio
crea_avvio_solitario(root) # Questa funzione crea ed avvia il livello di avvio del solitario
root.mainloop()
 

Come creare il livello di avvio del gioco e rendere le immagini cliccabili

Il codice seguente mostra come caricare le immagini dei livelli di gioco ed associarle ad un evento di tipo click per avviare le funzioni: apprendistiprincipainti ed esperti.  

def crea_avvio_solitario(root):
    global frame_avvio
    global livello
    livello=0

    # Creazione Frame del livello di avvio (frame_avvio) ed associazione al pannello di gioco root
    frame_avvio=tk.Frame(root)
    frame_avvio.pack(side="top", fill="both", expand = True)
    immagine_titolo=ImageTk.PhotoImage(Image.open('titolo_solitario_del_ferroviere.png'))
    
# Caricamento immagini
    immagine_apprendisti=ImageTk.PhotoImage(Image.open('apprendisti.png'))
    immagine_principianti=ImageTk.PhotoImage(Image.open('principianti.png'))
    immagine_esperti=ImageTk.PhotoImage(Image.open('esperti.png'))

    immagine_asso=ImageTk.PhotoImage(Image.open('1coppe.png'))
    immagine_retro=ImageTk.PhotoImage(Image.open('Carte_Napoletane_retro.png'))
    label_titolo=tk.Label(frame_avvio, image=immagine_titolo)
    label_titolo.place(x=180,y=5)

   # Posizionamento delle immagini sul Frame del livello di avvio ed attivazione (bind(...)) dell'evento click alle funzioni apprendiata, principiante ed esperto  
    label_apprendisti=tk.Label(frame_avvio, image=immagine_apprendisti)
    label_apprendisti.place(x=100,y=280)
    label_apprendisti.bind("<Button>",apprendista)
    label_principianti=tk.Label(frame_avvio, image=immagine_principianti)
    label_principianti.place(x=355,y=280)
    label_principianti.bind("<Button>",principiante)
    label_esperti=tk.Label(frame_avvio, image=immagine_esperti)
    label_esperti.place(x=600,y=280)
    label_esperti.bind("<Button>",esperto)
    label_asso=tk.Label(frame_avvio, image=immagine_asso)
    label_asso.place(x=870,y=180)
    label_retro=tk.Label(frame_avvio, image=immagine_retro)
    label_retro.place(x=1100,y=180)
    label_messaggio=tk.Label(frame_avvio, text="Scegli il livello per iniziare a giocare ...",font=("times", 18,'italic'))
    label_messaggio.place(x=240,y=210)
    logo=ImageTk.PhotoImage(Image.open('logo_sf.png'))
    label_logo=tk.Label(frame_avvio, image=logo)
    label_powered_sf=tk.Label(frame_avvio, text="2020 - Powered by Skill Factory",font=("times", 14,'italic'))
    label_powered_sf.place(x=550,y=557)
    label_logo.place(x=805,y=545)
    frame_avvio.mainloop()

Come creare il primo livello di gioco

Il codice seguente mostra come creare il primo livello di gioco:

def crea_primo_livello_solitario(root):
    global frame_primo_livello_solitario
    global label_carte_small_si
    global label_carte_small_no
    global immagini_carte
    global immagini_carte_small
    global label_mazzo_di_carte
    global label_carta_girata
    global label_non_indovinate
    global label_indovinate
    global label_girate
    global label_carta_pensata
    global label_clock
    global label_titolo_tempo
    global label_titolo_tentativi
    global label_secondi
    global label_tentativi
    global label_titolo_score
    global label_score
    global pulsante_gira
    global pulsante_mischia
    global pulsante_nuova_partita

    # Creazione Frame del primo livello di gioco (frame_primo) ed associazione al pannello di gioco root
    frame_primo_livello_solitario=tk.Frame(root)
    frame_primo_livello_solitario.pack(side="top", fill="both", expand = True)
    #Orologio
    label_clock = tk.Label(frame_primo_livello_solitario, font=('arial', 14, 'italic'), bg='darkgray',fg='black')
    label_titolo_tempo=tk.Label(frame_primo_livello_solitario, text="TEMPO",font=("times", 12,"italic"),fg="black")
    label_titolo_tentativi=tk.Label(frame_primo_livello_solitario, text="TENTATIVI",font=("times", 12,"italic"),fg="black")
    label_secondi=tk.Label(frame_primo_livello_solitario, font=('arial', 14, 'normal'), bg='blue',fg='white')
    label_tentativi=tk.Label(frame_primo_livello_solitario, font=('arial', 14, 'normal'), bg='orange',fg='white')
    label_titolo_score=tk.Label(frame_primo_livello_solitario, text="SCORE",font=("times", 12,"italic"),fg="black")
    label_score=tk.Label(frame_primo_livello_solitario, font=('arial', 16, 'normal'), bg='palevioletred',fg='white')
    immagine_indovinate=ImageTk.PhotoImage(Image.open('verde.png'))
    immagine_non_indovinate=ImageTk.PhotoImage(Image.open('rosso.png'))
    label_titolo_carta_pensata=tk.Label(frame_primo_livello_solitario, text="CARTA PENSATA",font=("Helvetica", 14))
    label_titolo_mazzo_di_carte=tk.Label(frame_primo_livello_solitario, text="MAZZO DI CARTE",font=("Helvetica", 14))
    #Pulsanti per gestire il  gioco
    pulsante_cambia=tk.Button(frame_primo_livello_solitario,text="CAMBIA", width=10, height=2, bd = 3,command=cambia, bg="seagreen",font=("Helvetica", 12))
    pulsante_gira=tk.Button(frame_primo_livello_solitario,text="GIRA", width=10, height=2, bd = 3,command=gira_primo, bg="teal",font=("Helvetica", 12))
    pulsante_mischia=tk.Button(frame_primo_livello_solitario,text="MISCHIA", width=10, height=2, bd = 3,command=mischia_primo, bg="mediumpurple",font=("Helvetica", 12))
    pulsante_nuova_partita=tk.Button(frame_primo_livello_solitario,text="NUOVA PARTITA", width=15, height=2, bd = 3,command=nuova_partita_primo, bg="darkorange",font=("Helvetica", 12))

    label_girate=tk.Label(frame_primo_livello_solitario, text="   0/10  ",font=("Helvetica", 25),fg="white",bg="tomato")
    label_img_indovinate=tk.Label(frame_primo_livello_solitario, image=immagine_indovinate)
    label_indovinate=tk.Label(frame_primo_livello_solitario, text=str(indovinate),font=("Helvetica", 24))
    label_non_indovinate=tk.Label(frame_primo_livello_solitario, text=str(non_indovinate),font=("Helvetica", 24))
    label_img_non_indovinate=tk.Label(frame_primo_livello_solitario, image=immagine_non_indovinate)
    immagini_carte=carica_immagini_carte()
    label_carta_pensata=tk.Label(frame_primo_livello_solitario, image=immagini_carte[1])
    label_mazzo_di_carte=tk.Label(frame_primo_livello_solitario, image=immagini_carte[0])
    label_carta_girata=tk.Label(frame_primo_livello_solitario, image=immagini_carte[0])
    immagini_carte_small=carica_immagini_carte_small()
    logo=ImageTk.PhotoImage(Image.open('logo_sf.png'))
    label_logo=tk.Label(frame_primo_livello_solitario, image=logo)
    label_powered_sf=tk.Label(frame_primo_livello_solitario, text="2020 - Powered by Skill Factory",font=("times", 14,'italic'))
    label_clock.place(x=1300,y=5)
    pulsante_cambia.place(x=60,y=370)
    label_titolo_carta_pensata.place(x=25,y=5)
    label_carta_pensata.config(image=immagini_carte[1])
    label_carta_pensata.place(x=5,y=40)
    label_titolo_mazzo_di_carte.place(x=260,y=5)
    label_mazzo_di_carte.place(x=240,y=40)
    pulsante_gira.place(x=285,y=370)
    label_girate.config(text="   0/"+str(len(mazzo_carte))+"  ")
    label_girate.place(x=500,y=370)
    label_img_indovinate.place(x=750,y=60)
    label_indovinate.config(text=str(indovinate))
    label_indovinate.place(x=820,y=65)
    label_img_non_indovinate.place(x=750,y=150)
    label_non_indovinate.config(text=str(non_indovinate))
    label_non_indovinate.place(x=820,y=158)
    label_titolo_tempo.place(x=35,y=455)
    label_secondi.place(x=30,y=515)
    label_tentativi.place(x=160,y=515)
    label_titolo_tentativi.place(x=153,y=455)
    label_secondi.place(x=30,y=480)
    label_tentativi.place(x=160,y=480)
    label_titolo_score.place(x=280,y=455)
    label_score.place(x=280,y=480)
    label_powered_sf.place(x=550,y=557)
    label_logo.place(x=805,y=545)
    start_primo()
   # Se il flag avviaTick e True viene eseguita la funzione Tick(). Questa funzione ogni 200 millisecondi aggiorna l'orologio, il tempo trascorso ed il punteggio
    if avviaTick:
        tick()
    frame_primo_livello_solitario.mainloop()

Come creare gli altri  livello di gioco

Il codice seguente mostra come creare gli  altri livelli di gioco:

def crea_altri_livelli_solitario(root):
    global frame_altri_livelli_solitario
    global label_mazzo_di_carte
    global label_carta_girata
    global label_girate
    global label_carta_pensata
    global label_clock
    global label_titolo_tempo
    global label_titolo_tentativi
    global label_secondi
    global label_tentativi
    global label_titolo_score
    global label_score
    global pulsante_gira
    global pulsante_mischia
    global pulsante_nuova_partita
    global immagini_carte
    global label_titolo_carta_da_indovinare
    global label_titolo_carte_indovinate
    global label_titolo_carte_non_indovinate
    global label_indovinate
    global label_non_indovinate
    global label_carta_indovinata
    global label_carta_non_indovinata
    global label_carte_da_indovinare
    global label_carta_non_indovinata_retro
    global livello

    # Creazione Frame per il secondo e terzo livello di gioco (frame_altri_livelli) ed associazione al pannello di gioco root
    frame_altri_livelli_solitario=tk.Frame(root)
    frame_altri_livelli_solitario.pack(side="top", fill="both", expand = True)
    label_titolo_carte_indovinate=tk.Label(frame_altri_livelli_solitario, text="CARTE INDOVINATE",font=("Helvetica", 14),fg="green")
    label_titolo_carte_non_indovinate=tk.Label(frame_altri_livelli_solitario, text="CARTE NON INDOVINATE",font=("Helvetica", 14),fg="red")
    label_indovinate=tk.Label(frame_altri_livelli_solitario, text="    0    ",font=("Helvetica", 25),fg="white",bg="green")
    label_non_indovinate=tk.Label(frame_altri_livelli_solitario, text="    0    ",font=("Helvetica", 25),fg="white",bg="red")
    #Orologio
    label_clock = tk.Label(frame_altri_livelli_solitario, font=('arial', 14, 'italic'), bg='darkgray',fg='black')
    label_titolo_tempo=tk.Label(frame_altri_livelli_solitario, text="TEMPO",font=("times", 12,"italic"),fg="black")
    label_titolo_tentativi=tk.Label(frame_altri_livelli_solitario, text="TENTATIVI",font=("times", 12,"italic"),fg="black")
    label_secondi=tk.Label(frame_altri_livelli_solitario, font=('arial', 14, 'normal'), bg='blue',fg='white')
    label_tentativi=tk.Label(frame_altri_livelli_solitario, font=('arial', 14, 'normal'), bg='orange',fg='white')
    label_titolo_score=tk.Label(frame_altri_livelli_solitario, text="SCORE",font=("times", 12,"italic"),fg="black")
    label_score=tk.Label(frame_altri_livelli_solitario, font=('arial', 16, 'normal'), bg='palevioletred',fg='white')
    label_titolo_carta_pensata=tk.Label(frame_altri_livelli_solitario, text="CARTA PENSATA",font=("Helvetica", 14))
    label_titolo_mazzo_di_carte=tk.Label(frame_altri_livelli_solitario, text="MAZZO DI CARTE",font=("Helvetica", 14))
    
#Pulsanti per gestire il gioco
    pulsante_cambia=tk.Button(frame_altri_livelli_solitario,text="CAMBIA", width=10, height=2, bd = 3,command=cambia, bg="seagreen",font=("Helvetica", 12))
    pulsante_gira=tk.Button(frame_altri_livelli_solitario,text="GIRA", width=10, height=2, bd = 3,command=gira_altri, bg="teal",font=("Helvetica", 12))
    pulsante_mischia=tk.Button(frame_altri_livelli_solitario,text="MISCHIA", width=10, height=2, bd = 3,command=mischia_altri, bg="mediumpurple",font=("Helvetica", 12))
    pulsante_nuova_partita=tk.Button(frame_altri_livelli_solitario,text="NUOVA PARTITA", width=15, height=2, bd = 3,command=nuova_partita_altri, bg="darkorange",font=("Helvetica", 12))

    label_girate=tk.Label(frame_altri_livelli_solitario, text="   0/10  ",font=("Helvetica", 25),fg="white",bg="tomato")
    immagini_carte=carica_immagini_carte()
    label_carta_pensata=tk.Label(frame_altri_livelli_solitario, image=immagini_carte[1])
    label_mazzo_di_carte=tk.Label(frame_altri_livelli_solitario, image=immagini_carte[0])
    label_carta_girata=tk.Label(frame_altri_livelli_solitario, image=immagini_carte[0])
    label_carte_da_indovinare=tk.Label(frame_altri_livelli_solitario, image=immagini_carte[0])
    label_carta_girata=tk.Label(frame_altri_livelli_solitario, image=immagini_carte[0])
    logo=ImageTk.PhotoImage(Image.open('logo_sf.png'))
    label_logo=tk.Label(frame_altri_livelli_solitario, image=logo)
    label_powered_sf=tk.Label(frame_altri_livelli_solitario, text="2020 - Powered by Skill Factory",font=("times", 14,'italic'))
    label_clock.place(x=1300,y=5)
    pulsante_cambia.place(x=60,y=370)
    label_titolo_carta_pensata.place(x=25,y=5)
    label_carta_pensata.config(image=immagini_carte[1])
    label_carta_pensata.place(x=5,y=40)
    label_titolo_mazzo_di_carte.place(x=260,y=5)
    label_mazzo_di_carte.place(x=240,y=40)
    pulsante_gira.place(x=285,y=370)
    label_girate.config(text="   0/"+str(len(mazzo_carte))+"  ")
    label_girate.place(x=500,y=370)
    label_titolo_tempo.place(x=35,y=455)
    label_secondi.place(x=30,y=515)
    label_tentativi.place(x=160,y=515)
    label_titolo_tentativi.place(x=153,y=455)
    label_secondi.place(x=30,y=480)
    label_tentativi.place(x=160,y=480)
    label_titolo_score.place(x=280,y=455)
    label_score.place(x=280,y=480)
    label_powered_sf.place(x=550,y=557)
    label_logo.place(x=805,y=545)
    label_carta_indovinata=tk.Label(frame_altri_livelli_solitario, image=immagini_carte[0])
    label_carta_non_indovinata=tk.Label(frame_altri_livelli_solitario, image=immagini_carte[0])
    if livello==2:
        label_carta_non_indovinata=tk.Label(frame_altri_livelli_solitario, image=immagini_carte[0])
        label_carta_non_indovinata.bind("<Button>",gira_carta_non_indovinata)
        immagine_help=ImageTk.PhotoImage(Image.open('help.png'))
        label_carta_non_indovinata_help=tk.Label(frame_altri_livelli_solitario, image=immagine_help)
        label_carta_non_indovinata_help.place(x=1230,y=150)
        label_carta_non_indovinata_help.bind("<Button>",help_frame_show)
        label_carta_non_indovinata_retro=tk.Label(frame_altri_livelli_solitario, image=immagini_carte[0])
        label_carta_non_indovinata_retro.bind("<Button>",gira_carta_non_indovinata_back)
        label_carta_non_indovinata_help.place(x=1230,y=150)
        label_carta_non_indovinata_help.bind("<Button>",help_frame_show)
    start_altri()
   # Se il flag avviaTick e True viene eseguita la funzione Tick(). Questa funzione ogni 200 millisecondi aggiorna l'orologio, il tempo trascorso ed il punteggio
    if avviaTick:
        tick()
    frame_altri_livelli_solitario.mainloop()

 

Come abbandonare il Solitario oppure un livello di gioco

Per abbandonare il livello di gioco scelto oppure uscire dal Solitario, basta cliccare sull'icona close in alto a destra del Pannello di gioco.  

La finestra modele seguente permette di abbandonare un livello di gioco.

La finestra modele seguente permette di uscire dal Solitario.

Per associare all'icona close del Pannello di gioco la funzione per abbandonare il livello di gioco oppure il Solitario  abbiamo usato il codice seguete:

root.protocol("WM_DELETE_WINDOW", on_closing)

def on_closing():
    if livello==0:
        if messagebox.askokcancel("EXIT", "Vuoi uscire dal solitario?"):
            root.destroy()
    else:
        if messagebox.askokcancel("EXIT", "Vuoi abbandonare il gioco?"):
            torna_avvio_solitario()

La funzione torna_avvio_solitario() permette di abbandonare il livello di gioco corrente e tornare al livello di avvio. 

   def torna_avvio_solitario():
    global mazzo_carte
    global mazzo_carte_non_indovinate
    global indovinate
    global non_indovinate
    global offset_indovinate
    global offset_non_indovinate
    global tentativi
    global score
    global conta_score
    global time_start
    global livello
    global flag
    if livello==1:
        frame_primo_livello_solitario.pack_forget()
        frame_primo_livello_solitario.quit()
    elif livello>1:
        frame_altri_livelli_solitario.pack_forget()
        frame_altri_livelli_solitario.quit()
    mazzo_carte=[1,2,3,4,5,6,7,8,9,10]
    mazzo_carte_non_indovinate.clear()
    livello=0
    flag=False
    indovinate=0
    offset_indovinate=50
    non_indovinate=0
    offset_non_indovinate=50
    tentativi=1
    score=1000
    conta_score=0
    time_start=0
    crea_avvio_solitario(root)

Descrizione delle Funzioni usate nel gioco 

def tick(): Aggiorna l'orologio, il tempo ed il punteggio ogni 200 millisecondi
def suono(sound,tempo): Gestisce i suoni del gioco
def on_closing(): Associa all'icona close del Pannello di gioco la funzione per abbandonare il livello di gioco oppure il Solitario
def mischia_carte(mazzo): Mischia le carte del mazzo centrale
def carica_immagini_carte(): Carica le immagini del gioco
def carica_immagini_carte_small(): Carica le immagini del primo livello di gioco
def cambia(): Permette di scegliere la carta pensata
def gira_primo(): Gira le carte del mazzo centrale del primo livello di gioco
def gira_altri(): Gira le carte del mazzo centrale del secondo e terzo livello di gioco
def nuova_partita_primo(): Avvia una nuova partita nel primo livello di gioco
def nuova_partita_altri(): Avvia una nuova partita nel secondo e terzo livello di gioco
def mischia_primo(): Mischia le carte nel primo livello di gioco
def mischia_altri(): Mischia le carte nel secondo e terzo livello di gioco
def torna_avvio_solitario(): Abbandona il livello di gioco corrente e torna al livello di avvio
def gira_carta_non_indovinata(event): Gira le carte del mazzo di carte non indovinate
def gira_carta_non_indovinata_back(event): Gira le carte del mazzo di carte non indovinate
def ripristina_carte_non_indovinate(): Ripristina il mazzo di carte non indovinate se si gira una carta del mazzo centrale
def help_frame_hidden(): Nasconde l'help del secondo livello di gioco
def help_frame_show(event): Mostra l'help del secondo livello di gioco
def apprendista(event): Avvia il primo livello di gioco
def principiante(event): Avvia il secondo livello di gioco
def esperto(event): Avvia il terzo livello di gioco
def crea_avvio_solitario(root): Avvia il livello di avvio del solitario
def crea_primo_livello_solitario(root): Crea il frame con tutti i componenti del primo livello di gioco
def crea_altri_livelli_solitario(root): Crea il frame con tutti i componenti del secondo e terzo livello di gioco
def start_primo(): Inizializza il primo livello di gioco
def start_altri(): Inizializza il secondo e terzo livello di gioco

 

Conclusioni

Con questa lezione il gioco del "Solitario del Ferroviere" è finito, sicuramente può essere migliorato e possono essere aggiunte ultriori funzionalità, come ad esempio la registrazione dei punteggi migliori raggiunti, per creare una classifica dei giocatori più bravi.

Il gioco può essere compilato per ottenere un eseguibile che vi permetterà di giocare senza dover usare l'interprete Python.   

Per compilare uno script Python potete installare il tool pyinstaller, con il comando:

pip install pyinstaller

Per compilare lo script dovete usare il comando:

pyinstaller solitario_del_ferroviere.py --noconsole

Dopo la compilazione travate tutto quello che vi serve nella cartella \dist\solitario_del_ferroviere.

Prima di lanciare il file eseguibile solitario_del_ferroviere.exe, dovete caricare nella cartella \dist\solitario_del_ferroviere tutte le immagini ed i file audio.

Buon divertimento ed arrivederci alla prossima lezione!

 


<< Lezione precedente           Lezione successiva >>



 Per scaricare le risorse di questa lezione clicca sul link seguente:risorse_lezione_06

 



 

Share Button
TOP