Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Dispensa e appunti su Python, Dispense di Elementi di Informatica

Appunti sul linguaggio di programmazione

Tipologia: Dispense

2018/2019

Caricato il 21/12/2019

gabriele-vivona
gabriele-vivona 🇮🇹

4.7

(10)

12 documenti

1 / 8

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
PYTHON 1
Lezione 6 del 1 aprile 2019
Introduzione
Python è un esempio di linguaggio di programmazione di alto livello
Come si può immaginare sentendo la definizione di “linguaggio di alto livello” esistono anche
linguaggi di basso livello come il Linguaggio macchina e il linguaggio assembly
I computer possono eseguire soltanto programmi scritti in linguaggi di basso livello, linguaggio
comprensibile all’esecutore. Noi scriviamo in linguaggio di alto livello e un software installato nel
computer che effettua la compilazione o la traduzione verso un linguaggio di basso livello.
Compilazione ed Interpretazione
I Linguaggi di alto livello devono essere elaborati prima di essere eseguiti e devono anche essere
verificati (non ci siano errori, poiché ogni linguaggio ha una sua sintassi e una sua semantica).
Quando ci sono degli errori il programma ci avvertirà sul tipo di errore e anche dov’è l’errore.
I programmi scritti in linguaggi di alto livello sono più veloci a scrivere, più corti e facilmente
leggibili e probabilmente anche più corretti.
Sono portabili, nel senso che può essere eseguito con diversi Sistemi Operativi.
I programmi di alto livello vengono trasformati in programmi di basso livello eseguibili dal
computer tramite due tipi di elaborazione:
Interpretazione (la traduzione avviene attraverso un software. L’interprete dal codice sorgente
legge le varie istruzioni una dopo l’altra e le trasforma nel risultato, quindi vengono eseguite una dopo
l’altra)
Compilazione(Il compilatore invece legge il programma di alto livello e la traduce completamente
in basso livello, quindilegge il codice sorgente1tutte insieme, fa una verifica sulla correttezza sintattica e
semantica e traduce tutto in codice eseguibile2 e solo dopo avremmo la soluzione)
Scrivere ed eseguire un programma in Python
Python è considerato il linguaggio interpretato, quindi i programmi sono eseguiti da un interprete.
Ci sono due modi in Python per usare l’interprete:
– a linea di comando
–in modo script
A linea di comando
Sulla schermata Shell di comando compaiono alcune stringhe che danno alcune informazioni sul
programma che stiamo utilizzando. Spuntano le tre parentesi angolari (>>>) e si può scrivere sulla Shell il
comando (Es. print 1+1) quindi viene eseguita e ci dà il risultato.
In modo script
La stessa cosa si può fare tramite script. Si scrive il programma in un file a parte e viene salvato su un file
con l’estensione .py
Quindi usa l’interprete Python e inserendo il file con l’estensione .py viene eseguito e spunterà a video il
risultato.
Un programma in Python
• Un programma è una sequenza di istruzioni che specificano come effettuare una elaborazione:
–matematico (es. fare dei calcoli)
–simbolico (es. ricerca e sostituzione testo)
Alcune istruzioni comuni a qualunque linguaggio:
input - ricezione di dati da tastiera, da file o da altro dispositivo
output - scrittura di dati su video, su file o trasmissione ad altro dispositivo
matematiche - esecuzione di semplici operazioni matematiche quali l’addizione e sottrazione
1Il programma di alto livello viene chiamato codice sorgente.
2Il programma tradotto viene chiamato codice oggetto o eseguibile.
NOTA: In genere per la programmazione si suddivide un compito (un problema) grande e complesso in una serie di
sotto-compiti sufficientemente semplici da poter essere eseguiti tramite una di queste istruzioni
pf3
pf4
pf5
pf8

Anteprima parziale del testo

Scarica Dispensa e appunti su Python e più Dispense in PDF di Elementi di Informatica solo su Docsity!

PYTHON 1

