Software in pratica – Parte 1 – Programmi, variabili, dati, espressioni


INDICE


PER INIZIARE

Se utilizzate Windows, per le prime prove è consigliabile usare l’ambiente di sviluppo IDLE di Python già installato, che comprende una finestra (editor) con cui scrivere modificare e salvare il programma, e una seconda finestra (console o shell) dove avviene l’esecuzione vera e propria e appaiono i risultati. Se usate Linux (dove IDLE andrebbe installato separatamente), è altrettanto comodo eseguire i programmi in una finestra terminale, e scriverli con un editor di testo come gedit (disponibile comunque anche per Windows) che, alla pari di IDLE, ha l’evidenziazione colorata della sintassi (syntax highlight) e l’auto incolonnamento. È bene inoltre non mescolare mai spazi e tabulazioni, per cui è consigliabile settare subito il proprio editor per inserire quattro spazi quando si preme il tasto tabulazione (Tab).

Una caratteristica della console è quella di accettare comandi in modo diretto, proprio come il vecchio BASIC, che vengono cioè eseguiti immediatamente appena confermati con invio. In questo modo si possono fare delle prove con singole istruzioni e vederne immediatamente il risultato.

Ricordando che le istruzioni in Python vanno sempre scritte in minuscolo, provate quindi a scrivere nella console:


print(2+2)

Dando invio deve apparire la risposta 4, a conferma che l’interprete Python sta funzionando ed è in grado di eseguire qualsiasi comando in questo linguaggio.

Se invece questa istruzione la salvate su disco in un file di testo (dandogli estensione .py) la potete eseguire quante volte volete. Con IDLE è sufficiente premere F5 nella finestra editor, corrispondente alla scelta del menu Run —> Run Module.

Da una finestra console/terminale di Windows o Linux potete invece lanciare il programma scrivendo:

python nomedelfile.py

IMPORTANTE: In questo testo si usa la versione 3 del linguaggio. La sintassi delle istruzioni print e input (descritte in seguito) è leggermente diversa rispetto alla versione 2. Chi volesse usare Python2 al posto di Python3 deve scrivere all’inizio dei programmi le due righe seguenti, che rendono il funzionamento di print e input identico alla versione 3:


from __future__ import print_function
input = raw_input

PROGRAMMI

Il concetto di programma intuitivamente lo conoscete già, pensate alle frasi:

  • “qual è il programma della giornata?”
  • “cosa c’è in programma durante il viaggio?”
  • “cosa avete in programma per le ferie?”

In tutti i casi si tratta di una sequenza ben precisa e ordinata di cose da fare. In informatica è la stessa cosa, un programma non è nient’altro che una sequenza precisa e ordinata di istruzioni comprensibili dal computer, che vengono eseguite una dopo l’altra per ottenere un certo risultato.

Con le istruzioni potete fondamentalmente:

  • Manipolare dati (effettuare operazioni con numeri e sequenze di caratteri)
  • Prendere decisioni (fare cose diverse al verificarsi di determinate condizioni)
  • Realizzare cicli (per ripetere più volte una o più istruzioni)
  • Interagire con il mondo esterno (tastiera, schermo, file, rete ecc)

 

ESECUZIONE DEL PRIMO PROGRAMMA

Tradizione vuole che il primo programma in un nuovo linguaggio scriva semplicemente sul video le parole “Hello World!”, e questo faremo.

Scrivete la seguente riga con un editor di testo (rispettando maiuscole e minuscole e iniziando sulla prima colonna senza lasciare spazi prima di print) e salvate il file chiamandolo hello.py in una directory che userete per le prove.


print("Hello World!")

Aprite una finestra terminale su Linux, o prompt DOS su Windows, spostatevi nella directory in cui avete salvato il file, e avviate il programma scrivendo:

python hello.py

Se appare la scritta Hello World! il programma è stato eseguito correttamente. In particolare avete appena usato la funzione print del linguaggio Python, che permette di stampare a video quello che viene specificato tra le sue parentesi (in questo caso una stringa di caratteri). Useremo la funzione print in quasi tutti gli esempi.

 

VARIABILI DATI E ASSEGNAMENTI

