Sei sulla pagina 1di 50

Fondamenti di Informatica

Programmazione base

Prof. E. Clementini
Traduzione in linguaggio Python
• Prodotto di due numeri
a=int(input())
b=int(input())
Si hanno due letture, un'assegnazione e
c=a*b scrittura.
print (a,b,c)

14/10/2021 Fondamenti di Informatica - Prof. Clementini 2


Elementi sintattici
• Parole chiave:
– int
– input
– print
• Identificatori:
– a, b, c

14/10/2021 Fondamenti di Informatica - Prof. Clementini 3


Istruzioni
• Lettura
nomevariabile=tipo(input(prompt))
• Scrittura
print (lista argomenti)
• Assegnazione
variabile = espressione

14/10/2021 Fondamenti di Informatica - Prof. Clementini 4


Miglioramento input/output
a=int(input("inserisci il primo numero: "))
b=int(input("Inserisci il secondo numero: "))
c=a*b
print ("Il prodotto è: ",c)
In questo caso si stampano due argomenti, il primo è una stringa identificata da due " " e da caratteri alfa
numerici, il secondo argomento (separato da una virgola) è il contenuto della variabile c.
Quello che ci interessa su python è l'editor di testo che è sul file e per eseguire il programma su idle si fa run
module

14/10/2021 Fondamenti di Informatica - Prof. Clementini 5


Massimo tra due numeri
a=int(input("inserisci il primo numero: "))
b=int(input("Inserisci il secondo numero: "))
if a>b:
max=a
else:
max=b
print ("Il massimo è: ",max)

14/10/2021 Fondamenti di Informatica - Prof. Clementini 6


Istruzione if-else

if condizione: true false


Vero istruzione
else:
Falso istruzione

Oppure:
true
false
if condizione:
istruzione

14/10/2021 Fondamenti di Informatica - Prof. Clementini 7


if annidate
• Gli annidamenti in Python sono realizzati con
l’indentazione

true c1 false
if c1:
I3
true c2 false
if c2:
I1 I2 i1
else:
i2
else:
i3

14/10/2021 Fondamenti di Informatica - Prof. Clementini 8


if annidate
• se in una if manca il ramo else

true c1 false true c1


false
true c2 I2 true c2 false
false
I1 I1 I2

Giusto
Sbagliato

if c1: if c1:
if c2 if c2
i1 i1
else i2 else i2
se "scappa" uno spazio si effettua un diagramma
completamente diverso
14/10/2021 Fondamenti di Informatica - Prof. Clementini 9
Istruzione di composizione o sequenza
• Istruzioni sullo stesso livello di annidamento
• Sono considerate come unica istruzione composta o
sequenza
• Si può usare ad esempio nei rami di una if-else

if c:
I1
I2
else:
I3
I4
I5

14/10/2021 Fondamenti di Informatica - Prof. Clementini 10


Istruzione while
• Traduce il ciclo con pre-condizione (costrutto finché … esegui
…)
• Sintassi:
while condizione:
C'è un tab istruzione

• L’istruzione è composta se all’interno del ciclo bisogna ripetere


più di un’istruzione

14/10/2021 Fondamenti di Informatica - Prof. Clementini 11


Somma di n numeri

