Il 0% ha trovato utile questo documento (0 voti)
13 visualizzazioni44 pagine

Python

Questo documento presenta un quaderno di esercizi per imparare Python. Contiene 8 esercizi che coprono argomenti come: introduzione all'ambiente Python e Thonny, tipi di dati di base, operatori, funzioni, moduli, interfacce grafiche e altro. L'obiettivo è familiarizzare gli studenti con il linguaggio di programmazione Python attraverso la risoluzione di una serie di problemi e esercizi pratici di complessità crescente.
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
13 visualizzazioni44 pagine

Python

Questo documento presenta un quaderno di esercizi per imparare Python. Contiene 8 esercizi che coprono argomenti come: introduzione all'ambiente Python e Thonny, tipi di dati di base, operatori, funzioni, moduli, interfacce grafiche e altro. L'obiettivo è familiarizzare gli studenti con il linguaggio di programmazione Python attraverso la risoluzione di una serie di problemi e esercizi pratici di complessità crescente.
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 44

2022

2023

Quaderno degli Esercizi


INFORMATICA PER L'INGEGNERIA
Quaderno degli Esercizi

Tabella dei contenuti

ESERCIZIO 1. AMBIENTE E INTRODUZIONE A PYTHON: PRIMI PASSI...............................2

IoINTRODUZIONE.......................................................................................................................2

ESERCIZIO 2. INGRESSO- USCITA E FUNZIONI PREDEFINITES ................................................7

ESERCIZIO 3. ISTRUZIONI DI CONTROLLO I E GESTIONE DELLE ECCEZIONI.................................10

ESERCIZIO 4. SEQUENZE: LISTE-TUPLE-STRINGHE. STRUTTURE DI CONTROLLO II ...........13

ESERCIZIO 5. MATRICI. LISTA DI LISTE............................................................................21

ESERCIZIO 6. FUNZIONI E MODULI................................................................................24

ESERCIZIO 7. PERSISTENZA: FILES ...............................................................................30

ESERCIZIO 8. TKINTER. INTERFACCIE GRAFICHE. PARTE I. INTRODUZIONE ......................32

IoINTRODUZIONE.....................................................................................................................32
WIDGETS .............................................................................................................................33
CPOSIZIONARE I WIDGET NELLA FINESTRA......................................................................................35

ESERCIZIO 8. INTERFACCE GRAFICHE PER L'UTENTE. PARTE II.................................................38

1
Quaderno degli Esercizi

Esercizio 1. Ambiente e Introduzione a Python: primi passi

Obiettivi

• Gestire l'interprete di Python.


• Conoscere Thonny (IDE). Creare, aprire programmi ed eseguirli.
• Lavorare con i tipi di dati di base di Python e svolgere operazioni semplici
con gli stessi.
• Primi programmi in Python e commentarli.
• Familiarizzarsi con il Debug.

Introduzione
Python è un linguaggio di programmazione di uso generale che si può dire che sia
multiparadigma, poiché supporta l'orientamento agli oggetti, la programmazione imperativa e, in minor misura
misura, programmazione funzionale. È un linguaggio interpretato, utilizza il tipo dinamico ed è
multiplatform. È un buon linguaggio per avvicinarsi al mondo della programmazione per il suo
semplicità, versatilità e rapidità di sviluppo, questo è grazie al fatto che la sua sintassi è molto semplice.
Un altro vantaggio è che possiede una licenza open source. Per scrivere programmi in Python non
è necessario più che scaricare il linguaggio che ha il proprio IDLE (Integrated
Ambiente di Sviluppo e Apprendimento o Ambiente Integrato di Sviluppo e Apprendimento per
Python). Questo IDLE è composto da due finestre: la finestra Shell e la finestra dell'editor. Qui
possiamo inserire le istruzioni e vedere direttamente il risultato che ci fornisce il
interprete. Per scaricare Python puoi andare alla pagina https://www.python.org/. In i
Per gli esercizi verrà utilizzata la versione 3.6.5 o successiva.

Oltre all'IDLE di Python, ci sono strumenti più completi per scrivere i


programmi, comunemente conosciuti come IDE (Integrated Development Environment).
Alcune opzioni sono a pagamento e altre gratuite. Per questo corso introduttivo alla programmazione,
è stato scelto Thonny. È un IDE facile da usare, semplice, gratuito e multipiattaforma (Windows, Linux
y Mac). La pagina da dove puoi scaricarlo e ottenere ulteriori informazioni è: https://thonny.org/.

Enunciati: Lavoro in classe

Familiarizzarsi con Thonny

Nella pagina di download di Thonny c'è un breve video che dura circa cinque minuti
e che sono sufficienti affinché tu conosca gli elementi principali di questo IDE. Qui solo ti
andiamo a presentare le finestre principali e le opzioni più comuni.

2
Quaderno degli Esercizi

Ambiente Thonny

Elementi principali dell'ambiente:

a. Barra dei menu:


• File. Opzioni per Creare, Salvare, Aprire o Stampare programmi.
• Modifica. Copia, Incolla, Taglia, aggiungi commenti in Python, pulisciShell, ecc.
• Visualizza. Mostra/Nascondi finestre, cambia dimensioni dei caratteri, ecc.
• Esegui
• Strumenti. Aggiungi pacchetti, ApriShell, ecc.
b. Opzioni più comuni
• Creare un programma vuoto
dedebugystop.
c. Codice del programma attuale. Consente di avere aperte più finestre con diversi
programmi.
d. Shell possono eseguire le istruzioni e vedere il risultato delle stesse.
e. Diverse finestre dove è importante evidenziare la finestra delle variabili che consente di vedere il valore
delle variabili del programma.
f. Lavoro con oggetti.

Scrivere dichiarazioni direttamente

Si utilizzerà la finestraShell per scrivere comandi. Posizionarsi nel prompt e scrivere le


seguenti sentenze:

3
Quaderno di Esercizi

Gioca con il linguaggio e fai operazioni matematiche comuni, si possono usare stringhe di
caratteri come nell'esempio.

Creare un programma ed eseguire un programma

I programmi si salvano in file con estensione .py e si aprono per modificarli o provarli
semplicemente come funzionano. Vengono scritti nella finestra di codice, nella parte sinistra
appaiono i numeri corrispondenti a ciascuna riga del programma. Nel nostro esempio, il
il programma ha cinque righe.
Per vedere l'esecuzione del programma è necessario salvarlo, Thonny lo fa in modo
automatica prima della sua esecuzione, e se il programma non è stato salvato chiede il nome
del stesso. Per salvare un programma basta selezionare l'opzione Salva del menu File o
premere il pulsante della barra . In questo caso abbiamo nominato il programma “primero.py”, e in
La schermata della finestra mostra il nome riflesso nella scheda.
Per eseguire il programma attuale è necessario selezionare l'opzione Esegui script attuale dal menu
Esegui, premi il tasto F5 o fai clic sul pulsante .
Il risultato dell'esecuzione può essere visto nel shell, nella finestra delle variabili possiamo vedere le
variabili e il valore delle stesse come risultato dell'esecuzione del programma. Gli errori che
potrebbero esistere anche si mostrerebbero nella finestra Shell.

Esercizio 1.1. Variabili

Crea tre variabili di tipo intero e assegnale i seguenti valori: 5, 14, 37. Scrivi le
sentenze seguenti:

4
Quaderno di Esercizi

• Due sentenze che applicano gli operatori +, *, (, e ), e senza variare l'ordine dei
numeri si ottengono i seguenti risultati: 703 e 523.
• Utilizza un operatore che indichi se è vero che 14 è minore di 37.
• Mostra quante volte esatta entra 5 in 14.
• Fai un'istruzione che calcoli il resto della divisione di 14 per 5, e sommarlo a 37.
• Elevare 14 alla quinta potenza.
• Quale tipo di dato otteniamo quando applichiamo un operatore relazionale?
• Scrivi un'espressione in cui mescoli due tipi di operatori diversi e sia
valido il risultato che ottieni.

Esercizio 1.2. Catene I

Buenos
“giorni”. Scrivi le seguenti frasi:

• Applicando gli operatori adeguati si ottiene il risultato Buongiorno


• Ottieni il risultato BuongiornoBuongiornoBuongiorno.
• Stampare in ogni riga una lettera della variabile 1.
• Stampare su ogni riga una lettera della variabile 2 ma partendo dall'ultima
fino alla prima.

Esercizio 1.3. Stringhe II

Creare due variabili di tipo carattere e assegnare i seguenti valori: "abc" e "aAb". Creare le
sentenze che permettano di sapere se:

• Le due variabili sono uguali.


• La prima variabile è minore della seconda variabile.
• La seconda variabile è minore della prima.

Esercizio 1.4. Commenti

Commentare i programmi precedenti utilizzando i diversi tipi di commento.

Esercizio 1.5. Precedenza

Dando i seguenti valori: a = 20, b = 10, c = 15 e d = 5. Esegui i seguenti calcoli:

• (a + b) * c / d
• ((a + b) * c) / d
• (a + b) * (c / d)
• a + (b * c) / d
Controlla il risultato e commenta come viene risolta la precedenza.

Esempio del risultato:

• Il valore di (a + b) * c / d è 90,0
• Il valore di ((a + b) * c) / d è 90.0

5
Quaderno degli esercizi

• Il valore di (a + b) * (c / d) è 90.0
• Il valore di a + (b * c) / d è 50,0

Esercizio 1.6. Calcolare la distanza tra due punti

Dati due punti nello spazio calcolare la distanza che li separa (assegnare i valori)
direttamente). I punti saranno definiti dalle loro tre coordinate x, y, z. La formula per calcolare
la distanza è quella mostrata di seguito.