Lezione 6 del 1 aprile 2019

Introduzione

  • Python è un esempio di linguaggio di programmazione di alto livello
  • Come si può immaginare sentendo la definizione di “linguaggio di alto livello” esistono anche linguaggi di basso livello come il Linguaggio macchina e il linguaggio assembly
  • I computer possono eseguire soltanto programmi scritti in linguaggi di basso livello, linguaggio comprensibile all’esecutore. Noi scriviamo in linguaggio di alto livello e un software installato nel computer che effettua la compilazione o la traduzione verso un linguaggio di basso livello. Compilazione ed Interpretazione
  • I Linguaggi di alto livello devono essere elaborati prima di essere eseguiti e devono anche essere verificati (non ci siano errori, poiché ogni linguaggio ha una sua sintassi e una sua semantica). Quando ci sono degli errori il programma ci avvertirà sul tipo di errore e anche dov’è l’errore.
  • I programmi scritti in linguaggi di alto livello sono più veloci a scrivere, più corti e facilmente leggibili e probabilmente anche più corretti.
  • Sono portabili, nel senso che può essere eseguito con diversi Sistemi Operativi.
  • I programmi di alto livello vengono trasformati in programmi di basso livello eseguibili dal computer tramite due tipi di elaborazione:
  • Interpretazione (la traduzione avviene attraverso un software. L’interprete dal codice sorgente legge le varie istruzioni una dopo l’altra e le trasforma nel risultato, quindi vengono eseguite una dopo l’altra)
  • Compilazione (Il compilatore invece legge il programma di alto livello e la traduce completamente in basso livello, quindilegge il codice sorgente^1 tutte insieme, fa una verifica sulla correttezza sintattica e semantica e traduce tutto in codice eseguibile^2 e solo dopo avremmo la soluzione) Scrivere ed eseguire un programma in Python Python è considerato il linguaggio interpretato, quindi i programmi sono eseguiti da un interprete. Ci sono due modi in Python per usare l’interprete:
  • a linea di comando –in modo script A linea di comando Sulla schermata Shell di comando compaiono alcune stringhe che danno alcune informazioni sul programma che stiamo utilizzando. Spuntano le tre parentesi angolari (>>>) e si può scrivere sulla Shell il comando (Es. print 1+1) quindi viene eseguita e ci dà il risultato. In modo script La stessa cosa si può fare tramite script. Si scrive il programma in un file a parte e viene salvato su un file con l’estensione .py Quindi usa l’interprete Python e inserendo il file con l’estensione .py viene eseguito e spunterà a video il risultato. Un programma in Python
  • Un programma è una sequenza di istruzioni che specificano come effettuare una elaborazione: –matematico (es. fare dei calcoli) –simbolico (es. ricerca e sostituzione testo) Alcune istruzioni comuni a qualunque linguaggio:
  • input - ricezione di dati da tastiera, da file o da altro dispositivo
  • output - scrittura di dati su video, su file o trasmissione ad altro dispositivo
  • matematiche - esecuzione di semplici operazioni matematiche quali l’addizione e sottrazione (^1) Il programma di alto livello viene chiamato codice sorgente. (^2) Il programma tradotto viene chiamato codice oggetto o eseguibile. NOTA: In genere per la programmazione si suddivide un compito (un problema) grande e complesso in una serie di sotto-compiti sufficientemente semplici da poter essere eseguiti tramite una di queste istruzioni
  • condizionali - controllo di alcune condizioni ed esecuzione della sequenza di istruzioni appropriata
  • ripetizione - ripetizione di un’azione, di solito con qualche variazione

LINGUAGGI DI PROGRAMMAZIONE