print ("Programma per il calcolo della somma di n


numeri")
n=int(input("Quanti numeri vuoi sommare? "))
i=1
s=0
while i<=n:
x=int(input("Inserisci il "+str(i)+" valore: "))
s=s+x
i=i+1
print("La loro somma è: ",s)

14/10/2021 Fondamenti di Informatica - Prof. Clementini 12


Commenti
• il commento che si estende su una sola linea:
# questo è un commento
• il commento che si estende su più linee:
""" questo commento
si estende su
più linee
"""

14/10/2021 Fondamenti di Informatica - Prof. Clementini 13


Altri esempi sui cicli
• somma di numeri con terminazione del ciclo
identificata da un particolare valore in ingresso

X=1

S=0

X!=0 false
true S
X

S=S+X

14/10/2021 Fondamenti di Informatica - Prof. Clementini 14


Traduzione Python

print ("Programma per il calcolo della somma di n


numeri")
print("Inserire 0 per interrompere")
i=1 #introdotta solamente per essere visualizzata
s=0
x=1 #valore arbitrario diverso da 0
while x!=0:
x=int(input("Inserisci il "+str(i)+" valore: "))
s=s+x
i=i+1
print("La loro somma è: ",s)

14/10/2021 Fondamenti di Informatica - Prof. Clementini 15


Soluzione alternativa

S=0

X!=0 false
true S
S=S+X

14/10/2021 Fondamenti di Informatica - Prof. Clementini 16


Soluzione con costante simbolica
USCITA = -100
print ("Programma per il calcolo della somma di n numeri")
print("Inserire " ,USCITA," per interrompere")
i=1 #introdotta solamente per essere visualizzata
x=int(input("Inserisci il "+str(i)+" valore: "))
s=0
while x!=USCITA:
s=s+x
i=i+1
x=int(input("Inserisci il "+str(i)+" valore: "))
print("La loro somma è: ",s)

14/10/2021 Fondamenti di Informatica - Prof. Clementini 17


Controllo dei dati in ingresso
a=int(input())
b=int(input())
c=a/b
print(c)

a=int(input())
b=int(input())
if b!=0:
c=a/b
print(c)
else:
print("la divisione per zero è impossibile")

14/10/2021 Fondamenti di Informatica - Prof. Clementini 18


Esaminare un triangolo
A

(A=B) AND
true (B=C) false

"equilatero" (A=B)
OR (B=C) OR
true (A=C) false

"isoscele" "scaleno"

14/10/2021 Fondamenti di Informatica - Prof. Clementini 19


soluzione
"""Il programma verifica se, dati tre numeri, essi rappresentano
i lati di un triangolo equilatero, isoscele, o scaleno
"""
a=int(input("primo lato="))
b=int(input("secondo lato="))
c=int(input("terzo lato="))
#controllo disuguaglianza triangolare
if not(a<b+c and b<a+c and c<a+b):
print("Le lunghezze inserite non possono costituire i lati di
un triangolo")
elif a==b and b==c:
print("triangolo equilatero")
elif a==b or b==c or a==c:
print("triangolo isoscele")
else:
print("triangolo scaleno")

14/10/2021 Fondamenti di Informatica - Prof. Clementini 20


Tipi semplici
• L’inizializzazione di una variabile, ne determina il tipo

i=1 #i è una variabile intera (int)


c='q' #c è un carattere (str)
parola="lettera" #parola è una stringa (str)
r=2.3 #r è un numero con virgola (float)
valore=True #valore è un booleano (bool)

14/10/2021 Fondamenti di Informatica - Prof. Clementini 21


Tipi semplici
• Possiamo verificare il tipo di una variabile con la funzione type:
print(type(a))
print(type(c))
print(type(parola))
print(type(r))
print(type(valore))

14/10/2021 Fondamenti di Informatica - Prof. Clementini 22


Tipi semplici
• Tipo intero:
– int
• Tipi in virgola mobile
– float
– complex
• Costanti
– tramite notazione decimale: Es. 0.0002212
– o scientifica: Es. 22.12e-5

14/10/2021 Fondamenti di Informatica - Prof. Clementini 23


Diagramma sintattico di un numero

number

0 . digit

-
digit
e
1 - 9
digit E
+
digit
-

14/10/2021 Fondamenti di Informatica - Prof. Clementini 24


Tipi semplici
• Tipo complex:
a=complex(1,1)
• Tipo bool
– Costanti:
True, False
• Possiamo forzare i tipi, usando le funzioni: int(),
float(), etc.

14/10/2021 Fondamenti di Informatica - Prof. Clementini 25


Operatori
• operatori aritmetici: +, –, *, /, //,%,**
a=5
b=2
c=a%b #il valore di c è 1
a=a//b #il valore di a diventa 2
a=b**3 #elevamento a potenza
• operatori su stringhe:
s1="frutta"
s2="verdura"
s=s1+s2 #concatenazione
s=s*3 #ripetizione

14/10/2021 Fondamenti di Informatica - Prof. Clementini 26


Operatori
lettera = 'A'
codice = ord(lettera)
"""la variabile codice conterrà il codice ASCII
del carattere 'A' pari a 65
"""
codice = 48
lettera = chr(codice)
""" la variabile lettera conterrà il carattere
corrispondente al codice ASCII 48, pari al
carattere '0'
"""

>>>int(6.75) Se si trasforma il numero float 6.75 in intero tramite la forzante si perde la parte
6 frazionaria ad esempio. L'operatore round invece approssima al numero intero
più vicino (effettua un arrotondamento)
>>>round(6.75)
7

14/10/2021 Fondamenti di Informatica - Prof. Clementini 27


Espressioni numeriche
• si costruiscono con i seguenti elementi:
– costanti numeriche;
– variabili di tipo numerico;
– operatori aritmetici (+, –, *, /, …);
– parentesi;
– funzioni (es. math.sqrt(), math.log(), math.sin(), ...)
• es.
e=c*(d+(math.sqrt(d)-1))
f=-b/2/a
Sicuramente il risultato è un float

14/10/2021 Fondamenti di Informatica - Prof. Clementini 28


Espressioni condizionali
• Sono costituite da:
– una costante (False, True);
– una singola variabile booleana;
– un confronto tra espressioni numeriche con gli operatori di relazione: >, <, >=,
<=, == (uguale), != (diverso);
– una combinazione degli elementi precedenti con gli operatori booleani: and, or,
not.
• es.
controllo = True
while not controllo: ……
if a>b and controllo: ……
controllo = a==b

14/10/2021 Fondamenti di Informatica - Prof. Clementini 29


Ciclo for
• Il ciclo for è un’altra istruzione ciclica oltre al while
• Il ciclo for ripete le istruzioni del blocco per ogni
elemento all’interno di un insieme.
• Un possibile uso è il seguente, per fare la somma di n
numeri:

s=0
for i in range(n):
x=int(input("Inserisci il "+str(i)+" valore: "))
s=s+x

14/10/2021 Fondamenti di Informatica - Prof. Clementini 30


Significato del for

false

true

• Vedremo altri usi del for quando parleremo di


stringhe e liste

14/10/2021 Fondamenti di Informatica - Prof. Clementini 31


Equivalenza while/for
for cont in intervallo:
istruzione

cont=0
while cont<fineintervallo:
istruzione
cont=cont+1

14/10/2021 Fondamenti di Informatica - Prof. Clementini 32


if in cascata
if ch=='I': valore=1
elif ch=='V': valore=5 elif serve quando all'interno del ramo else c'è subito
elif ch=='X': valore=10 un'altra if e subito dopo si inserisce la condizione.
elif ch=='L': valore=50
elif ch=='C': valore=100
elif ch=='D': valore=500
elif ch=='M': valore=1000

14/10/2021 Fondamenti di Informatica - Prof. Clementini 33


selezione multipla

'I' ch 'C'
'V' 'L'
'X'
valore=1 valore=5 valore=10 valore=50 valore=100

14/10/2021 Fondamenti di Informatica - Prof. Clementini 34


I cicli annidati
• Esempio: stampa di una tavola pitagorica

14/10/2021 Fondamenti di Informatica - Prof. Clementini 35


soluzione
I=1

I<=N false
true
J=1

ciclo
J<=N interno
true false

I*J

J=J+1

I=I+1

14/10/2021 Fondamenti di Informatica - Prof. Clementini 36


Soluzione con cicli for
n=10
for i in range(1,n+1):
for j in range(1,n+1):
print(i*j,end=' ')
print()

Un ciclo for è possibile utilizzarlo solamente quando si ha una variabile che si ripete un determinato numero di
volte e quante volte viene ripetuto il ciclo non cambia

14/10/2021 Fondamenti di Informatica - Prof. Clementini 37


Soluzione con cicli while
i=1
n=10
while i<=n:
j=1
while j<=n:
print(i*j,end=' ')
j=j+1
print()
i=i+1

14/10/2021 Fondamenti di Informatica - Prof. Clementini 38


Funzione print
• Sintassi in generale:
print(value1, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

• sep è il separatore tra i valori da stampare che di default è pari


a uno spazio. Se per esempio non vogliamo spazi tra i valori
stampati poniamo sep='' .
• end è il carattere stampato a fine istruzione che di default è un
a capo. Se non vogliamo gli a capo ma ad esempio uno spazio
dobbiamo ridefinire end=' '

14/10/2021 Fondamenti di Informatica - Prof. Clementini 39


Stampa piramide
1
121
12321
1234321
123454321
12345654321
…………………………………

14/10/2021 Fondamenti di Informatica - Prof. Clementini 40


soluzione
n=9
for i in range(1,n+1):
for j in range(1,n-i+1):
print(' ',end='')
for j in range(1,i+1):
print(j,end='')
for j in range(i-1,0,-1):
print(j,end='')
print()

14/10/2021 Fondamenti di Informatica - Prof. Clementini 41


Trovare numero nascosto
1. trovato  false
2. i  1
3. Finché i < MAXTENT and not trovato
1. Leggi numero
2. Se numero = NUMERONASCOSTO
1. trovato  true
3. i  i + 1
4. Se trovato
1. Stampa “numero trovato”
Altrimenti
1. Stampa “numero non trovato”

14/10/2021 Fondamenti di Informatica - Prof. Clementini 42


codifica
MAXTENT=10
NUMNASCOSTO=15
print("Indovinare il numero nascosto")
print("Hai a disposizione",MAXTENT,"tentativi")
trovato=False
i=1
while i<=MAXTENT and not trovato:
numero=int(input("Inserisci il "+str(i)+" tentativo: "))
if numero==NUMNASCOSTO:
trovato=True
i=i+1
if trovato:
print(numero,"è il numero giusto")
else:
print("non hai trovato il numero")

14/10/2021 Fondamenti di Informatica - Prof. Clementini 43


Esercizio
• Dato un numero e una
cifra, vedere se la cifra fa
parte del numero.
Esempio: la cifra 4 fa parte
del numero 23481.

14/10/2021 Fondamenti di Informatica - Prof. Clementini 44


Conversione da base qualsiasi a base 10

• approccio semplificato 2:
– l’ingresso di ogni cifra avviene nello stesso ordine rispetto al numero
dato, utilizzando la formula di Horner

V ( X ) = cn−1  b n−1 + cn−2  b n−2 + + c1  b1 + c0  b0


= c0 + b  (c1 + c2  b +  + cn −1  b n − 2 )
= c0 + b  (c1 + b  (c2 + c3  b +  + cn −1  b n −3 ))
= c0 + b  (c1 +  + b(cn − 2 + cn −1  b))))

14/10/2021 Fondamenti di Informatica - Prof. Clementini 45


soluzione
N

base

valore=0

I=1

I<=N false
true valore
cifra
valore=valore*
base+cifra

I=I+1

14/10/2021 Fondamenti di Informatica - Prof. Clementini 46


soluzione
N

base

valore=0

I=1
n=int(input("Inserire il numero di cifre"))
base=int(input("Inserire la base di partenza"))
I<=N false
i=1
true valore valore=0
cifra while i<=n:
valore=valore* cifra=int(input("cifra"+str(n-i)))
base+cifra #lettura cifre a partire dalla piu’ significativa
valore=valore*base+cifra
I=I+1
i=i+1
print("risultato =",valore)

14/10/2021 Fondamenti di Informatica - Prof. Clementini 47


Esercizi
• Codificare in Python gli algoritmi del capitolo sui diagrammi di
flusso

14/10/2021 Fondamenti di Informatica - Prof. Clementini 48


Esercizi
• Scrivere un programma che visualizzi un calendario mensile
suddiviso per settimane come in questo esempio:
Do Lu Ma Me Gi Ve Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

14/10/2021 Fondamenti di Informatica - Prof. Clementini 49


Esercizi
• Calcolare in modo approssimato il valore del seno dell'angolo x
tramite la serie di Taylor:
𝑥3 𝑥5 𝑥7 𝑥 2𝑖+1
𝑆=𝑥− + − +⋯=𝑓 𝑥 = σ∞
𝑖=0 −1 𝑖

3! 5! 7! (2𝑖+1)!
arrestando il calcolo quando il termine i-mo in valore assoluto diventa
minore di un fissato 

14/10/2021 Fondamenti di Informatica - Prof. Clementini 50

Potrebbero piacerti anche