Alla base della programmazione ci sono le variabili, che sono dei nomi scelti a piacere per riferirvi ai vostri dati. In Python le variabili si definiscono con un semplice assegnamento nome=dato, ad esempio la seguente riga assegna il numero 4400 ad una variabile di nome ‘a’:


a = 4400

Con questo assegnamento avete detto al computer che ‘a’ è un nome che si riferisce al numero 4400. Questo nome può successivamente essere usato in qualsiasi espressione al posto del numero stesso.


b = a + 100

Con questa riga dite invece al computer di calcolare l’espressione a+100. Nell’espressione Python sostituisce automaticamente il nome della variabile ‘a’ con il dato a cui essa si riferisce, ed infine assegna il risultato (il numero 4500) alla variabile di nome ‘b’.

Con le variabili potete quindi scrivere espressioni matematiche di qualsiasi complessità come si fa in algebra.

Come potete notare, a destra dell’uguale si scrivono sempre i dati o le espressioni da calcolare, mentre a sinistra si scrivono i nomi delle variabili con cui volete riferirvi ai dati o ai risultati delle espressioni.

I tipi di dati elementari con cui potete lavorare, comuni a praticamente tutti i linguaggi, sono:

  • I numeri: possono essere di tipo intero (int), cioè senza la virgola, oppure di tipo floating point (float), cioè con la virgola come 3.14 (la virgola si indica con il punto), con essi potete effettuare qualsiasi operazione matematica.
  • Le stringhe: sono sequenze di caratteri alfanumerici, in cui possono cioè coesistere cifre, lettere e altri simboli, e servono per rappresentare frasi, nomi, codici, elaborare dei testi ecc.

 

I NUMERI

In Python i numeri interi possono avere qualsiasi lunghezza, e possono essere scritti in diversi modi:


0
100
-20          # negativo
0xFFFF       # esadecimale
0b1001       # binario

I numeri floating point  invece hanno una precisione di sole 16 cifre, e vanno scritti indicando sempre la virgola (anche se senza cifre prima o dopo la virgola stessa):


0.0
3.141
6.67E-11     # notazione scientifica esponenziale
-0.015E20
0.           # il punto indica un float
42.
.127

 

LE STRINGHE

Se volete assegnare ad una variabile una stringa, bisogna sempre ricordarsi di racchiudere i caratteri della stringa tra virgolette o tra apici in uno di questi modi:


a = "STRINGA"
b = 'STRINGA'

In Python una stringa può avere qualsiasi lunghezza, può contenere anche un solo carattere, oppure nessuno, in questo ultimo caso si chiama stringa vuota o stringa nulla:


a = "z"      # un solo carattere
b = " "      # un carattere spazio
c = ""       # stringa vuota
d = ''       # stringa vuota

ATTENZIONE: Non bisogna mai confondere un valore numerico con una stringa di caratteri numerici infatti:


a = "1250"   # una stringa di caratteri
b = 1250     # un valore numerico

 

I NOMI DELLE VARIABILI

Piccola ma importante digressione… ricordatevi che Python distingue tra lettere maiuscole e minuscole (è case sensitive). Tutte le istruzioni si scrivono in minuscolo, mentre per i nomi definiti da voi potete scegliere, facendo attenzione che ‘casa’ e ‘Casa’ sono due nomi diversi in quanto la ‘c’ minuscola è diversa dalla ‘C’ maiuscola. In particolare viene consigliato di seguire questo schema:

nomi_di_variabili   minuscolo e trattino underscore
nomi_di_funzioni    minuscolo e trattino underscore
NomiDiClassi        camel case (iniziali maiuscole)
NOMI_DI_COSTANTI    maiuscolo e trattino underscore

Si consiglia inoltre di scegliere nomi più chiari possibili riguardo a ciò a cui si riferiscono, ne troppo corti da risultare sigle incomprensibili, ne troppo lunghi da appesantire la lettura del programma, ancora meglio se scritti in inglese per rendere il programma facilmente leggibile anche al resto del mondo (in questo testo comunque usiamo nomi italiani per facilitare la comprensione e non confondere i propri nomi con le parole riservate e le funzioni predefinite di Python).