= 1(− 2+ )12− 2(+ 1− )22 ( )2


Esempio del risultato:

La distanza tra i punti (2.0, 3.0, 4.0) e (5.0, 6.0, 7.0) è:


5.196152422706632

Esercizio 1.7. Lista

Scrivi quattro espressioni valide, dove puoi identificare in ciascuna di esse due o più di
tre tipi di dati diversi, e due o più tipi di operatori diversi.

Esercizio 1.8. Debug


Familiarizzarsi con il Debug per verificare come cambiano le variabili man mano che si procede
eseguendo un programma.

Enunciati: Lavoro complementare

Complementario 1.1. Realizzare gli esercizi di Introduzione a Python del quaderno di


esercizi risolti.

Complementario 1.2. Cerca nel web applicazioni conosciute che utilizzano il linguaggio di
programmazione Python.

6
Quaderno degli Esercizi

Esercizio 2. Ingresso-Uscita e Funzioni predefinite

Obiettivi

• Entrata e uscita dei dati.


• Richiamare funzioni predefinite.
• Utilizzare i metodi della classe str.
• Eseguire importazioni di moduli.

Enunciati: Lavoro in classe

Esercizio 2.1. Calcolare la distanza tra due punti forniti dall'utente

Richiedere all'utente i valori di due punti nello spazio e calcolare la distanza che li separa.
I punti saranno definiti dalle loro tre coordinate x, y, z. La formula per calcolare la distanza è
la cui immagine è mostrata di seguito.

• I valori di (x, y, z) saranno richiesti all'utente e saranno di tipo flottante.


• Si utilizzerà l'importazione del modulo math per la radice e la potenza.
• Il risultato sarà mostrato arrotondando a due cifre e utilizzando il formato.

= 1(− 2+ )12− 2(+ 1− )22 ( )2


Esempio del risultato:

Dammi la coordinata X1 5.2


Dammi la coordinata Y1 3.8
Dammi la coordinata Z1 2
Dammi la coordinata X2 6.1
Dammi la coordinata Y2 7.8
Dammi la coordinata Z2 1
La distanza dei punti (5.2,3.8,2.0) e (6.1,7.8,1.0) è 4.22

Esercizio 2.2. Nomi

Chiedere all'utente il suo nome e i suoi due cognomi, memorizzarli in tre variabili. Fare le
seguenti sentenze:

• mostrare nome e cognome. tutto in minuscolo.


• MOSTRARE PRIMO COGNOME, SECONDO COGNOME E NOME. TUTTO IN MAIUSCOLO.
• Mostra il primo cognome, il secondo cognome e il nome. In maiuscolo la prima
lettera di ogni parola.
Esempio del risultato:

Dammi il nome Juan


Dammi un buon cognome
Dammi il cognome 2 montes
juan bueno montes
BUENO MONTES JUAN
Buono Montes Juan

7
Quaderno di Esercizi

Esercizio 2.3. Cambiando catene

era il migliore dei tempi, era il peggiore dei tempi


i tempi, era l'età della saggezza, era l'età della follia, era l'epoca della credenza,
era il tempo dell'incredulità, era la stagione della luce, era la stagione dell'oscurità, era la
primavera della speranza, era l'inverno della disperazione”. Realizzare le seguenti
modifiche alla frase:

• Cambiar de toda la frase la parola momenti.


• Cambiare in tutta la frase ottenuta nella sezione precedente la parola età con
epoca.
• Mostra il numero di caratteri che ha la nuova frase.
• Mostrare in quale posizione si trova la parola speranza nella frase
originale.
• Indica se la frase originale è maggiore della nuova frase.
• Mostra i primi 20 caratteri
• Passa la frase al presente cambiando il tempo del verbo era con es.
• Poner La Prima Lettera Di Ogni Parola In Maiuscola Di La Nuova Frase.
• Rimuovere tutti i caratteri bianchi dalla frase originale.

Esercizio 2.4. Verifiche

Effettua le seguenti verifiche:

• Chiedi un numero di telefono fisso all'utente e controlla che il numero sia valido. È
valido se ha la dimensione adeguata e tutti i caratteri sono numeri.
• Chiedi il nome della strada e verifica che tutti i caratteri che la compongono siano
letras e/o spazi. Deve avere almeno un carattere che non può essere bianco.
• Chiedere il DNI e indicare se è corretto. Deve avere 9 caratteri, i primi 8 di
sono numeri e l'ultima è una lettera maiuscola.
• Chiedere l'età come un valore intero e verificare se è compresa tra 18 e 81
entrambi inclusi.

Esercizio 2.5. Casuali

Crea tre variabili di tipo intero e inizializza il loro valore a zero. Genera tre numeri casuali in
il rango 1-100 entrambi inclusi e assegnarli alle variabili già create:

• Moltiplica il primo valore per la costante PI, arrotonda il risultato al numero


intero vicino più alto
• Controllare se il secondo valore è un numero pari.
• Fai la sottrazione del secondo numero dal terzo.
• Concatenare il valore ottenuto nel primo punto con il valore assoluto ottenuto in
il punto precedente e mostrarlo sullo schermo.

8
Quaderno degli Esercizi

Enunciati: Lavoro complementare

Complementario 2.1. Eseguire gli esercizi sulle stringhe del quaderno degli esercizi risolti.

9
Quaderno degli esercizi

Esercizio 3. Istruzioni di Controllo I e Gestione delle eccezioni

Obiettivi

• Utilizzare istruzioni di controllo condizionale If/Else.


• Applicare sentenze iterative. While
• Evitare eccezioni: try/except

Enunciati: Lavoro in classe

Esercizio 3.1. Fattori

Sviluppare un programma che richieda all'utente due dati numerici interi. Verificare che
sono interi e visualizzare come risultato un messaggio che indichi se alcuni dei dati sono
multiplo dell'altro.

Esempio del risultato:

Dammi un numero intero: 9


Dammi un altro numero intero: 36
36 è un multiplo di 9

Esercizio 3.2. Calcoli per un cerchio


Progettare un programma che, a partire dal raggio di un cerchio, consenta il calcolo del suo diametro.
perimetro e area. A tal fine verrà presentato all'utente un menu di opzioni possibili. Se sceglie una
un'opzione diversa da quelle presentate verrà mostrato un messaggio di errore (l'opzione può essere in
mayúscula o minúscula) e verrà richiesta nuovamente l'opzione. Il risultato verrà mostrato con tre
decimali, e il valore ricevuto può essere intero o flottante.

Esempio del risultato:

Dammi il raggio: 42.5


Calcoli possibili
a) Calcolare il diametro
b) Calcolare il perimetro
c) Calcolare l'area
d) Uscire
Opzione ====> b
Il perimetro è 267.035
deve essere maggiore di 1.

Esercizio 3.3. Somma cifre

Somma le cifre di un numero intero positivo precedentemente inserito dall'utente. Pensa


due forme distinte di farlo.

Esempio del risultato:

Dammi un numero: 91.


Risultato: 10.
Dammi un numero: 23.
Risultato: 5.

10
Quaderno di Esercizi

Esercizio 3.4. Cosa stampa il print

Del programma che segue indica che stampa la dichiarazione print ogni volta che si
esegui, se si esegue. Se hai dubbi su come si comporta il programma, utilizza il Debug
per vedere come cambiano le variabili: i, j, k.

i, j, k = 0, 0, 0
mentre i < 3:
mentre j < 3:
mentre k < 3:
stampa(i,j,k)
k += 1
j += 1
k=0
i += 1
j=0

Esercizio 3.5. Indovina un numero

Il programma genererà automaticamente un numero tra 1-100. L'utente cercherà di indovinare il


numero e avrà a disposizione 5 tentativi. Ad ogni tentativo dell'utente, il programma indicherà se il
il numero è maggiore o minore di quello generato. Il programma terminerà quando si saranno verificati i 5
tentativi o quando il numero viene indovinato.
Al termine verrà mostrato il numero di tentativi consumati e quali numeri sono stati.
introdotti.

Esempio del risultato:

Indovina 50
Il numero che devi indovinare è maggiore
Indovina 75
Il numero che devi indovinare è maggiore
Indovina 90
Il numero che devi indovinare è maggiore
Indovina 95
Il numero che devi indovinare è minore
Indovina 93
Il numero che devi indovinare è minore
Intentos intento1 50 intento2 75 intento3 90 intento4 95 intento5 93
Numero 92
Hai perso

Enunciati: Lavoro complementare

Complementario 3.1. Numeri amichevoli

Introduci due numeri interi e positivi e stampa se sono amici. Due numeri amici sono
due numeri interi positivi a e b tali che la somma dei divisori propri di uno è uguale al
un altro numero e viceversa.

Esempio del risultato:

Inserisci il primo numero: 220.


Inserisci il secondo numero: 284.
I numeri 220 e 284 sono amici.
Inserisci il primo numero: 5.
Inserisci il secondo numero: 6.
I numeri 5 e 6 non sono amici.

11
Quaderno degli Esercizi

Complementario 3.2. Genere coppia di numeri primi.

Inserire un numero intero positivo (N), e generare N coppie di numeri primi gemelli (due
i numeri sono primi gemelli se, oltre a essere numeri primi, la differenza tra di essi è
esattamente due).

Esempio del risultato:

Inserisci un numero: 4.
Risultato:
Le coppie di numeri sono: 3 e 5, 5 e 7, 11 e 13, 17 e 19.

Complementario 3.3. Progressione aritmetica.

Inserisci un numero intero e positivo. Controlla la seguente uguaglianza, visualizzando ciascuno


