Molto probabile che siano ampi margini miglioramento
Esercizi di Python
Per studenti di
Sperimentazioni di Fisica I Modulo A Corso di Laurea in AstronomiaA. Baruffolo
INAF — Osservatorio Astronomico di Padova &
Universit` a di Padova — Dipartimento di Fisica e Astronomia
| 1 | 4 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 5 | ||||||||||||
| 3 |
|
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 5 | ||||||||||
|
5 | ||||||||||||
| . . . . . . . . . . . . . . . . . . . | 5 | ||||||||||||
| . . . . . . . . . . . . . . . . . . . | 5 | ||||||||||||
|
5 | ||||||||||||
|
. . . . . . . . . . . . . . . . . . . . . . . . . . | 6 | |||||||||||
| 9 | |||||||||||||
| 4 | 9 | ||||||||||||
| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 9 | ||||||||||||
|
. . . . . . . . . . . . . . . . . . . . . . . . . . . . | 9 | |||||||||||
|
. . . . . . . . . . . . . . . . . . . . . . . . . . . . | 9 | |||||||||||
| 10 | |||||||||||||
| 13 | |||||||||||||
| 5 | . . . . . . . . . . . . . . . . . . | 13 | |||||||||||
|
. . . . . . . . . . . . . . . . . | 13 | |||||||||||
|
13 | ||||||||||||
| . . . . . . . . . . . . . . . . . . . . . . . . . | 13 | ||||||||||||
| 14 | |||||||||||||
|
|
14 | |||||||||||
| . . . . . . . . . . . . . . . . . . . . . . . . . . | 14 | ||||||||||||
| 15 | |||||||||||||
|
15 | ||||||||||||
|
. . . . . . . . . . . . . . . . . . . . . . | 15 | |||||||||||
| 16 | |||||||||||||
| . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 16 | ||||||||||||
|
16 | ||||||||||||
|
. . . . . . . . . . . . . . . . . . . . . . . . . . . . | 16 | |||||||||||
| 17 | |||||||||||||
| 17 | |||||||||||||
|
|
17 | |||||||||||
| . . . . . . . . . . . . . . . . . . | 18 | ||||||||||||
| . . . . . . . . . . . . . | 18 | ||||||||||||
| 18 | |||||||||||||
|
|
18 | |||||||||||
| 19 | |||||||||||||
| 19 | |||||||||||||
|
26 | ||||||||||||
|
26 | ||||||||||||
| 26 | |||||||||||||
|
26 | ||||||||||||
|
27 | ||||||||||||
| . . . . . . . . . . . . . . . . . . . . . . . . . . | 27 | ||||||||||||
Esercizio 40 Iterazioni con if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Esercizio 41 Ciclo di comandi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Esercizio 45 Formula di Erone . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Esercizio 46 Radici di equazione di secondo grado . . . . . . . . . . . . . . . . . 37
Esercizio 51 Da decimale a binario . . . . . . . . . . . . . . . . . . . . . . . . . 39
Esercizio 52 Da decimale a binario, ricorsivamente . . . . . . . . . . . . . . . . 40
Esercizio 57 Numeri di Thabit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Esercizio 58 Teorema di Pitagora . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Esercizio 63 Algoritmo di Horner ricorsivo . . . . . . . . . . . . . . . . . . . . . 43
Esercizio 64 Giorno Giuliano . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Esercizio 68 Serie per e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Esercizio 69 Serie per e, ricorsiva . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Esercizio 73 Lotto (choice) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Esercizio 74 Lotto (random index) . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Esercizio 78 Thabit, versione numpy . . . . . . . . . . . . . . . . . . . . . . . . 59
Esercizio 79 Montante, versione numpy . . . . . . . . . . . . . . . . . . . . . . . 59
Esercizio 83 Grafico di polinomio . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Esercizio 84 Riproduci grafico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Esercizio 88 Gioco dell’oca semplificato . . . . . . . . . . . . . . . . . . . . . . . 66
Esercizio 89 Area di Macchia Nera . . . . . . . . . . . . . . . . . . . . . . . . . 66
Gli esercizi riportati in questa raccolta assumono che lo studente
sia familiare con i concetti di Python illustrati durante il
laboratorio. In particolare lo studente deve sapere:
come scrivere ed eseguire brevi programmi nella finestra di editor di
IDLE;
come importare moduli ed utilizzare le relative funzioni (limitatamente
a quelle usa- te durante il laboratorio). I moduli utilizzati pi` u di
frequente sono: math, random, matplotlib.pyplot, numpy,
numpy.random;
come scrivere brevi funzioni con parametri opzionali e che ritornino dei
valori al chiamante;
Alcuni costrutti utilizzati di frequente in questi esercizi
sono:
Input di una stringa da parte dell’utente, tramite la funzione cmd = raw
input("Stringa di prompt: ");
Conversione del contenuto di una variable in intero, tramite funzione
int(), in floating point, funzione float(), o in stringa, funzione
str().
Uso diretto dell’interprete Python
I seguenti esercizi servono a prendere dimestichezza con il modo in cui numeri e formule vengono scritti in modo da poter essere interpretati correttamente da un computer e in particolare da Python. Bisogna ricordare che:
| Esercizio 1 |
|---|
1. la circonferenza del cerchio di raggio 3.0 m;
2. l’area dello stesso cerchio;
3. il volume della sfera avente lo stesso raggio.
Esercizio 2 Calcolo del montante: Sapendo che il montante ` e dato dalla somma di capitali e interessi, ovvero Montante = Capitale · (1 + i), dove i ` verificare che il montante di un capitale di 1000 e, investito al tasso i = 4% per un anno e espresso in percentuale,
| Esercizio 3 | Sapendo che un pollice equivale |
|---|
| Esercizio 4 | Sapendo che un pollice equivale |
|---|
a 2.54 centimetri, convertire in pollici le seguenti
misure:
1. Diametro dello specchio primario del (3.58 m);
2. Diametro dello specchio primario di ciascuno degli (8.20
m).
| Esercizio 5 |
|
|---|
Hint: calcolate prima la frazione indicata e poi calcolate il rapporto tra la differenza tra la |
|---|
formula:
|
(2.1) |
|---|
>>> pi = 3.14159265
>>> r = 3.0
>>> 2.0*pi*r
18.849555900000002
>>> pi*r*r
28.274333850000005
>>> 4./3.*pi*r*r*r
113.09733539999999
Il volume si pu` o anche calcolare usando l’elevamento a potenza:
>>> in2cm = 2.54 # inches to centimeters
>>> 14.0*in2cm # diametro M1 C14 in cm 35.56
>>> 200.0*in2cm # diametro M1 Hale in cm 508.0
Soluzione dell’esercizio 4
3.141509433962264
>>> (333./106.-pi)/pi
-2.648962704990393e-05
>>> 355./113.
3.1415929203539825
>>> (355/113.-pi)/pi
8.491679599397461e-08
Capitolo 3
Liste
| Esercizio 7 |
|---|
| Esercizio 8 |
|
|---|
usando la funzione range(). Da questa lista
generare, usando le slices, altre liste
contenenti: 1. i numeri tra 11 e 20 (entrambi inclusi)
2. i numeri della lista di partenza che sono dispari
3. i numeri della lista di partenza che sono pari
4. i numeri della lista di partenza che sono divisibili per tre
5. i numeri della lista di partenza che sono divisibili per cinque
6. la lista di partenza invertita (= i numeri da 30 a 1)
7. i numeri della lista di partenza che sono pari in ordine
decrescente
8. i numeri della lista di partenza che sono divisibili per cinque in
ordine decrescente
| Esercizio 9 |
|---|
| Esercizio 10 |
|
|---|
lista:
altre parole, alla fine dell’esecuzione l’i–esimo elemento di n dovr` a corrispondere al numero di
volte che la cifra i appare in l. Risultato atteso:
| Esercizio 11 |
|---|
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
Procedimento:
Facendo copia e incolla, definire una variabile che contenga il testo Lorem ipsum (ricordate
inizializzare una lista n_letter vuota che conterr` a il numero di occorrenze per ciascuna
lettera dell’alfabeto;
in un secondo ciclo, separato, su tutte le lettere in alphabet, stampare a schermo la
lettera e il numero di volte che compare in Lorem ipsum.
d : 18
e : 37
z : 0
10
Soluzione dell’esercizio 9
1. pop_append1.py:
n = range(1,31)
p = []
for i in range(1,16):
p.append(n.pop(i))
print p
l = [3, 0, 2, 6, 3, 3, 8, 3, 2, 1, 0, 7, 8, 3, 6, 6, 1, 4, 8, 5, 6,
7, 8, 2, 7, 7, 6, 5, 3, 5] n = []
for i in range(10):
n.append(l.count(i))
print n
Soluzione dell’esercizio 11
for i in
range(len(alphabet)):
print alphabet[i],’: ’,n_letter[i]
12
| Esercizio 13 |
|
|---|
Python che, usando un ciclo while, calcoli e mostri a video la somma dei primi 100 numeri naturali.
| Esercizio 14 |
|---|
2. iterate sulla sotto-lista formata da tutti i numeri pari (identificata usando le slice), e stampateli su una sola riga;
3. iterate sulla sotto-lista formata da tutti i numeri divisibili per cinque (identificata usando le slice), e stampateli su una sola riga.
| Hint: Ricordate che mettendo una virgola alla fine dell’istruzione print il testo non va a capo. | ||
|---|---|---|
| Esercizio 15 | Calcolare e stampare a schermo le tabelline | |
Tra una tabellina e l’altra lasciate una riga vuota. Output atteso:
| 1 | x | 1 |
|
|
|---|---|---|---|---|
| 1 | x | 2 | ||
| 1 | x | 3 |
|
|
| 1 | x | 4 |
|
|
| 1 | x | 5 | ||
| 1 | x | 6 |
|
|
| 1 | x | 7 |
|
|
| 1 | x | 8 | ||
| 1 | x | 9 |
|
|
| 1 | x | 10 | = |
|
| 2 | x | 1 | ||
| 2 | x | 2 |
13
...
...
| 10 | x | 9 | |||
|---|---|---|---|---|---|
| 10 | x | 10 | = | ||
| Esercizio 16 |
|
||||
definita cos`ı:
| N0 | = | |
|---|---|---|
| = | ||
| N1 | ||
| Nn | = |
1. un ciclo while;
2. un ciclo for;
| Esercizio 17 |
|---|
| N0 | = |
|
|---|---|---|
| N1 | = |
|
| N2 | = | |
| = | ||
| Nn |
2. un ciclo for;
Il risultato atteso ` e:
0 1 1 2 4 7 13 24 44 81 149 274 504 927 1705 3136
Esercizio 19 Algoritmo di Gauss–Legendre: L’ ` un algoritmo per il calcolo di π noto per convergere molto rapidamente. E stato utilizzato
ripetutamente nella seconda met` a del secolo scorso per calcolare progressivamente da decine di milioni fino a centinaia di miliardi di cifre di π.
definire una variabile intera niter = 5, numero di iterazioni da effettuare;
iterare per niter volte e ad ogni passo calcolare e stampare l’approssimazione di π:
| Y | = | |
|---|---|---|
| A | = | |
| B | = | |
| C | = | |
| X | = | |
|
||
| π | ≈ |
|
| Esercizio 20 |
|
|---|
n intero in input e stampi “un triangolo di numeri”, ovvero n righe di lunghezze crescenti da uno a n, contenenti i numeri da uno al numero della riga. Esempio:
| Esercizio 21 |
|---|
15
>>> num_triangle_inv(5)
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
| Esercizio 22 | Scrivere una funzione che stampi il |
|---|
Esercizio 23 Diagonale di ’*’: Scrivere un programma che richieda all’utente un numero intero n in input. Il programma poi stampa n asterischi ’*’ in diagonale da sinistra verso destra.
Esempio:
Numero: 5
| Hint: Notare che, se n ` e il numero di ’*’ sulla diagonale, gli spazi da stampare per riga vanno |
|---|
| Esercizio 24 | Scrivere un programma che richieda all’u- | |
|---|---|---|
| tente un numero intero n in input. Il programma poi stampa n asterischi ’*’ in diagonale da | ||
Esempio:
Numero: 5
*
*
*
*
*
| Hint: Notare che, se n ` e il numero di ’*’ sulla diagonale, gli spazi da stampare per riga vanno |
|---|
| Esercizio 25 | Scrivere un programma che richieda all’utente un | |
|---|---|---|
| numero intero n in input. Il programma poi stampa un quadrato n × n di asterischi ’*’. | ||
*****
*****
*****
*****
*****
Notare che, siccome sullo schermo i caratteri non occupano lo stesso spazio in orizzontale e verticale, il “quadrato” risultante non appare quadrato ai nostri occhi.
| Esercizio 26 | Scrivere un programma che richieda all’utente due |
|---|
Notare che, siccome sullo schermo i caratteri non occupano lo stesso spazio in orizzontale e verticale, il “quadrato” risultante non appare quadrato ai nostri occhi.
| Esercizio 27 |
|
|---|
| Hint: In pratica si tratta di iterare n volte, ad ogni passo stampando un numero crescente di |
|---|
|
|
|
|---|---|---|
| Esercizio 28 | ||
| Hint: In pratica si tratta di iterare n volte, ad ogni passo stampando un numero decrescente |
|---|
|
|---|
17
| Esercizio 29 |
|---|
*
**
***
****
*****
| Hint: In pratica si tratta di iterare n volte, ad ogni passo stampando un numero decrescente |
|---|
di spazi (), partendo da n −1, e un numero crescente di ’*’ partendo da uno.
| Hint: In pratica si tratta di iterare n volte, ad ogni passo stampando un numero crescente di |
|---|
| Esercizio 31 |
|
|
| Esercizio 32 |
|
Scrivere un programma che richieda all’u- |
tente un numero intero n in input. Il programma poi stampa un triangolo isoscele di asterischi’*’ con vertice in alto e altezza di n ’*’.
| Esercizio 33 |
|
Scrivere un programma che |
richieda all’utente un numero intero n in input. Il programma poi stampa un triangolo isoscele capovolto di asterischi ’*’ con base in alto e altezza di n ’*’.
| Esercizio 34 | Scrivere un programma che richieda all’utente un | |
| numero intero n in input. Il programma poi stampa un rombo di asterischi ’*’, avente diagonale | ||
maggiore uguale alla diagonale minore e pari a base 2n −1 ’*’.
Esempio:
Numero: 5


