**
è l'elevamento a potenza.
(3+8/2**2)*3 = 15
nome = input("Inserisci il tuo nome: ") print("Ciao " + nome + "!")
Il primo codice dà errore perché non è permesso di sommare stringhe e interi; usando le funzioni di conversione si può ottenere così 27 dal codice:
a = 3 b = "24" print(a+int(b))
Serve creare una nuova variabile per effettuare lo scambio:
a = int(input()) b = int(input()) tmp = a a = b b = tmp print(a) print(b)
Riflettere sul perché la soluzione "intuitiva", riportata sotto, non può funzionare:
a = int(input()) b = int(input()) a = b b = a print(a) print(b)
In python si possono scambiare facilmente due variabili con una forma di assegnamento speciale, chiamato unpacking assignment:
a, b = b, a
cateto1 = float(input("Inserisci il primo cateto: ")) cateto2 = float(input("Inserisci il secondo cateto: ")) ipotenusa = (cateto1 ** 2 + cateto2 ** 2) ** 0.5 print("L'ipotenusa vale: " + str(ipotenusa))
Si sfrutta il fatto che la divisbilità per 2 è equivalente ad avere resto nullo quando si divide per 2.
n = int(input("Inserisci un numero: ")) if n % 2 == 0: print(str(n) + " è pari") else: print(str(n) + " è dispari")
media = int(input("Inserisci la tua media attuale: ")) n_voti = int(input("Inserisci il numero di voti ricevuti: ")) goal = int(input("Inserisci la media che vuoi raggiungere: ")) voto_da_prendere = goal * (n_voti + 1) - media * n_voti if voto_da_prendere >= 0 and voto_da_prendere <= 10: print("Devi prendere: " + str(voto_da_prendere)) else: print("Impossibile")
print("Menu--------------------") print("0) Somma") print("1) Prodotto") opzione = int(input("Inserisci l'operazione desiderata: ")) n1 = int(input("Inserisci il primo numero: ")) n2 = int(input("Inserisci il secondo numero: ")) print("----------------------") print("Risultato: ") if opzione == 1: print(n1 + n2) if opzione == 2: print(n1 * n2)
Divisione e sottrazione si aggiungono in modo analogo. Per mantenere il programma attivo, si usa un while loop.
stop = False while not stop: print("Menu--------------------") print("0) Somma") print("1) Prodotto") print("9) Termina") opzione = int(input("Inserisci l'operazione desiderata: ")) n1 = int(input("Inserisci il primo numero: ")) n2 = int(input("Inserisci il secondo numero: ")) print("----------------------") print("Risultato: ") if opzione == 1: print(n1 + n2) if opzione == 2: print(n1 * n2) if opzione == 9: stop = True
saldo = 400.35 anno = 0 while anno < 10: saldo = saldo*0.01 - 10 anno += 1
n = int(input("Inserisci n: ")) risultato = 0 i = 1 while i <= n: risultato += i i += 1 print("La somma dei primi " + str(n) + " numeri è: " + str(risultato))
Se si calcola il resto della divisione per 10 di un numero si ottiene la sua ultima cifra: ad esempio 423 / 10 è 42 con resto di 3. Quindi 423 % 10 = 3.
Per ottenere le altre cifre si può dividere il numero per 10 e ripetere l'operazione finché non si ottiene 0 nell'ultima divisone.
Purtroppo 423/10 in Python fa 42.3 e non possiamo più utilizzare il remainder operator su numeri decimali.
Per aggirare il problema ci sono due modi:
Usando il primo:
n = int(input("inserisci un numero: ")) while n > 0: print(n%10) n = int(n/10)
La funzione di conversione str
, nel caso degli interi, si basa su un metodo analogo per effettuare la conversione:
def simple_str(n): result = "" sign = "" if n == 0: result = "0" if n < 0: sign = "-" n = -n while n > 0: result = str(n%10) + result n //= 10 return sign + result
Soluzione 1:
i = 1 res = 0 while i < 1000: if i % 3 == 0 or i % 5 == 0: res += i i += 1 print(res)
Soluzione 2:
res = 0 # calcolo tutto i multipli di tre e li aggiungo limit = int(1000/3) i = 1 while i < limit: res += i*3 i += 1 # stessa cosa per i multipli di cinque limit = int(1000/5) i = 1 while i < limit: res += i*5 i += 1 # I multipli sia di 3 che di 5 sono stati contati due volte e vanno tolti limit = int(1000/15) i = 1 while i < limit: res -= i*15 i += 1 print(res)
Soluzione molto poco efficiente: si testa la divisibilità per tutti i numeri maggiori di 1 e minori del numero considerato.
n = int(input('Inserisci un numero: ')) i = 2 prime = True if n == 1 or n == 0: prime = False else: while i < n: if n % i == 0: prime = False i += 1 if prime: print('Primo') else: print('Non primo')
Si può fare un piccolo miglioramento: quando la variabile prime
diventa False
, non è più necessario continuare
il ciclo. Si può quindi modificare così la condizione del while:
while i < n and prime:
Un secondo miglioramento è dato dal fatto che se un numero x non divide n, allora nemmeno il numero n/x (se intero) può dividere n
Per fare un esempio, 100 è divisibile per 2 e 5, quindi è inutile controllare 100/2 = 50 e 100/5=2. Una volta sorpassato il 10, 100/i sarà minore di 10 quindi sarà come controllare di nuovo la divisbilità per i numeri prima del 10.
Ragionando e facendo un po' di prove ci si rende conto che basta controllare i divisori fino a sqrt(n).
n_sqrt = int(n**0.5) # salviamo il risultato per non doverlo ricalcolare ad ogni ciclo while i <= n_sqrt and prime: # ...
C'è un <= e non un < perché altrimenti i quadrati di numeri primi non verrebbero identificati correttamente (ad esempio 7² = 49).