Generazioni di linguaggi I linguaggi di programmazione si suddividono in prima, seconda e terza generazione (anche se in realtà siamo anche arrivati a quarta)

  • Linguaggi di prima generazione : (linguaggi di basso livello – anni ‘50) I programmi per i computer moderni sono costituiti da sequenze di istruzioni codificate sotto forma di cifre numeriche. Tale sistema di codifica è noto come linguaggio macchina , ovvero sequenze di bit 0 e 1 e qualche primitiva di basso livello. Il linguaggio macchina è macchinoso
  • Linguaggi di seconda generazione : (anni ’60 - permettevano di scrivere programmi con un linguaggio un po’ meno complesso del linguaggio macchina utilizzando dei codici mnemonici) Il linguaggio assemblativo o ASSEMBLY dove ancora esiste una corrispondenza biunivoca tra istruzioni in linguaggio macchina ( numeri binari ) e istruzioni in linguaggio ASSEMBLY ( insiemi di caratteri ). Tale linguaggio è detto mnemonico proprio perché ogni istruzione è formata da una sequenza di caratteri che ricordano il tipo di operazione da eseguire ed è necessario un programma (assemblatore o ASSEMBLER) che lo traduca nel linguaggio comprensibile da una calcolatore Le loro primitive erano di livello più alto (poiché esprimevano istruzioni in incrementi più grandi) indipendenti dalla macchina (poiché non si basavano sulle caratteristiche di una macchina specifica). Una volta identificato il repertorio di primitive di alto livello, un programma chiamato traduttore traduceva i programmi scritti con queste primitive in programmi scritti in linguaggio macchina. Tale traduttore era simile agli assembler di seconda generazione, tranne per il fatto che spesso, per eseguire l’attività richiesta da una singola primitiva di alto livello, doveva compilare molte istruzioni macchina. I programmi di traduzione furono quindi chiamati compilatori.
  • Linguaggi di terza generazione : (dagli anni ’70) Linguaggi di alto livello che sono molto vicini al linguaggio parlato e sono indipendenti dalla macchina. I linguaggi procedurali a medio-alto livello (come il C), dove il controllo del sistema diventa sempre più logico e meno meccanico (si accentua il distacco dall’hardware) con evoluzione verso linguaggi ad alto livello dove è possibile descrivere nuovi tipi di dati adatti alle proprie esigenze e manipolarli più agevolmente; appartengono a quest’ultima categoria linguaggi come Java (dal ‘95), il C++ (‘98) o C# (nel 2001). Paradigmi di programmazione I paradigmi di programmazione sono: imperativo, dichiarativo, funzionale, ad oggetti. Essi stabiliscono una logica di fondo su cui è basato un linguaggio.
    • Paradigma imperativo o procedurale: sequenza di comandi che eseguiti dalla macchina servono per elaborare i dati e produrre i risultati desiderati. (faccio una domanda e ottengo una risposta)
    • Paradigma dichiarativo: permette disviluppare una descrizione precisa del problema, scoprire e realizzare un algoritmo generale di un problema.
    • Paradigma funzionale: il processo di sviluppo è visto come interconnessione di scatole nere predefinite, ognuna accetta un valore in ingresso e produce un valore in uscita
    • Paradigma ad oggetti: un software è considerato come un insieme di unità chiamate oggetti ognuna della quali può eseguire azioni e/o inviare richieste ad altri oggetti Programmazione tradizionale Un programma, in generale, consiste di un insieme di istruzioni che fanno parte di queste categorie:
    • istruzioni dichiarative: definiscono la terminologia personalizzata, per esempio i nomi che fanno riferimento ai dati; Es: cateto; x; y; numero; somma. Nella parte dichiarativa si dichiara tutto ciò che usiamo per utilizzare determinati dati.

