Esercizi Prima Lezione

Esercizio 1

Usa google o l'interprete per capire l'utilizzo dell'operatore aritmetico ** in Python.

Senza eseguirla, indovina il risultato della seguente espressione:

3+8/2**2*3

Verifica la tua ipotesi. Cosa si può dire sulla precedenza di ** rispetto agli altri operatori?

Aggiungere un paio di parentesi affinché il risultato sia 15.

Esercizio 2

Scrivi un programma che chieda il nome con la funzione input e che stampi un saluto.

Esercizio 3

Considera questo codice che "somma" due variabili di tipo diverso (stringa e intero):

a = 3
b = "24"
print(a+b)

Che comportamento dovrebbe avere secondo te? Discuti e prova ad eseguirlo. Funziona?

Esegui poi questo codice che fa uso delle funzioni di conversione int e str.

a = "3"
print(a + str(3))
print(int(a) + 3)

Cosa scrive il programma? Perché l'operatore + si comporta in modo diverso?

Modificare il primo snippet affinché venga scritto 27.

Esercizio 4

a = int(input())
b = int(input())
...
print(a)
print(b)

Il programma precedente permette di inserire due numeri e il risultato devono essere i due numeri scambiati.

Completare i puntini affinché questo avvenga, utilizzando solo assegnamenti.

[Opzionale: cercare su google un metodo per effettuare lo "swapping of variables" in una riga sola]

Esercizio 5

Scrivere un programma che chieda in input la misura dei due cateti di un triangolo rettangolo e scriva la misura dell'ipotenusa.

Le variabili devono essere di tipo float. Usare la funzione di conversione float per convertire da stringa a numero.

Nei sistemi di scrittura anglosassone il separatore dei decimali è il punto e non la virgola, quindi i numeri andranno inseriti col punto nel caso di cifre decimali.

Hint: come si esprime la radice quadrata usando l'elevamento a potenza?

Esercizio 6

Predire il valore della espressione booleana stampata:

a = 3
b = 6
c = 2

w = (a == 4)
y = not w and b > c
print(c+1 != a or y)

Verificare il risultato. Qual è la precedenza di not rispetto a and e or? (Fare delle prove) Usare type per vedere il tipo delle variabili w e y.

Quando scrivete codice e non siete sicuri delle precedenze, aggiungete sempre le parentesi per migliorarne la leggibilità.

Esercizio 7

L'operatore %, detto modulo o resto (in inglese modulo o remainder), è un operatore che permette di calcolare il resto della divisione intera tra due numeri.

Ad esempio, 44/6 fa 7 con resto 2, quindi 44 % 6 vale 2. (Verificarlo nell'interprete)

Scrivere un programma che dica se un numero è pari o dispari utilizzando il remainder operator e l'if statement.

Esercizio 8

Scrivere un programma in cui si inserisce

  1. media dei voti
  2. numero dei voti
  3. media che si vuole raggiungere

Scrivere il voto minimo da prendere nella prossima verifica se è possibile arrivare alla media desiderata, altrimenti scrivere "impossibile".

Esercizio 9

In un programma si inseriscono due numeri e poi viene stampato un menu testuale che chiede se li si vuole sommare (0) o moltiplicare (1).

Il programma prende in input l'opzione scelta dall'utente (che scrive il numero corrispondente) e stampa il risultato dell'operazione.

Scrivere il programma, aggiungendo la sottrazione e la divisione al menu.

Opzionale: una volta stampato il risultato, ripetere il programma. Aggiungere eventualmente una opzione per terminarlo (vedi quick reference).

Esercizio 10

Un conto in banca contiene un saldo di 400.35 euro. L'interesse è dell'1% annuo. Ogni anno inoltre si spendono 10 euro.

Calcolare con un ciclo while il saldo presente dopo 10 anni.

Esercizio 11

Scrivere un programma che riceva in input un numero n intero positivo e stampi la somma dei primi n numeri naturali (1,2,3, ... fino ad n).

[Opzionale: chiedere al proprio docente di matematica come trovare questa somma facendo pochi calcoli]

Esercizio 12

Scrivere un programma che dato un numero intero positivo in input, ne stampi le cifre in ordine inverso su righe separate.

Hint: utilizzare il remainder operator e la divisione.

Esercizio 13

Risolvere il primo esercizio di project Euler:

http://projecteuler.net/problem=1

Vietato utilizzare google translate. È permesso l'utilizzo di un dizionario, ad esempio: http://wordreference.com/enit

Hint: è necessario controllare tutti i numeri?

Hint: il minimo comune multiplo di 3 e 5 è 15...

Opzionale (difficile): Usare l'algebra e la formula opzionale dell'esercizio 11 per risolvere questo problema.

Se ogni iterazione impiegasse 1 secondo, quanto tempo impiegherebbe la soluzione iterativa con i numeri fino a 1000000? E quella a formula chiusa?

Tracciare un grafico del tempo in funzione del numero massimo per la soluzione iterativa e la soluzione a formula chiusa. Qual è più efficiente tra le due?

Esercizio 14 [difficile]

Dato un numero positivo in input, scrivere se è primo o meno.

Opzionale: chiedere al proprio docente di matematica come funziona il Crivello di Eratostene, oppure consultare la pagina di Wikipedia al riguardo.

Senza la conoscenza degli array (tipo di dato list in Python) non è possibile scrivere un crivello di Eratostene. Vedremo le liste nella prossima lezione.