dei termini:

1 3 +2 3+ 3 +⋯
3
= 1+( 2 + 3+. . )2
Esempio del risultato:

Inserire un numero: 5
Risultato: 225. Affermazione corretta.
Controllo:
Uguaglianza 1: 1 + 8 + 27 + 64 + 125 = 225
Uguaglianza 2: 15^2 = 225

Complementario 3.4. Calcolo del numero perfetto

Verificare se un numero inserito è un numero perfetto. Un numero è perfetto se la somma di


i suoi divisori sono uguali al numero.

Esempio del risultato:

Inserisci il numero: 28
Il 28 è un numero perfetto. I suoi divisori sono: 1 + 2 + 4 + 7 + 14.
Inserisci il numero: 5.
Il 5 non è un numero perfetto.

12
Quaderno di Esercizi

Esercizio 4. Sequenze: Liste-Tupla-Stringhe. Strutture di


Controllo II

Obiettivi

• Profondire il lavoro con le sequenze: stringhe, liste e tuple.


• Aggiungere, inserire e cancellare elementi.
• Usare i diversi metodi esistenti per la manipolazione delle sequenze.
• Gestire con disinvoltura una delle strutture di controllo più utilizzate: for.

Enunciati: Lavoro in classe

Esercizio 4.1. Approssimare il valore di e

Il valore di e può essere approssimato con la seguente serie:



1
=
!
0

Sviluppa un programma che chieda all'utente il numero di somme che vuole effettuare per
avvicinarsi al valore di e. Stampa il risultato di ogni iterazione. Mostra il termine calcolato
e il valore della somma e la differenza di essa con il valore della costante e di Python.

Esempio del risultato:

Indica il numero di ripetizioni: 12


0
N= 1 es 1.0 sumatorio 2.0 diferencia 0.7182818284590451
N= 2 es 0.5 sumatorio 2.5 diferencia 0.2182818284590451
N= 3 es 0.16666666666666666 sumatorio 2.6666666666666665 diferencia
0.05161516179237857
N= 4 es 0.041666666666666664 sumatorio 2.708333333333333 diferencia
0,009948495125712054
N= 5 es 0.008333333333333333 sumatorio 2.7166666666666663 diferencia
0.0016151617923787498
N= 6 es 0.001388888888888889 sumatorio 2.7180555555555554 diferencia
0.0002262729034896438
N= 7 es 0.0001984126984126984 sumatorio 2.7182539682539684 diferencia
2,7860205076724043e-05
N= 8 es 2.48015873015873e-05 sumatorio 2.71827876984127 diferencia
3.0586177750535626e-06
N= 9 es 2.7557319223985893e-06 sumatorio 2.7182815255731922 diferencia
3,0288585284310443e-07
N= 10 es 2.755731922398589e-07 sumatorio 2.7182818011463845 diferencia
2,7312660577649694e-08
N= 11 es 2.505210838544172e-08 sumatorio 2.718281826198493 diferencia
2.260552189881082e-09
Nota: Utilizzare la funzione format e importare la costante e e fattoriale.

13
Quaderno di Esercizi

Esercizio 4.2. Stampare senza vocali

Verrà chiesto all'utente una qualsiasi frase e il programma mostrerà quella stessa frase, ma
lmnnd l vcl, y mstrnd l fnl l nmr ttl d ltr, vcls y spz d l
frase fornita dall'utente.

Esempio del risultato:

questa è una prova per sapere come funziona il


programma
st n prb pr sbr cm trbj l prgrm
Número de letras = 54 Número de vocales = 21 y Espacios = 9

Esercizio 4.3: Rimuovere una lettera da una parola

Chiedere una frase all'utente e creare con essa un elenco. Mostrare a schermo le parole che
forma la lista. Chiedi all'utente una lettera ed elimina quella lettera da tutte le parole della lista
mostrando la posizione della parola nella lista e la posizione della lettera nella parola. Mostrare
come rimane la lista e contare il numero di lettere eliminate.

Esempio del risultato:

Il giovedì ha vantaggi molto interessanti rispetto ad altri giorni


non hanno
['el', 'jueves', 'tiene', 'ventajas', 'muy', 'interesantes', 'que', 'otros',
'días', 'no', 'tienen']
Dammi la lettera da eliminare => e
Dalla parola 1-el, viene eliminato nella posizione 1
Dalla parola 2-giovedì, viene eliminata la posizione 3
Dalla parola 2-giovedì, si elimina nella posizione 5
Dalla parola 3-tiene, si elimina nella posizione 3
Dalla parola 3-tiene, si elimina nella posizione 5
Dalla parola 4-vantaggi, si elimina nella posizione 2
Dalla parola 6-interessanti, si elimina nella posizione 4
Dalla parola 6-interessanti, si elimina nella posizione 6
Dalla parola 6-interessanti, si elimina alla posizione 11
Dalla parola 7-che, viene eliminato nella posizione 3
Dalla parola 11-tienen, si elimina nella posizione 3
Dalla parola 11-hanno, viene eliminata la posizione 5
Lista Finale
['l', 'juvs', 'tin', 'vntajas', 'muy', 'intrsants', 'qu', 'otros', 'días',
'no', 'tinn']
Caratteri eliminati 12
Nota: Utilizzare enumerate.

Esercizio 4.4. Squadre

Il programma avrà due elenchi precaricati di nomi, ogni nome rappresenta un


giocatore di una squadra
lisBALON_1 = ["JUAN","ANA","LUZ","TOM","RAÚL","SARA","LUIS","BO","RAFA"]
lisBALON_2 = ["PAM","CRUZ","ARON","GON","TATO","LOU", "JAVE", "TORO", "RAFA",
"CARRIE", "CARLA", "JUAN"]

14
Quaderno degli Esercizi

Il programma dovrà:

• Elenca tutti i giocatori di entrambe le squadre che hanno le seguenti vocali


nel nome: "AEI".
• Elencare tutti i giocatori di entrambe le squadre che hanno due o più vocali
uguali nel nome.
• Mostra i giocatori con nomi ripetuti.
Esempio del risultato:

['JUAN', 'ANA', 'LUZ', 'TOM', 'RAÚL', 'SARA', 'LUIS', 'BO', 'RAFA', 'PAM',
'CRUZ', 'ARON', 'GON', 'TATO', 'LOU', 'JAVE', 'TORO', 'RAFA', 'CARRIE',
'CARLA', 'JUAN']
AEI
['JUAN', 'ANA', 'RAÚL', 'SARA', 'LUIS', 'RAFA', 'PAM', 'ARON', 'TATO', 'JAVE',
'RAFA', 'CARRIE', 'CARLA', 'JUAN']
Vocali Uguali
['ANA', 'SARA', 'RAFA', 'TORO', 'RAFA', 'CARLA']
Nomi Ripetuti
['JUAN', 'RAFA']

Esercizio 4.5. Calcoli con tuple


Il programma chiederà all'utente quanti numeri desidera inserire nella tupla. Saranno richiesti tutti
i numeri e vengono memorizzati nella tupla. Verrà stampato il massimo, il minimo, la differenza tra
massimo e minimo e la media di tutti i numeri dati.

Esempio del risultato:

Totale elementi 6
Número = 3
6
9
34
2
9
(3, 6, 9, 34, 2, 9) Máximo 34 mínimo 2 máximo-mínimo 32 media 10.5

Esercizio 4.6. Massimi locali di una funzione

L'utente inserirà tutti i risultati prodotti da una qualsiasi funzione e il programma


detecterà tutti i massimi locali e li conterà. Una volta che sarà terminato di
inserire tutti i dati. Il programma mostrerà i seguenti calcoli:

• La somma di tutti i dati inseriti.


• La media di tutti i dati inseriti.
• La somma di tutti i dati divisa per il numero di massimi trovati.
• Evitare i possibili errori di inserimento dei dati e di divisione per zero.

15
Quaderno di Esercizi

Esempio del risultato:

Numero di punti della funzione == > 10


2.0
valore della funzione nel punto 2 => 1.5
3.5
valore della funzione nel punto 4 => 2.1
Il valore 3.5 è un massimo locale
valore della funzione nel punto 5 => 6.7
valore della funzione nel punto 6 => 5.8
Il valore 6.7 è un massimo locale
valore della funzione al punto 7 => 0.1
valore della funzione nel punto 8 => 4.7
2.0
Il valore 4.7 è un massimo locale
valor de la función en el punto 10 => 3.5

Sommatoria totale 31.900000000000002, Massimi locali 3,


3.1900000000000004

Esercizio 4.7. Generatore di password

Scrivere un programma in Python che generi password di 8 caratteri in modo casuale.