I nomi delle variabili possono essere composti solo da lettere (maiuscole o minuscole), cifre (da 0 a 9) e trattini di sottolineatura _ (underscore) ma non devono mai iniziare con una cifra. Inoltre non si possono usare i nomi già riservati per il linguaggio indicati nella seguente tabella:

False     class       finally    is          return
None      continue    for        lambda      try
True      def         from       nonlocal    while
and       del         global     not         with
as        elif        if         or          yield
assert    else        import     pass
break     except      in         raise

È anche consigliabile usare nel programma esclusivamente caratteri appartenenti al set di caratteri ASCII stampabili, quindi niente lettere accentate o altri simboli che non appartengono al set ASCII di base. È possibile scrivere stringhe formate da qualsiasi carattere, ma richiede alcune accortezze che non rientrano nello scopo di questo testo. I caratteri di base sempre utilizzabili, che comprendono le cifre numeriche, le lettere maiuscole e minuscole, e diversi simboli di punteggiatura, parentesi e simboli matematici, sono i seguenti:

0 1 2 3 4 5 6 7 8 9
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
a b c d e f g h i j k l m n o p q r s t u v w x y z 
! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ 

 

INPUT

Un altro modo per assegnare un valore ad una variabile è la funzione input. Il programma incontrando una input si ferma, e aspetta che voi inseriate da tastiera il valore da assegnare alla variabile specificata (il valore va confermato con il tasto invio).

La funzione input produce sempre una stringa di caratteri, se volete trasformarli in numero intero o float la input va ulteriormente racchiusa nelle parentesi delle funzioni int e float, che hanno appunto il compito di effettuare queste conversioni.


a = input()         # Se volete ottenere una stringa
a = int(input())    # Se volete ottenere un numero intero
a = float(input())  # Se volete ottenere un numero float

Sul concetto di funzione torneremo più avanti, ma, come potete dedurre già ora, le funzioni servono per effettuare una qualche operazione su quello che viene specificato all’interno delle loro parentesi, “restituendo” un qualche risultato o svolgendo qualche compito. La funzione input() produce una stringa, e se è posta tra le parentesi di della funzione int, questa stringa viene convertita in numero intero, che viene a sua volta restituito dalla funzione int per essere in questo caso assegnato alla variabile ‘a’.

Se durante una input di valori numerici provate ad immettere caratteri non validi (ad esempio lettere al posto di cifre), o anche solo a dare invio senza aver scritto nulla, otterrete un errore di esecuzione con l’arresto immediato del programma, perché le funzioni int o float non riconosceranno una sequenza di cifre valida.

Si può far fronte a questa eventualità, lo vedremo quando parleremo di gestione degli errori, per adesso ricordatevi di inserire sempre correttamente i numeri.

 

PRINT

Ora vi starete domandando cosa ve ne fate di sfilze di numeri o stringhe assegnati alle variabili. Intanto li potete vedere a video con la funzione print, che in italiano significa appunto stampa. Quindi per vedere apparire sulla console il dato assegnato ad una variabile dovete scrivere:


print(a)

Naturalmente si possono rappresentare sullo schermo anche caratteri alfanumerici, parole, frasi, e tutto il set di caratteri particolari disponibili, volendo stamparli ricordatevi sempre di racchiuderli tra virgolette:


print("HELLO WORLD!")

 

OPERATORI MATEMATICI

Con le variabili numeriche potete compiere tutte le operazioni aritmetiche fondamentali, le quattro operazioni e l’elevamento a potenza. Gli operatori matematici di base sono i seguenti:

+	     somma
-	     sottrazione
*	     moltiplicazione
/	     divisione float
//	     divisione intera
%	     modulo (resto della divisione)
**	     elevamento a potenza

Se vi sembra strana la mancanza della radice quadrata, sappiate che in realtà esiste una funzione apposita per estrarre la radice (la vedremo più avanti), ma si può calcolare lo stesso ricordando che la radice ennesima di un numero è pari allo stesso numero elevato al reciproco di n, quindi per ottenere la radice quadrata di un numero è sufficiente elevarlo alla 0.5