nome e cognome un array di caratteri età numero, un intero data di nascita tipo aggregato che contiene tre interi (giorno, mese, anno) . Costanti Le costanti, a differenza delle variabili, sono dei nomi che diamo a dei dati di cui sappiamo che il valore rimane costante in tutta la fase di esecuzione del nostro programma. Istruzioni di assegnamento Nei linguaggi di programmazione, per assegnare un dato ad una variabile vengono utilizzati dei simboli. Ad esempio in Python, cos’ come in altri linguaggi quali C++ o C#, l’assegnazione avviene utilizzando = Overloading In pochissime parole, ci sono alcuni simboli che possono avere diverse funzioni in base a dove vengono collocate. Il + tra due stringhe le unisce; tra due interi li somma. Istruzioni di controllo Ci permettono di passare il controllo da una parte all’altra del nostro programma. È un’istruzione imperativa che modifica il flusso di esecuzione del programma.

PYTHON CONCETTI DI BASE

Operatore modulo (%) L’ operatore modulo (%) opera su interi e sulle espressioni intere e restituisce il resto della divisione. if (n%2==0): print( n, “è pari”) Espressioni Booleane Un’espressione Boolena che è vera o falsa. In Python un'espressione che è vera ha valore 1, un'espressione falsa ha valore 0. Es: L'operatore == confronta due valori e produce un risultato di tipo booleano:

5 == 5 1 5 == 6 0 Possono anche essere utilizzati gli operatori logici and, or, not che verranno segnati in arancione. Esecuzione condizionale if (x>0): print (x, “è positivo”) L'istruzione indentata che segue i due punti della riga if viene eseguita solo se la condizione è vera. Se la condizione è falsa non viene eseguito alcunché, tranne se non segue un else con il quale vengono eseguiti i comandi dotto l’istruzione. Un'altra proprietà dell'istruzione if è la funzione elif. È un'abbreviazione di else if e significa: esegui il blocco di istruzioni tabulato sotto elif se la condizione necessaria al primo if è falsa e la condizione elif è vera. Condizioni annidate  quando ci sono if dentro if Inserimento da tastiera Altri operatori di confronto x != y # x è diverso da y? x > y # x è maggiore di y? x < y # x è minore di y? x >= y # x è maggiore o uguale a y? x <= y # x è minore o uguale a y?

If=se; elif = altrimenti se; else= altrimenti

Esiste, ovviamente, la possibilità che l’utente inserisca nel programma eseguito un numero, una parola, una frase. Per questo esiste la funzione input. Tuttavia, qualunque cosa si inserisca viene trattato come stringa, quindi se si vuole inserire un numero bisogna usare la funzione di input preceduta da eval, in questo modo: Istruzione while L’istruzione while viene utilizzata per creare un ciclo condizionato. L'istruzione esegue il blocco di codice indentato finché la condizione della while è vera. Il loop termina quando la condizione diventa falsa. Funzioni Una funzione è una sequenza di istruzioni che esegue una determinata operazione.

STRINGHE

Una stringa è una sequenza di caratteri delimitata da apici singoli ‘ o doppi "" Tipi di dati composti Le stringhe sono qualitativamente diverse dagli altri tipi di dati poiché sono composte di unità più piccole: i caratteri. I tipi di dati che sono fatti di elementi più piccoli sono detti tipi di dati composti. A seconda di ciò che stiamo facendo possiamo avere la necessità di trattare un tipo composto come fosse una singola entità o possiamo voler agire sulle sue singole parti. Questa duplice possibilità è molto utile. L'operatore porzione seleziona dei caratteri da una stringa:

Frutto = "banana" Lettera = Frutto[1] print Lettera Restituisce: a Lunghezza La funzione len stampa a video il numero di caratteri di una stringa: Frutto = "banana" len(Frutto) 6 Elaborazione trasversale e cicli FOR Molti tipi di elaborazione comportano un'azione su una stringa un carattere per volta. Spesso queste elaborazioni iniziano dal primo carattere, selezionano un carattere per volta e continuano fino al completamento della stringa. Questo tipo di elaborazione è definita elaborazione trasversale o attraversamento , in quanto attraversa la stringa dall'inizio alla fine. Un modo per implementare un'elaborazione trasversale è quello di usare un ciclo while o un ciclo for. Porzioni di stringa Nelle stringhe è possibile effettuare lo “slicing” (dall’inglese affettare), ovvero si può trarre dalla stringa un segmento di stringa chiamato porzione. La selezione di una porzione è simile alla selezione di un carattere: parola= “albero” print (parola[2]) Print (parola[1:4]) b lbe L'operatore [n:m] ritorna la stringa a partire dall' "n-esimo" carattere incluso fino all' "m-esimo" escluso. Questo comportamento non è intuitivo, e per comprenderlo è meglio immaginare i puntatori tra i caratteri, come nel diagramma seguente: Se non è specificato il primo indice (prima dei due punti :) la porzione parte dall'inizio della stringa. Senza il secondo indice la porzione finisce con il termine della stringa. Confronto tra stringhe numero= eval(input(“Inserisci un numero”)) for carattere in parola: print carattere

string.find("bob", "b", 1, 2)

In questo esempio la ricerca fallisce perché la lettera 'b' non appare nel dominio definito dagli indici 1 e 2 (da 1 incluso fino a 2 escluso). Classificazione dei caratteri È spesso necessario esaminare un carattere e controllare se questo è maiuscolo, minuscolo, o se si tratta di una cifra o di uno spazio bianco. A questo scopo il modulo string fornisce parecchie costanti molto utili. La stringa string.lower contiene tutti i caratteri che il sistema considera minuscoli. Allo stesso modo string.upper contienetutti i caratteri maiuscoli. Guarda cosa contengono queste stringhe:

print string.lower print string.upper print string.digits Possiamo usare queste costanti e la funzione find per classificare i caratteri. Per esempio se find(string.lower, Carattere) ritorna un valore diverso da -1 allora Carattere è minuscolo (un valore diverso da -1 indicherebbe infatti la posizione del carattere trovato): def Minuscolo(Carattere): return string.find(string.lower, Carattere) != - In alternativa possiamo usare l'operatore in che determina se un carattere compare in una stringa: def Minuscolo(Carattere): return Carattere in string.lower o il consueto operatore di confronto: def Minuscolo(Carattere): return 'a' <= Carattere <= 'z' Se Carattere è compreso tra 'a' e 'z' deve per forza trattarsi di una lettera minuscola.

LISTE

Una lista è una serie ordinata di valori, ognuno identificato da un indice. I valori che fanno parte della lista sono chiamati elementi. Le liste sono simili alle stringhe essendo insiemi ordinati di caratteri, fatta eccezione per il fatto che gli elementi di una lista possono essere di tipo qualsiasi. Liste e stringhe (e altri tipi di dati che si comportano da insiemi ordinati) sono chiamate sequenze. Valori della lista Per creare una lista (modo più semplice): racchiudere i suoi elementi tra parentesi quadrate ([ e ]): [10, 20, 30, 40] ["Pippo", "Pluto", "Paperino"] Il primo esempio è una lista di quattro interi, il secondo una lista di tre stringhe. Gli elementi di una stessa lista non devono necessariamente essere tutti dello stesso tipo. Questa lista contiene una stringa, un numero in virgola mobile, un intero ed un'altra lista: ["ciao", 2.0, 5, [10, 20]] Una lista all'interno di un'altra lista è detta lista annidata. Poiché le liste che contengono numeri interi consecutivi sono così comuni, Python fornisce un modo semplice per crearle:

range(1,5) [1, 2, 3, 4] La funzione range prende due argomenti e ritorna una lista che contiene tutti gli interi a partire dal primo (incluso) fino al secondo (escluso).

Ci sono altre due forme per range. Con un solo argomento crea una lista a partire da 0:

range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Se è presente un terzo argomento questo specifica l'intervallo tra valori successivi, chiamato passo. Questo esempio mostra come ottenere una stringa dei numeri dispari tra 1 e 10: range(1, 10, 2) [1, 3, 5, 7, 9]

  • Infine esiste una lista speciale che non contiene alcun elemento: è chiamata lista vuota ed è indicata da [].

ListaVuota = []