i caratteri devono essere lettere maiuscole A-Z, 2 caratteri devono essere lettere minuscole a-z, 2 caratteri
devono essere cifre 0-9 e gli ultimi due caratteri speciali (!, ?, *, #,=,-,),ç). Controlla il codice
ASCII.

Password: MBpd55*-
.

Esercizio 4.8. Creare acronimi

Viene chiesta una frase all'utente e viene stampato l'acronimo della stessa (le prime lettere di
ogni parola). Non devono essere incluse (di, del, e).

Associazione dei Consumatori e degli Utenti di Spagna


ACUE

Esercizio 4.9. Verificare una password

Controllare se l'utente inserisce una password corretta. La password è considerata corretta


si tiene minimo 8 caratteri, lettere maiuscole, minuscole, numeri e senza spazi bianchi.
In caso contrario deve indicare errore.

Esempio del risultato:

Inserisci la password: JJPR5


Password non valida.
Inserisci la password: Jjrt5iklu
Password valida.
Enunciati: Lavoro complementare

16
Quaderno di Esercizi

Enunciati: Lavoro complementare

Complemento 4.1. Generare numeri triangolari

Calcolare tutti i numeri triangolari da 1 fino al valore indicato dall'utente. La formula


per calcolare un numero triangolare si:
( + 1)
=
2
Esempio del risultato:

Valor de N ==>10
1.0
3.0
6.0
T 4 = 10.0
15.0
21.0
28.0
T 8 = 36,0
T 9 = 45,0
T 10 = 55.0

Complementario 4.2. Stampare le tessere del gioco del domino

Il programma deve mostrare sullo schermo una rappresentazione delle tessere del domino.
standard.

Esempio del risultato:

0|0 ; 0|* ; 0|** ; 0|*** ; 0|**** ; 0|***** ; 0|****** ;


*|* ; *|** ; *|*** ; *|**** ; *|***** ; *|****** ;
**|** ; **|*** ; **|**** ; **|***** ; **|****** ;
***|*** ; ***|**** ; ***|***** ; ***|****** ;
****|**** ; ****|***** ; ****|****** ;
*****|***** ; *****|****** ;
******|****** ;

Complementario 4.3. Convertire un numero binario in decimale

Il programma chiederà un totale di 10 valori all'utente che dovranno essere uno o zero. Questi valori
rappresenteranno un numero binario. Il programma segnalerà un errore nel caso in cui il valore
introdotto non sia corretto e continuerà a chiedere numeri. Il numero che è stato introdotto
si interpreterà erroneamente nel programma come 0. Verrà mostrata a schermo la conversione
un decimale corrispondente e il numero binario completo inserito dall'utente.

17
Quaderno degli Esercizi

Esempio del risultato:

Dammi un numero binario 9 = 0


Dammi un numero binario 8 = 0
Dammi un numero binario 7 = 1
Dammi un numero binario 6 = a
Il numero non è corretto
Dammi un numero binario 5 = 0
Dammi un numero binario 4 = 1
Dammi un numero binario 3 = 1
Dammi un numero binario 2 = 0
Dammi un numero binario 1 = 1
Dammi un numero binario 0 = 1
Il risultato della conversione del numero 0010011011 è 155
Nota: Non utilizzare la funzione bin.

Complementario 4.4. Pronostico di vendite. Media mobile ponderata

È possibile prevedere il futuro delle vendite di un bene sulla base di dati storici, stime
di marketing, ecc., mediante l'uso di varie tecniche, ad esempio, la media mobile
ponderato, dove viene assegnato un fattore di ponderazione a ciascun dato della media (la sua somma deve
È abituale applicare il fattore di ponderazione (percentuale) maggiore al dato più recente.
La formula è:

Dove:

• ^: Media delle vendite in unità nel periodo t


• Cio: Fattore di ponderazione
• Xt-1: Vendite o richieste reali in unità dei periodi precedenti a t
• n: Numero di dati
Fai un programma che:

• Chiedi all'utente il numero di dati necessari per la previsione. n.


• Richiedi i dati (Xt-1) e il fattore di ponderazione (Ci) per ciascun dato.
• Verifica che la somma dei fattori di ponderazione dei dati sia uguale a
100%. Se questo non viene rispettato, viene inviato un messaggio di errore non appena viene rilevato.
Sì, viene stampata la previsione richiesta.
• Controlla i possibili errori (inserimento dati).

Esempio di un magazzino:

Il magazzino ha determinato che la migliore previsione è determinata con 4 dati e


utilizzando i seguenti fattori di ponderazione (40%, 30%, 20% e 10%). Determinare il
previsione per il mese 5. I dati sono dettagliati nella seguente tabella:

18
Quaderno degli Esercizi

Periodo Vendite (unità) (100000 * 0,1) + (90000 * 0,2) + (105000 * 0,3)


+
Mese 1 100000 10%
(95000 *0,4)
Mes 2 90000 20%

Mes 3 105000 30% Mese 5 = 97500 unità

Mes 4 95000 40%

Esempio del risultato

Dammi n ==> 4
ventas del mes 1: 100000
La ponderazione di 100000.0 è 10
ventas del mes 2: 90000
La ponderazione di 90000.0 è 20
ventas del mes 3: 105000
la ponderazione di 105000,0 è 30
ventas del mes 4: 95000
ponderazione di 95000,0 è 40
La previsione è 97500.0

Complementario 4.5. Creare un elenco

Scrivere un programma in Python che richieda una stringa da tastiera, introduca i caratteri in
una lista senza ripetere caratteri e stampa la lista finale, ossia, i caratteri senza ripetere.
Chiedere ripetutamente all'utente quale carattere vuole eliminare dalla lista, eliminarlo e mostrarlo
la nuova lista. Il programma si fermerà quando l'utente inserirà il carattere “*”.

Esempio del risultato:

Dammi una stringa: questa è la prova di una stringa qualsiasi per vedere come
il programma funziona
['e', 's', 't', 'o', ' ', 'l', 'a', 'p', 'r', 'u', 'b', 'd', 'n', 'c', 'q']
'i', 'v', 'm', 'j', 'g']
Carattere da eliminare o (*): o
['e', 'è', 'l', 'a', 'p', 'r', 'u', 'b', 'd', 'n', 'c', 'q', 'i', '
'v', 'm', 'j', 'g']
Carattere da eliminare o (*): g
['e', 's', 't', ' ', 'l', 'a', 'p', 'r', 'u', 'b', 'd', 'n', 'c', 'q', 'i', ]
'v', 'm', 'j']
Carattere da eliminare o (*): *
es: [‘MMM’, 12, 23, 45, 98]

Complementario 4.6. Verificare NIF

Verificare se il NIF inserito da un utente è corretto. Un NIF è corretto se ha 8 cifre.


y lettera. L'ultima lettera del DNI si calcola a partire dai suoi numeri, si divide il numero per 23 e
il resto è un numero tra 0 e 22. La lettera che corrisponde a ciascun numero la hai in questa
tabella

diciannove
Quaderno degli Esercizi

Complementario 4.7. Conseguire una catena

Il programma ha queste variabili:

aBcdE

1465

Fai in modo che in poche righe il risultato che vedi sullo schermo sia:

• aBcdEaBcdEaBcdEaBcdE14691469

Complementario 4.8. Tipi di caratteri

L'utente inserirà un testo e il programma ci mostrerà la quantità di spazi bianchi


quante ha, la quantità di lettere maiuscole, quantità di lettere minuscole, quantità di
numeri e altri tipi di carattere presenti nel testo inserito.

Esempio del risultato:

Calcola il numero primo di 5


Numero di spazi: 5
Quantità di cifre: 1
Numero di lettere maiuscole: 1
Numero di lettere minuscole, 21
Altri caratteri: 0

Complementario 4.9. Lista di parole


Richiedere all'utente la sua frase e memorizzarla in una variabile string. Separare le parole utilizzando
come riferimento gli spazi tra di loro (non utilizzare Split). Cercare nella lista la parola che abbia
più caratteri ed eliminarla. Ordinare la lista e stamparla al contrario.

Esempio del risultato:

Questa frase è casuale e contiene diverse parole


['esta', 'frase', 'es', 'aleatoria', 'y', 'contiene', 'varias', 'palabras']
lista ['questa', 'frase', 'è', 'e', 'contiene', 'varie']
parole
['contiene', 'es', 'esta', 'frase', 'palabras', 'varias', 'y']
['y', 'varias', 'palabras', 'frase', 'esta', 'es', 'contiene']

20
Quaderno degli Esercizi

Esercizio 5. Matrici. Lista di liste

Obiettivo

• Creare, modificare e attraversare matrici.


• Conoscere le principali funzioni delle matrici: len, append, insert e pop.
• Implementare algoritmi tipici delle matrici.

Enunciati: Lavoro in classe

Esercizio 6.1. Tubazioni

Si registrano i dati di raccolta di 5 tubi d'acqua durante i sette giorni della settimana di
una delle macchine della fabbrica. verrà creata nel programma principale una matrice di due
dimensioni del tipo di dati float di 5x7 che contenga zeri in tutte le sue posizioni.
Si deve:

• Riempire la matrice con numeri casuali di tipo float con valori da


[150,52 a 321,19]. Se arrotondano tutti gli elementi della matrice affinché abbiano
solo due decimali.
• Creare un elenco con la somma dei totali dei litri raccolti di ciascuna delle
cinque tubi.
• Creare un elenco con la somma dei totali dei litri raccolti di ogni giorno.
• Cercare il valore massimo di raccolta di tutti i dati.
• Calcolare quanti litri d'acqua riceve la macchina.

Esercizio 6.2. Calcoli e ricerche su matrici

Un'azienda di produzione di frigoriferi ha diverse fabbriche, delle quali abbiamo la


seguente informazione:

• Città in cui si trova la fabbrica.


• Numero di unità prodotte lo scorso anno.
• Numero di unità difettose prodotte lo scorso anno.
• Costi per unità di ogni frigorifero prodotto (in euro).

Città Produzione totale Difettose Coste unitario (€)


Vigo 731 23 3498,54
Lugo 238 12 3823,35
La Coruna 801 26 3324,12
Santiago 510 17 3325,89

Eseguire quanto segue:

• Creare una matrice con dati fissi che contenga in ogni fila le informazioni di una
fabrica, nell'ordine indicato nella lista precedente.

21
Quaderno degli Esercizi

• Aggiungere il codice necessario per poter aggiungere informazioni su più fabbriche nella
matrice.
• Calcolare la produzione totale congiunta.
• Calcolare la produzione totale congiunta senza errori.
• Mostra un elenco delle città la cui produzione totale supera le 500 unità.
• Mostrare quale sia la fabbrica con la maggiore produzione totale.
• Mostra la fabbrica con la percentuale più bassa di unità difettose. Mostra
anche la percentuale arrotondata a due decimali (usare la funzione round(valore,
núm_decimales).
• Modificare il punto 2 per evitare di inserire città duplicate. In questi casi si
notificherà l'errore all'utente e non verrà richiesta il resto delle informazioni di quella città.

Risultato con i dati della tabella precedente:

A Coruña->801
Produzione totale congiunta: 2280
Produzione totale congiunta senza errori: 2202
Menor % di errori: Vigo -> 3,15%
Ciudades con producción >=500: ['Vigo', 'A Coruña', 'Santiago']

Enunciati: Lavoro complementare

Complementario 6.1. Somma di matrici

Scrivere due matrici delle stesse dimensioni e calcolare la matrice risultante della loro somma.

Complementario 6.2. Prodotto di matrici


Scrivere due matrici e calcolare la matrice risultante del loro prodotto. Si deve tenere in considerazione che
Il numero di colonne della prima matrice deve coincidere con il numero di righe della seconda.

Complementario 6.3.

• Operazione elementare: moltiplicare una riga per uno scalare. Dato uno scalare e un
numero di riga, moltiplicare i valori di essa per lo scalare.

4 1 2 4 1 2
3 3 2 → 9 1 9 63→
1 5 1 1 5 1
• Operazione elementare: somma delle righe. Dati due numeri di riga, sommare al secondo
i valori della prima.

4 1 2 4 1 2
3 3 2 → 0 3 3 2→
2
1 5 1 5 6 3

• Operazione elementare: Scambio di due righe. Dati due numeri di riga,


scambiare i valori di entrambe.

22
Quaderno degli Esercizi

4 1 2 1 5 1
3 3 2 → 3 3 0 22→
1 5 1 4 1 2

• Usando le operazioni elementari precedenti, calcolare il determinante per il


metodo di Gauss.
Inhttp://www.academia.edu/15170735/M%C3%A9todo_de_Gauss_para_calcular_determinantes ehi
un promemoria su come farlo.

23
Quaderno degli Esercizi

Esercizio 6. Funzioni e Moduli

Obiettivi

• Identificare le funzioni più adatte per suddividere un programma.


• Implementare le funzioni identificate in modo ottimale.
• Determinare i parametri che la funzione deve ricevere per raggiungere il suo obiettivo
e i valori di ritorno nel caso sia necessario.
• Comprendere e saper utilizzare le variabili nei programmi: globali e locali.
• Importare un modulo proprio.
• Creare un eseguibile utilizzando PyInstaller.

Enunciati: Lavoro in classe

Esercizio 5.1. Calcolare i secondi totali

Calcola i secondi di un periodo di tempo espresso come ore:minuti:secondi. In


le ore devono essere comprese tra [0-23], i minuti e i secondi tra [0-59]. A tal fine:

• Crea una funzione che chieda all'utente il periodo di tempo (ore, minuti,
secondi). Questa funzione riceverà come parametro di entrada il messaggio che le
mostra all'utente e il range valido di ogni valore. La funzione chiederà il dato
desiderato fino a quando non raggiunge il rango.

• Crea una funzione che riceva quel periodo di tempo e calcoli i secondi.
• Il programma principale chiamerà le due funzioni indicate in precedenza, la
la prima sarà chiamata più di una volta per ottenere tutti i dati, e la seconda
calcolerà i secondi totali. Il risultato verrà mostrato sullo schermo in
programma principale.
Esempio del risultato:

Programma convertitore di secondi


Ore 25
Ore 25
Ore 24
Ore 23
Minuti 60
Minuti 59
Secondi 0
I secondi totali sono 86340

Esercizio 5.2. Calcolare il tempo totale di utilizzo della bicicletta elettrica e il costo

Nel servizio di noleggio biciclette "El paseo" dell'Università La Grande, una volta che il
l'utente si registra al servizio deve indicare alla fine del mese il numero di volte che
utilizzò la bicicletta nel campus e il periodo di tempo ore:minuti:secondi che impiegò in
ogni percorso. Il programma calcolerà il numero totale di secondi per percorso e li
moltiplicherà per il costo. Il costo è di 0,001 €. Sviluppare un programma che:

• Chiedi all'utente quante volte ha utilizzato la bicicletta durante il mese.

24
Quaderno degli Esercizi

• Per ogni volta che l'ha utilizzata, ottenga il periodo di tempo


ore:minuti:secondi. Utilizza le routine create nell'esercizio precedente.
• Guarda i dati in un elenco. Crea una funzione che riceva i secondi di ogni
periodo di tempo e li ho salvati nella lista.
• Crea una funzione che scorra la lista e memorizzi in una stringa i dati di
secondi e costo di ogni percorso, così come i totali accumulati sia di
secondi come costi.
• Mostra il risultato nel programma principale. È qui che sarà dichiarato il
lista e il costo per secondo.
Esempio del risultato:

Programma convertitore di secondi


Numero di volte in cui è stato usato 3
0 Ore 1
0 Minuti 1
0 Secondi 1
1 ora 2
1 Minuto 2
1 Secondi 2
2 Ore 3
2 Minuti 3
2 Secondi 3
0 secondi = 3661 = 3.661
1 secondo = 7322 = 7.322
2 secondi

Secondi Totale 21966 = 21.966

Esercizio 5.3. Operazioni con punti (x,y)

L'utente inserirà due punti qualsiasi (x1,y1) e (x2,y2) e potrà eseguire diverse
operazioni: distanza e punto medio.

Per questo:

• Si creerà una funzione che richiede un punto e lo memorizza in una variabile di tipo
tupla.
• Creare una funzione che riceva i due punti come parametro di ingresso e restituisca
la distanza tra entrambi.
• Funzione che calcola il punto medio dei due punti di ingresso.
• Funzione che stampa le diverse opzioni del programma (menu) sullo schermo.
• Funzione che legge l'opzione scelta dall'utente e verifica che sia nell'intervallo
desiderato, altrimenti continuerà a richiederla (può riutilizzare la funzione del
esercizio 1).
• Nel programma principale assemblate le diverse chiamate alle funzioni per
ottenere un programma funzionale.

25
Quaderno di Esercizi

Esempio del risultato:

Lavorare con due punti


1. Chiedere punti
2. Punto medio
3. Distanza
4. Uscire
Opzione: 1
Dammi X 4
Dammi Y 1
Dammi X 5
Dammi Y 7
(4,1)(5,7)
Lavorare con due punti
1. Chiedere punti
2. Punto medio
3. Distanza
4. Uscire
Opzione: 2
Il punto medio è => ( 4.5 , 4.0 )
Nota: Puoi implementare altre routine per ottenere lo stesso risultato.

Esercizio 5.4. Ordinare tre numeri

Saranno ordinati tre numeri inseriti dall'utente in modo crescente. Sarà implementato
una funzione che riceve come parametro solo due numeri e li restituisce ordinati. Il resto di
le istruzioni saranno nel programma principale.

Esempio del risultato:

dammi un numero: 5
dammi un numero: 3
dame un número: 1
ordinati ==> 1 3 5

Esercizio 5.5. Crea l'eseguibile del programma dell'esercizio 4

Esercizio 5.6. Crea un modulo

Crea un modulo con la funzione chiediVal. Questa funzione riceve una stringa, un valore minimo
e uno massimo. La funzione verifica che la stringa possa essere convertita in numerico e che si
si trova all'interno dell'intervallo stabilito. Questa funzione restituisce due valori vero o falso (se il valore è
adeguato o meno) e il valore numerico corrispondente. Utilizza questo modulo negli esercizi
importandolo.

Enunciati: Lavoro complementare

Complementario 5.1. Calcolare il tempo totale di utilizzo della bicicletta elettrica

Nell'esercizio 2 ristruttura il programma per memorizzare tuple che contengano i tre dati
del periodo di tempo.

Inoltre:

• Implementare una funzione che percorra la lista di periodo e ne crei un'altra


memorizzando i secondi totali della durata del periodo.

26
Quaderno degli Esercizi

• Creare una funzione che ordini le due liste in modo ascendente.


• Creare una funzione che sommi tutti gli elementi della lista dei secondi totali.
• Mostrare a schermo, l'elenco dove è memorizzato il periodo di tempo, i
secondi di ogni periodo e il totale dei secondi.
Esempio del risultato:

Programma convertitore di secondi


Numero di volte in cui è stato usato 3
0 Ore 2
0 Minuti 20
0 Secondi 15
1 Ora 1
1 Minuto 12
1 Secondi 33
2 Ore 1
2 Minuti 9
2 Secondi 45
((1, 9, 45), 4185)
((1, 12, 33), 4353)
((2, 20, 15), 8415)
Totale dei secondi 16953
Nota. Possono essere utilizzate le funzioni sort, zip, ecc.

Complementare 5.2. Lavorando con punti

Utilizza il programma sviluppato nell'esercizio 4. Chiedi all'utente un numero di punti


qualsiasi. Salva tutti i punti dati in un elenco. Aggiungi le seguenti opzioni al
menù

• Calcolare le distanze tra ogni coppia di punti dati consecutivamente.


• Calcolare il punto medio tra ogni coppia di punti consecutivi.
• Mostra la distanza maggiore.
Esempio del risultato:

Lavorare con due punti


1. Chiedere punti
2. Mostrare
3. Uscire
Opzione: 2
((2, 2), 0, 0)
((4, 5), 3.605551275463989, (3.0, 3.5))
((7, 5), 3.0, (5.5, 5.0))
((9, 12), 7.280109889280518, (8.0, 8.5))
La distanza maggiore è 7.280109889280518

Complementario 5.3. Tre in linea

Hai il codice completo del gioco Tre in linea, copialo e controlla che funzioni.
Documenta i parametri di input che riceve ciascuna delle funzioni del gioco, e i
valori che restituisce, riassumi anche brevemente cosa fa ciascuna di esse. Inoltre,
Contesta lo siguiente:

• Dettaglia cosa fa la funzione chiamata: computer_move().


• Come si decide quale carattere rappresenta l'utente e quale il computer (quale funzione).

27
Quaderno degli Esercizi

• Cosa si fa per indicare che il lancio del giocatore è valido (quali funzioni si occupano)
e come lo fanno).

"""
Tre in linea
"""
import random
board=[i per i in range(0,9)]
player
#Angolo, Centro e altri
moves=((1,7,3,9),(5,),(2,4,6,8))
Combinazioni vincenti
winners=((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))
Tabella
tab=intervallo(1,10)
def stampa_griglia():
x=1
per i in board:
|
se x%3 == 0:
end
se i != 1:
fine+='---------\n'
char
se i in ('X','O'):
i
x+=1
stampa(campione, fine=fine)
def seleziona_carattere():
chars=('X','O')
se random.randint(0,1) == 0:
return chars[::-1]
ritorna caratteri
def può_muovere(brd, giocatore, mossa):
se muovi in tab e brd[muovi-1] == muovi-1:
restituire Vero
restituire Falso
def può_vincere(brd, giocatore, mossa):
places=[]
x=0
per i in brd:
se i == giocatore: luoghi.append(x);
x+=1
vero
per tup nei vincitori:
win=True
per ix in tup:
se brd[ix] != giocatore:
win=False
pausa

se vincere == Vero:
interrompere
ritorna vincitore
def fare_mossa(brd, giocatore, mossa, annulla=False):
se può_muovere(brd, giocatore, mossa):
brd[move-1] = giocatore
vinci=può_vincere(brd, giocatore, mossa)
se annulla:
brd[move-1] = sposta-1
ritorna (Vero, vinci)
(False, False)

28
Quaderno degli Esercizi

def mossa_computer():
move=-1
per i in range(1,10):
se fai_mossa(tavolo, computer, i, Vero)[1]:
i
fermare
se mossa == -1:
per i in range(1,10):
se fai_mossa(tavolo, giocatore, i, Vero)[1]:
i
pausa
se sposta == -1:
per tup in mosse:
per mv in tup:
se muovi == -1 e puoi_muovere(scheda, computer, mv):
muovi
interruzione
ritorna esegui_mossa(tabellone, computer, mossa)
def spazio_esiste():
return board.count('X') + board.count('O') != 9
giocatore, computer = seleziona_personaggio()
print('Il giocatore è [%s] e il computer è [%s]' % (player, computer))
%%% Pareggio ! %%%
mentre esiste_spazio():
stampa_pav_board()
print('#Tira ! [1-9] : ', end='')
move = int(input())
moved, won = fai_mossa(tabellone, giocatore, mossa)
se non spostato:
print(' >> Numero incorretto! Riprova!')
continua
se vinto:
*** Congratulazioni! HAI VINTO! ***
pausa
elif computer_move()[1]:
=== PERDISTE! ===
interrompi;
stampa_matrice()
stampa(risultato)

29
Quaderno degli Esercizi

Esercizio 7. Persistenza: File

Obiettivo

• Creazione e manipolazione di dati in un file.


• Creazione e manipolazione dei dati con sqlite 3.

Enunciati: Lavoro in classe

Esercizio 7.1. File

Supponiamo di avere un file chiamato Dati.txt in cui sono salvati i


dati di un laboratorio dalle 8:00 del mattino fino alle 20:00 di un giorno, i dati
si prendono all'ora in punto e a mezz'ora in modo ininterrotto. I dati che vengono raccolti
figlio

• Ora in formato di ore e minuti come numeri interi.


• Pressione atmosferica in millibar in forma di numero intero senza decimali.
• Temperatura in gradi Celsius in forma di numero con 1 decimale.
• Umidità relativa in percentuale sotto forma di un numero con 2 decimali.
• Numero di persone presenti nel laboratorio.
• Come esempio di un dato del file potrebbe essere:
8;30;976;17.1;68,35;9

Partendo dai dati del file precedente, si vuole un'applicazione informatica che mostri:

• Qual è stata la media di persone nel laboratorio?


• Qual è stato il numero massimo di persone nel laboratorio?
• A che ora è stato registrato il numero massimo di persone nel laboratorio?
• Qual è stata la temperatura più bassa registrata in laboratorio?
• Qual è stata la temperatura media nel laboratorio?

Di seguito è riportato il codice dell'applicazione che soddisfa le funzionalità


anteriormente descritas:
fichero=open("c:/tmp/datos041118.txt", "r")
totalpersonas=0
contador=0
massimodipersone=0
0
per linea in file:
lista=linea.split(";")
ora=lista[0]
lista[1]
lista[2]
temperatura=float(lista[3])
umidità=float(lista[4])
persone=float(lista[5])
totalpersonas+=float(personas)
se float(personas) > máximodepersonas:
massimodepersone=float(persone)

30
Quaderno degli Esercizi

ora + ':' + minuto


se contador==0:
mínimotemperatura=float(temperatura)
se float(temperatura) < mínimotemperatura:
mínimotemperatura=float(temperatura)
totaltemperatura+=float(temperatura)
contador+=1
Stampa("Media di persone in laboratorio: " + str(totalpersone/contatore))
print("Numero massimo di persone nel laboratorio: " + str(máximodepersonas))
+ " a las " + str(horamáximodepersonas)
print("Temperatura più bassa in laboratorio: " + str(minimotemperatura))
print("Media della temperatura nel laboratorio: " +
str(totaleTemperatura/contador))
fichero.chiudi()

Si richiede di realizzare un programma che:

• Richiedi il nome del file. Successivamente richiedi i dati da salvare.


informazioni del tipo dell'esempio nel file citato.
• Eseguire il programma dell'esempio sul file che abbiamo registrato e osservare
si danno i risultati corretti.
• Modifica il programma del punto 1 per chiedere all'utente se vuole creare un
nuovo file di dati o aggiungere dati a uno esistente. Assicurati di non cancellare
per errore uno esistente e di quello che esiste al quale si vuole aggiungere. Di seguito,
riavvia il programma di esempio e osserva se i risultati ottenuti sono
corretti.
• Risolvere utilizzando funzioni.

Per sapere la directory di lavoro attuale possiamo includere:


importa os.path
ruta=os.getcwd()
Per verificare se il file esiste:

se os.path.exists(file):
print("il file esiste")

Enunciati: Lavoro complementare

Complementario 7.1. Realizzare gli esercizi proposti nel Quaderno degli esercizi risolti
corrispondenti alla parte di file.

31
Quaderno degli Esercizi

Esercizio 8. tkinter. Interfacce Grafiche. Parte I. Introduzione

Obiettivi:

• Gestione e posizionamento di alcuni widget.


• Utilizzo dei più comuni attributi.

Introduzione
Python implementa interfacce grafiche utente (GUI - Interfacce grafiche utente) utilizzando
librerie, una delle più utilizzate è la libreria tkinter che è inclusa in Python come un
pacchetto standard, quindi non è necessario installare nulla per utilizzarlo. tkinter è l'acronimo
per tk interface e permette di generare interfacce in modo rapido e semplice.

Passi per creare un'applicazione con tkinter:

1. Importare il modulo tkinter


2. Creare la finestra principale

3. Aggiungere i widget necessari alla finestra


4. Includere i trigger nei widget (rispondere agli eventi)
In questo esercizio ci concentreremo sui primi tre passi, gli eventi e come rispondere a
Lo vedremo nella seconda parte.

Il modulo di tkinter si importa come gli altri moduli utilizzando la sentenza import.

da tkinter import *
importa tkinter come tk

I due metodi precedenti fanno la stessa cosa, ma è molto comune vedere il secondo dove si
renomina tkinter come tk.
Per inizializzare tkinter dobbiamo creare la finestra principale (quella che contiene tutti i widget)
e mantenere il programma in esecuzione. I due metodi che dobbiamo includere sono:

1. Tk(): crea la finestra principale, è la superficie (o contenitore) su cui si svilupperà


posizionare i componenti (widget).
• titolo della finestra
• geometry("WxH±X±Y"): dimensioni e spostamento
• iconbitmap("file.ico"): cambiare l'icona
• quit termina il ciclo principale

• destroy() : chiude la finestra


2. mainloop(): viene utilizzato per eseguire l'applicazione. È un ciclo infinito che riceve e
risponde agli eventi finché la finestra principale non si chiude.

32
Quaderno degli Esercizi

Nel terzo passo dobbiamo decidere quali widget vogliamo che facciano parte della nostra
finestra, e dare loro l'aspetto e la posizione che vogliamo nella stessa. Ogni widget ha
attributi propri.

Widget
Sono piccoli programmi che vengono utilizzati per aggiungere funzioni, semplificare o automatizzare
quelle azioni che vengono svolte con frequenza. Per dare contenuto e forma al nostro
nella finestra includiamo i widget. Elencheremo i widget che utilizzeremo nell'esercizio e alcuni di
i suoi attributi.

Etichetta: si traduce come etichetta e si riferisce a una scatola dove può essere mostrato del testo o
immagini. L'immagine o il codice mostrato può essere aggiornato durante l'esecuzione.

Etichetta(ventana, opzione=valore)
immagine

consente sia di mostrare informazioni all'utente sia di ottenerle.

Voce(ventana, opzione=valore)

Pulsante: possono contenere testo o immagini e possono essere associati a funzioni o metodi. Facendo
clic su di essi tkinter si occupa di chiamare automaticamente la funzione associata.

Pulsante(ventana, opzione=valore)
immagine

RadioButton: Consente all'utente di scegliere un'unica opzione dal insieme di opzioni proposto.
Si può associare un metodo che verrà eseguito quando l'utente sceglie l'opzione. Ogni gruppo
i pulsanti radio devono essere associati alla stessa variabile; quando si seleziona uno di essi,
il valore della variabile associata cambia.
opt= PulsanteDiOpzione(ventana, variabile=v, valore=1,… opzione=valore)

variabile: variabile di controllo a cui è associata

Seleziona una o più opzioni dal set proposto. Ha due valori


possibili: selezionato e non selezionato.

chk = CheckButton(ventana, variable=v, ..opzione=valore)

variabile di controllo a cui è associato

Frame: agisce come contenitore di widget per creare un raggruppamento logico.

33
Quaderno di Esercizi

fr=Frame(ventana, opzione=valore)
titolo

Classe PhotoImage: questa classe viene utilizzata per mostrare immagini nei widget, come ad esempio, etichette,
bottoni, tela e tipo di testo. Lavora con GIF e PGM/PPM.

immagine = PhotoImage(file=fichero)

Attributi comuni che si applicano a quasi tutti i widget

• bd: larghezza del bode.


• colore di sfondo.
• chiamata a una funzione.
• font: fonte del testo. Ciò che possiamo indicare della fonte è:
ofamily: nombre: Arial, Courier, Comic Sans MS, Fixedsys, MS Sans Serif,
MS Serif, Symbol, System, Times e Verdana.
dimensione
NORMALE o GRASSETTO
oslant: NORMAL o ITALIC
ounderline: 1(subrayar) o 0(no subrayar)
1(tachar) o 0 (no tachar)
• fg: colore del testo
• immagine: immagine che si vuole mostrare.
• larghezza: stabilire larghezza.

• stabilire alto
• testo che mostra l'etichetta
• giustifica il testo.
• composto: utilizzare contemporaneamente testo e immagini: INFERIORE, SINISTRA, DESTRA e
TOP.
• pady, padx, ipady, ipadx: specificano (in pixel) i margini esterni e interni
di un elemento.

Configura

Può essere definito l'aspetto dei widget dalla loro istanza o utilizzando configure per
cambiare il valore di uno o più attributi del widget.

widget.configure(opzione=valore)

34
Quaderno degli Esercizi

Posizionare i widget nella finestra


Tkinter dispone di tre classi per gestire la posizione dei widget. Ci concentreremo su
le prime due:
1. pack(fill=Y, expand=1): organizza i widget in blocchi.
• riempi: affinché il widget occupi tutto lo spazio a lui assegnato. Può espandersi
X, Y e ENTRAMBE (entrambe le direzioni).
• indica che venga assegnato lo spazio extra al widget, se expand ha un valore
diverso da 0.
• Indica in quale lato del padre si dispiega: TOP (di default), BOTTOM
SINISTRA o DESTRA.
2. grid(): i widget vengono organizzati come in una tabella divisa in righe e colonne. Ogni
la cella contiene un widget che è centrato. Si inizia dalla posizione 0 sia
per righe come per colonne.
• riga
• colonna
• per attaccare il widget a uno dei bordi: N, S, E, O (nord, sud, est e ovest)
ovest).
• colspan: che il widget occupi più di una colonna.
• rowspan: che il widget occupi più di una riga.
3. place(): i widget si sistemano nelle posizioni specifiche del programmatore.

Esempio 1. Inizio

Si creerà solo una finestra di dimensioni specifiche.


importiamo il pacchetto
da tkinter import Tk
Creiamo una finestra
Finestra
#stabiliamo il titolo della finestra
ventana.title("Un programma diverso")
#Stabiliamo la dimensione della finestra
ventana.geometry("400x400")
#Mostriamo un'icona nella finestra
ventana.iconbitmap("robot.ico")
#mostriamo la finestra
ventana.mainloop()

Risultato dell'esecuzione

Esempio 2. Includere widget


Vengono aggiunti più widget alla finestra precedente. L'idea è di creare un'interfaccia simile a quella che si
mostra. Verrà utilizzato il metodo pack per posizionare i widget. Puoi usare altri font e
colori.

35
Quaderno degli Esercizi

da tkinter importare *
Tk()
Un programma diverso
ventana.geometry("550x550")
ventana.config(bg="azzurro")
Scheda Tecnica
20),bg="grigio", fg="nero".pack()
Dati più importanti del personaggio
font=("Arial Bold", 15), fg="red").pack()
PhotoImage(file="NAO-OJOS.gif")
lblimmagine = Label(finestra, immagine=immagine)
lblimagen.pack()
lblModelo = Label(ventana, text="Modello", font=("Arial Bold", 10)).pack()
txtModelo = Entry(ventana, width=10).pack()
Caratteristiche
10)).pack()
txtCarac = Entry(ventana,width=30).pack()
Unità
txtUni = Entry(ventana, width=10).pack()
Label(ventana, text="Prezzo", font=("Arial Bold", 10)).pack()
txtPrezzo = Entry(ventana, width=10).pack()
Button(ventana,text="Accetta",width=10,fg="rosso").pack(side=RIGHT)
btnSalir = Button(ventana,text="Salir",width=10,fg="red",
command=ventana.quit).pack(side=DESTRA)
ventana.mainloop()
ventana.destroy()

Risultato dell'esecuzione

Enunciati: Lavoro in classe

Esercizio 8.1. Modificare

Cambia l'interfaccia dell'esempio 2 per ottenere il seguente risultato, utilizzando grid.

36
Quaderno degli Esercizi

Enunciati: Lavoro complementare

Complementario 8.1. Agenda

Progetta la tua interfaccia per memorizzare i tuoi contatti. L'interfaccia deve contenere quanto segue
información: foto de la persona, nombre, apellidos, edad, sexo, teléfono, correo electrónico.
Puoi utilizzare il grid o il pack per posizionare i widget.

37
Quaderno di Esercizi

Esercizio 8. Interfacce Grafiche Utente. Parte II

Obiettivi

• Utilizzare variabili di controllo.


• Invocazione e implementazione di funzioni
• Bosquejo seguendo orientamento agli oggetti

Variabili di controllo

Sono oggetti speciali che si associano ad alcuni widget (testo, radiobutton, checkbutton, ecc.)
per memorizzare i loro valori e facilitare la loro disponibilità in altre parti del programma. Se il
la variabile cambia, il widget collegato cambia anche e viceversa. Tkinter ha quattro tipi di
le variabili e dispongono di tre metodi: set(), get() e trace. Il primo stabilisce il valore, il
il secondo consulta e il terzo monitora i cambiamenti delle variabili. I tipi di variabili
figlio

• BooleanVar(). Vero o Falso.


• StringVar(). Inizializza a "".
• IntVar(). Inizializza a 0.
• DoubleVar(). Inizializza a 0.0

#Per dichiararle: #Dare valore alle variabili #Recuperare valore


IntVar() entero.set(100) print("Valore di ", entero.get())
StringVar() cadena.set("GFG") print("Valore di ", cadena.get())
booleano = BooleanVar() booleano.set(False) print("Valore di ", booleano.get())
DoubleVar() flotante.set(10.36) stampa("Valore di ", flotante.get())

Il metodo trace() viene utilizzato per "rilevare" quando una variabile viene letta, cambia valore o è
borrada

widget.trace(tipo, funzione)
In tipo si indica cosa si vuole controllare: 'r' lettura di variabile, 'w' scrittura di variabile e 'u'
borrado. Il secondo argomento indica la funzione che verrà chiamata quando si verifica l'evento
che si sta controllando.

Esempio 1: Aggiungendo più widget, variabili di controllo e funzioni


Utilizzeremo l'applicazione precedente (Parte I) e aggiungeremo due tipi di controlli: pulsanti di opzione
controlla il pulsante, con le rispettive variabili di controllo. Verrà creata una funzione che stampi che
Le opzioni sono selezionate per mostrare come il cambiamento nelle selezioni influisca su
variabili di controllo.
Il programma verificherà che le unità abbiano un valore di tipo intero e che il prezzo abbia
un valore di tipo flottante. Verrà aggiunta un'etichetta per visualizzare il risultato della moltiplicazione
delle unità per il prezzo e un'altra etichetta dove verranno visualizzati i messaggi di errore in caso
di averli. Ogni volta che il valore delle unità o il prezzo viene modificato dall'utente, si

38
Quaderno degli Esercizi

verificherà prima che il valore sia del tipo adeguato, se lo è, il totale viene calcolato e mostrato
nella etichetta corrispondente, in caso contrario, viene visualizzato il messaggio di errore. A tal fine, si
creeranno anche le variabili di controllo per i widget: prezzo e unità, si utilizzerà il
metodo trace per sapere quando cambiano il valore.
Quando l'utente preme il pulsante Accetta, verrà verificato che i campi siano diversi da
bianco (Nome, Caratteristiche e Unità), se qualcuno è vuoto verrà inviato il messaggio di
errore nell'etichetta creata per esso, se hanno un valore, verrà mostrato: PRONTO!!!. Il codice sarebbe:

Risultato dell'esecuzione

dalla tkinter importare *


Tk()
finestra.titolo("Un programma")
ventana.geometry("560x390")

#Creazione delle variabili


con ingresso=15
IntVar()
control=BooleanVar()
BooleanVar()
unita = IntVar()
StringVar()
DoubleVar()
DoubleVar()
StringVar()
StringVar()
colorN=0

#funzioni
def controllare(*args): #dichiarazione della funzione con i parametri per
difetto
provare
mensaje.set(" ") #pulire l'etichetta del messaggio
uni=int(unita.get()) #Ottenere i valori delle variabili e
convertirli
prec=float(precio.get()) #al tipo di dato
total.set(round(float(prec*uni),2)) #Calcolare il prezzo finale e
arrotondarlo
eccetto:
mensaje.set("ERRORE") #Mostrare l'errore
total.set(0) # Lascia 0 nel totale
#Mostra perché le opzioni sono selezionate, ogni volta che l'utente seleziona
una
def Stampare():
print("Usato " + str(usato.get())) #Indica quale opzione è selezionata
print("Batterie " + str(batteries.get())) #Mostra vero o falso se sono presenti
marcate le batterie

39
Quaderno degli Esercizi

print("Controllo " + str(control.get()))#Mostra vero o falso se sono presenti


selezionata l'opzione di controllo
Se i campi hanno valori allora PRONTO e in altro caso indica di completare
def Accettare():
se modelo.get() == "" o carac.get() == "" o unidades.get() == "" o
precio.get()=="" :
mensaje.set("MANCANTE COMPLETARE") #Mostra l'errore
altro:
mensaje.set("LISTO") #Mostrare l'errore

def CambiaColores(evento):
colores=["azure","cadet blue","medium sea
green","goldenrod","salmon","maroon","PeachPuff3","SteelBlue3"]
colorM=len(colori)
coloreN globale
se colorN==colorM-1:
colorN=0
altrimenti:
colorN+=1
ventana.config(bg=colores[colorN])

#Imposta un valore predefinito


usato.set(1)
#Indicare il monitoraggio delle variabili
unidades.trace('w',comprobar)
precio.trace('w',comprobar)

#Creiamo l'etichetta e la mettiamo nella finestra


Scheda Tecnica
15),bg="prugna3", fg="grigio45")
Dati più importanti del personaggio
("Arial Bold", 15)
PhotoImage(file="NAO-OJOS.gif")
lblimagen = Label(ventana, image=imagen, bg="grigio")
Nome
BluReale2
Entrata(ventana, larghezza=withEntry, fg="blue2", variabile di testo=modelo)
Caratteristiche
fg="RoyalBlue2")
txtCarac = Entry(ventana,width=withEntry,fg="blue2",textvariable=carac)
Unità
BluReale2
Entry(ventana,width=withEntry,fg="blue2",textvariable=unidades)
Etichetta(ventana, testo="Prezzo", font=("Arial Bold", 10))
fg="RoyalBlue2"
txtPrezzo
Totale
fg="RoyalBlue2")
Entry(ventana, width=withEntry, text='',
blu2
Prezzo
"Grassetto", 10), textvariable=mensaje, fg="rosso", bg="rosa")
Nuove etichette per i pulsanti di opzione
Radiobutton(ventana, text="Nuovo", font=("Arial Bold",
usato
Radiobutton(ventana, text="Semi", font=("Arial Bold",
usato
Radiobutton(ventana, text="Usato", font=("Arial Bold",
9) variabile=usato, valore=3, comando=Stampa
Nuove etichette per i check
Checkbutton(ventana, text="Controllo", font=("Arial Bold",
9),variabile=controllo, comando=Stampare)
Checkbutton(ventana, text="Baterie", font=("Arial Bold",
batterie
Button(ventana,text="Accetta",width=10,fg="rosso",command=Accettare)
Button(ventana,text="Uscire",width=10,fg="rosso",
ventana.quit

40
Quaderno degli Esercizi

#mostriamo le etichette
lblFicha.grid(riga=0,colonna=1,colspan=3,padx=3,pady=5,ipadx=3,ipady=3)
lblPresenta.grid(riga=1, colonna_span=4)
lblimagen.grid(colonna=0, riga=2, colspan=2, rowspan=10, padx=10, pady=10, ipadx=3,
ipady=3)
lblNome.grid(fila=3,colonna=2,sticky=W)
txtModelo.grid(riga=3,colonna=3,adesivo=W)
lblCarac.grid(riga=4,colonna=2,appiccicoso=W)
txtCarac.grid(riga=4,colonna=3,aderente=W)
lblUni.grid(riga=5,colonna=2,adesivo=W)
txtUni.grid(row=5,column=3,sticky=W)
lblPrecio.grid(row=6,column=2,sticky=W)
txtPrezzo.grid(row=6,column=3,sticky=W)
lblTotalE.grid(row=7,column=2,sticky=W)
txtTotal.grid(riga=7,colonna=3,adesivo=W)
lblMensaje.grid(row=8,column=2,columnspan=2,pady=5)
optNuevo.grid(row=9,column=2,sticky=W)
optSemi.grid(row=9,column=3,sticky=W)
optUsado.grid(row=9,column=4,sticky=W)
chkControl.grid(riga=10,colonna=2,sticky=W)
chkBaterias.grid(riga=10,colonna=3,sticky=W)
btnAccettare.grid(riga=11,colonna=2)
btnSalir.grid(riga=11, colonna=3)

lblimagen.bind('<Pulsante-1>',CambiaColores)

ventana.mainloop()
ventana.destroy()

Enunciati: Lavoro in classe

Esercizio 8.2. Codificare l'agenda

Codificherai il comportamento desiderato nell'agenda che hai progettato nell'esercizio di


introduzione.

• Ogni volta che viene modificato il campo età, controllare che il nuovo dato sia un tipo
di dato intero in caso contrario, inviare un messaggio di errore.
• Controlla che il numero di telefono abbia 9 caratteri e che siano tutti
essere numerici.
• Fai lo stesso con il campo email, per indicare che il campo è
corretto, basta che abbia il segno “@” e un punto.
• Aggiungi tre pulsanti: Pulisci, Accetta, Esci.
• Nel pulsante pulire si schiariscono tutti i campi.
• Nel pulsante Accetta controlla che tutti i campi abbiano informazioni.

Nota: Utilizza il codice che hai da altri esercizi

41
Cuaderno di Esercizi

Esercizio 8.3. Calcoli di proiettile

Un proiettile sparato a una velocità vo e a un angolo a (radianti) seguirà una traiettoria


descritta dalle seguenti formule, dove t è il tempo e g è la gravità:

x = vo*cos(a)*t

y = vo*sin(a)*t - 0.5*g*t**2

• Implementare un'applicazione per finestre che consenta all'utente di inserire i


parametri nei campi di input, eseguire 3 tipi di calcoli premendo invia
pulsanti e mostrare i risultati in etichette:
• Distanza e tempo di impatto a partire da velocità e angolo di uscita utilizzando un
anelli.
• Distanza e tempo di impatto a partire da velocità e angolo di uscita utilizzando
formula.
• Angolo di uscita e tempo di impatto a partire dalla velocità e dalla distanza di impatto.

Eventi e collegamenti

Le applicazioni tkinter si trovano all'interno di un ciclo, il mainloop e gli eventi sono eventi.
che vengono comunicati e che hanno origini diverse: premere il mouse, cambiare la dimensione di
un widget, premere tasti, ecc. (molti degli eventi sono prodotti dall'utente). Python
registra l'evento e ci consente di collegarlo a un widget ed eseguire una funzione per rispondere a
detto evento. Per collegare l'evento:

widget.bind(evento, gestore)

Se l'evento indicato viene registrato nel widget, viene effettuata una chiamata al gestore e quindi a
la funzione indicata.

Alcuni Eventi

• <Button-1> Se premi un pulsante con il mouse, il button-1 è il pulsante sinistro.


il button-2 è quello di mezzo (se disponibile) e il button-3 è il pulsante a destra.

42
Quaderno degli Esercizi

• Il mouse si muove mentre il pulsante 1 (sinistro) è premuto.


Si dispone di B2-Motion, B3-Motion.
• <ButtonRelease-1> Si rilascia il pulsante uno del mouse.
• <Double-Button-1> Si fa doppio clic sul pulsante-1
• Il puntatore del mouse entra nel widget.
• Il cursore del mouse esce dal widget.
• Se premi Invio.
• L'utente preme qualsiasi tasto.

L'oggetto evento
È un oggetto standard di Python che ha attributi che descrivono l'evento che si è verificato.
prodotto. Alcuni attributi dell'evento sono:

• Il widget che genera l'evento.


• x, y: Coordinate della posizione del mouse.
• Tipo di evento.

Esempio 2. Clicca sull'immagine

Ogni volta che l'utente clicca sull'immagine, il colore dello sfondo della finestra cambierà.
creerà un elenco con colori casuali, ogni volta che l'utente clicca verrà scelto il successivo
colore. Il codice che dobbiamo includere è:

#Routine that changes the background color of the widget


#dichiarazione della variabile che mantiene il colore attuale.
0

def CambiaColores(event):
colores=["azure","cadet blue","medium sea
green","goldenrod","salmon","maroon","PeachPuff3","SteelBlue3"]
colorM=len(colori)
coloreGlobaleN
se colorN==colorM-1:
0
altro:
colorN+=1
ventana.config(bg=colores[colorN])

lblimagen.bind('<Button-1>',CambiaColores) #Collega l'etichetta immagine con il


clic del mouse

43

Potrebbero piacerti anche