Vediamo quindi subito una dimostrazione delle abilità matematiche del vostro computer sfruttando la formula del teorema di Pitagora, che permette di conoscere la misura dell’ipotenusa di un triangolo rettangolo conoscendo quella dei due cateti. Questo programma completo può servirvi come spunto per realizzare qualsiasi altro tipo di calcolo.


#------ PROGRAMMA PITAGORA
print("TEOREMA DI PITAGORA")
a = float(input("INSERISCI LA MISURA DEL PRIMO CATETO: "))
b = float(input("ORA L'ALTRO CATETO: "))
c = (a**2 + b**2)**0.5
print("L'IPOTENUSA MISURA:", c)

Risultato:

TEOREMA DI PITAGORA
INSERISCI LA MISURA DEL PRIMO CATETO: 12.5
ORA L'ALTRO CATETO: 4.3
L'IPOTENUSA MISURA: 13.2189258262538

Il simbolo # identifica l’inizio di un commento per il programmatore. I commenti vengono ignorati durante l’esecuzione, ma sono molto utili per ricordare a cosa serve una certa istruzione, cosa fa una certa riga o un intero blocco di istruzioni.

Se pensate che non vi servano perché voi avete una memoria di ferro… cambierete idea quando rileggerete un vostro programma a distanza di mesi o di anni. A maggior ragione è bene scrivere dei buoni commenti se il programma deve essere letto anche da altre persone.

La funzione input ha una stringa specificata tra le parentesi, questa indica il messaggio di richiesta (prompt) che deve comparire a video durante la input stessa. Se non vi fosse questa possibilità dovreste scrivere due istruzioni separate, una print per visualizzare la richiesta, seguita da una input.

La print finale contiene due elementi, una stringa e una variabile, separati da una virgola. La virgola indica che sulla stessa riga verrà scritto qualcos’altro di seguito (separato da uno spazio).

Ecco un esempio magari banale, ma adatto a spiegare e ampliare quanto detto. È importante cercare di capire come si comporta il programma in ogni situazione, per abituare la vostra mente a formulare le idee con la stessa logica.


print("NORMALMENTE")
print("VADO A CAPO.")
print("CON LA", "VIRGOLA", "VADO DI SEGUITO.")
print()                        # lascia una riga vuota
print("CON END", end=" ")
print("VADO DI SEGUITO", end=" ")
print("CON ALTRE PRINT.")

Risultato:

NORMALMENTE
VADO A CAPO.
CON LA VIRGOLA VADO DI SEGUITO.

CON END VADO DI SEGUITO CON ALTRE PRINT.

 

FLOWCHART

Pitagora è un programma rigorosamente sequenziale, in quanto formato da un unico blocco di istruzioni che vengono eseguite in ordine dalla prima all’ultima.

Il seguente diagramma di flusso è un sistema per rappresentare graficamente le operazioni svolte da un programma, e soprattutto all’inizio è un valido aiuto per comprendere la sequenza in cui “avvengono le cose”.

I parallelogrammi indicano operazioni di ingresso/uscita, i rettangoli le elaborazioni, e le frecce indicano l’ordine di esecuzione (flusso) delle istruzioni.

 

 

DIAMO LA PRECEDENZA

Nella scrittura di un’espressione matematica bisogna ricordare che le operazioni vengono effettuate con una ben precisa priorità: prima sono calcolati gli elevamenti a potenza, poi moltiplicazioni e divisioni, ed infine somme e sottrazioni.

Potete usare le parentesi per creare espressioni arbitrariamente complesse e modificare l’ordine delle priorità.

Le operazioni all’interno delle parentesi vengono infatti eseguite per prime. In caso di più operazioni alla stessa priorità, queste vengono calcolate sequenzialmente da sinistra verso destra:


print( 5 * 6 + 10 )          # 40
print( 5 * (6 + 10) )        # 80
print( 4 * 3 + 8 / 2 )       # 16.0
print( 4 * (3 + 8) / 2 )     # 22.0
print( 3.0 / 12.0 * 9.0 )    # 2.25
print( 3.0 / (12.0 * 9.0) )  # 0.027777777777777776

Nota: in Python 2.x la divisione / produce un risultato intero se tutti gli operandi sono di tipo intero, float se almeno un operando è di tipo float, in Python 3.x invece produce sempre un risultato float.


INDICE


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *