Modifiche

Da GolemWiki.

Python Lezione 4 Giugno 2008

7 539 byte aggiunti, 13:47, 9 mag 2019
m
info prontuario python3
{{Note
|type=info
|text=La lezione fa riferimento a Python2! Dai un'occhiata anche al [[Pillole_Python | prontuario]] Python3
 
La versione 2 sarà dichiarata deprecata a gennaio 2020.
}}
 
== Python ==
[http://www.python.it/ Python] è un linguaggio di programmazione [http://it.wikipedia.org/wiki/Interprete_(informatica) interpretato].
Il linuaggio interpretato è simile agli altri linguaggi in circolazione ma, invece di essere trasformato direttamente in codice binario dal meccanismo automatico, viene interpretato da questo e poi mandato all'hardware.
È meglio Un linguaggio interpretato non ha bisogno di essere ricompilato: il codice scritto viene interpretato da un interprete a run-time (tempo di quelli compilati perchè si adatta ai vari hardwareesecuzione) e tradotto al volo nel linguaggio macchina.Python Quindi i programmi python possono girare su qualsiasi hardware e sistema operativo su cui è un ottimo linguaggio stato portato l'interprete. Ovviamente, questa cosa si paga sul tempo di prorammaziobe ma è un pò più lento, diversamente da quello in c.Python esecuzione pure: l'approccio ha 4 interpreti:generamlmente si usa cpython (classic python, scritto in c) in tutte le distribuzioni pythoni suoi vantaggi, ma c'è anche pypy e jython (scritto rispetto a un linguaggio compilato direttamente in java linguaggio macchina per creare un eseguibile, python)e gli altri liguaggi interpretati risultano essere più lenti.
La prima riga di ogni script Esistono vari interpreti: [http://www.python deve iniziare con #!usr.org Cpython], o classic python, è l'interprete "ufficiale", scritto in C e disponibile per linux, mac e windows.[http:/bin/envwww.jython.org/Project/ Jython] è un interprete scritto al 100% in Java, e si interfaccia strettamente ai programmi e alla libreria Java, [http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython IronPython] è un interprete python che gira sulla piattaforma .NET mentre [http://codespeak.net/pypy/dist/pypy/doc/home.html PyPy] è (anche) un interprete python scritto in.. python
il La prima riga di ogni script python deve iniziare con #! del file fa capire al sistema operativo che quello non è un file di testo ma un eseguibile./usr/bin/env python
il #! del file fa capire al sistema operativo (solo su sistemi posix, quindi unix/linux) che quello non è un file di testo ma un eseguibile da eseguire con l'inteprete python.
== COMMENTI ==
== PRINT ==
Lo statement [http: è una funzione, è seguito da una stringa (una cosa tra 2 virgolete)//docs.python.org/ref/print.La stringa deve essere tra virgolette in tutti i comandi, i numeri interi invece nohtml print] valuta tutte le espressioni presenti e quindi le stampa a video.Il punto e virgola in molti dei linguaggi di porgrammazione si mette alla fine di ogi riga, in Python si L'espressione da valutare può ma essere anche un buon pitonista semplice numero o una semplice stringa o in genere non generale un oggetto qualsiasi  >>> print 3 3 >>> print "3" 3 >>>  stampa lo fa maistesso valore anche se abbiamo passato prima un intero, poi una stringa.PRINT stampa l'oggetto che Questo è normale, perchè il numero "tre" viene doporappresentato dal simbolo 3 nel sistema decimale.Se scrivo: ''Invece >>> print 3+2 5 >>> otteniamo a video 5: l'inteprete ha valutato l'espressione, ha eseguito la somma e stampato il risultatoMentre se si esegue questo stampa scriviamo >>> print "3+2"se scrivo 3+2 '' print “3”'' stampa lo stesso ma in questo caso l'oggetto che si passsa è una quanto abbiamo passato la stringacomposta dal carattere 3, dal simbolo + e dal carattere 2.se scrivo '' >>> print "3"+"2" 32Stampa 3 concatenato a 2, ovvero la stringa 32. Uguale all'esempio del 3+2 tra interi, solo che qui ha usato l'opertatorescrivedi addizione tra stringhe, che fa la concatenazione Le variabili in python non devono essere dichiarate: esistono dalla prima volta in cui gli viene assegnato un valore>>> messaggio = "Hello, World">>> print messaggioHello, World l'interprete valuta l' 5espressione ''messaggio''e stampa il suo contenutose scrivo ''print “3+2”''== Errori e Eccezioni ==lui mi dà ''3+2Commentando l'assegnamento di messaggio, vediamo che l'interprete genera un errore: 
Le variabili non importa dichiararle jdoe@waste-bin ~ $ python Python 2.5.2 (r252:60911, May 24 2008, basta scrivere ad un certo punto15:28:31) [GCC 4.2.4 (Gentoo 4.2.4 p1.0)] on linux2 ''messaggio=”hello world”'' Type "help", "copyright", "credits" or "license" for more information. '' >>> print messaggio''se questo programma viene eseguito il risultatato sarà Traceback (most recent call last):''hello world'' File "<stdin>", line 1, in <module>l NameError: name 'interprete va a vedere cosa cmessaggio'è dentro la variabile messaggio e stampa hello worldis not defined
NameError è una eccezione. Vedremo più avanti come queste situazioni di errore possono essere ''catturate'' e ''gestite'' appositamente, sia
per tentare di risolvere il problema che per migliorare il feedback che il nostro programma da all'utente. Vedremo anche come
la gestione delle eccezioni è parte della programmazione normale di un programma, ovvero non è sempre legata a una situazione di errore.
== ECCEZIONE ==:se io commento la definizione Un altro esempio, tendando di messaggio (essommare mele e pere: ''# messaggio = >>> print 1 + " hello world a"'' Traceback (most recent call last) il programma non sa cos'è messaggio e se scrivo: File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int'print "messaggio"and 'str'il risultato sarà:name error, che, viene chiamato eccezione.
Vediamo che a questo giro l'eccezione lanciata è ValueError.
== LE STRINGHE ==
Gli oggetti di tipo stringa supportano molti svariati metodi perchè sono oggetti (e proprietà. E' da notare che è un altro nome per variabile).le stringhe sono immutabili.Se una stringa viene dichiarata la seconda volta, diversamente dalla prima, quella precedente viene buttata, non viene modificata per fare spazio alla nuova.
''messaggio=”ciao”
messaggio=”ciao mondo” print “messaggio”messaggio''lui scrivestampa
'' ciao mondo''
In Python non si possono sommare cose diverse, o meglio, lo posso fare ma mi converte il numero in stringasolo se è definita una conversione tra i due tipo.per esempio Le stringhe supportano anche alcuni operatori base:
''print messaggio*2''
l'esecuzione darà
''
esempio:
''Print “ciao”+”mondo”” mondo”''
lo eseguo e mi darà:
'' ciao mondo''
 
Se si scrive python da riga di comando parte l'interprete se scriviamo roba lui l'esegue e si usa per provare le cose.per uscire premere ctrl+d.
 
LE STRINGHE SONO IMMUTABILI.
== '''Funzione DIR''' ==
== I '''metodi''' ==
sono operazioni che si possono applicare alla stringai vari oggetti supportano.quelli che alcuni metodi, vedendo con la funzione dir(), iniziano e terminano con '''__'''spesso vengono usati per scoraggiare la gente ad usarli. Tali metodi, chiamati metodi speciali,in quanto qui non esistono i permessi e ognuno può modificare ciò dovrebbero essere chiamati direttamente,senza che ci sia una ragione specifica per farlo (ovvero: sapete quello che vuolestate facendo).In generale possono essere pensati come privati o riservati, anche se non  Quando il metodo inizia con '''AD''' richiama l'operatore dell'addizione '''__ doc__''' ce l'hanno tutti gli oggetti essendoci controlli di accesso come in altri linguaggi (stringhe, interipublic private del java o del c++ ad esempio) nessuno vieta di chiamarli...)
Ad esempio, il metodo __add__ delle stringhe è chiamato quando si fa la somma di due stringhe.
''"ciao" + " mondo"''
chiama in realtà
''"ciao".__add__(" mondo")''
''__ doc__'' ce l'hanno tutti gli oggetti (stringhe, interi...), e contiene una stringa di documentazione dell'oggetto.
metodo '''IS''':tutti I i metodi che iniziano per is danno come risultato o vero o falso.servono per controllare se una certa proprietà della stringa in esame è vera:
es:
''messaggio.isalpha()''
mi dice se messaggio è o meno alfanumerico(composto solo da numeri e cifre, senza spazi, tab, ritorno carrello ecc ecc).
isalpha è un oggetto quindi ha le proprietà doc .
se io scrivo
''messaggio.isalpaisalpha.__doc__''
mi dice che fa.
Importante metto tra “ solo se è una stringa.
Se io definisco un oggetto con un altro oggetto con una funzione non metto “.
es:
'' messaggio=”gigio”
es:
''TYPE(3)''
mi dice che variabile è.se è intero o stringaoppure un complesso, un float o un tipo definito dall'utente.
Se io scrivo ''DIR(3)''
mi da lo stesso pappie di roba di prima.tutta la lista dei metodi e delle proprietà degli int (dato che 3 è in intero)
'''
I TIPI DELLA LIBREARIA STANDARD''':sono le variabili, ci sono anche le LISTE
Esistono stringhe, interi, float (numeri con virgola)buleano booleano (che ha due valori, vero o falso, True e falseFalse)e i CONTENITORIvari contenitori:
== '''LE LISTE''' ==
dir (scaffale)''
da la lista dei metodi, da qui si capisce che la lista è un oggetto.
Se io faccio ''b = dir (a)''oAd esempio:
''a.append(“4”)''
aggiunge alla lista a il la stringa "4".'''La lista, a differenza delle stringhe, è un oggetto mutabile, quindi la funzione append di fatto manipola la lista MUTA!'''esistente per far spazio al nuovo oggetto da inserir 
Se faccio ''print (“a”)''
mi da la lista degli oggetti più "4" Da notare che  >>> mialista = [] >>> mialista [] >>> dir(a) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] Da qui vediamo che il risultato della funziona dir su una lista ritorna .. una lista. Vediamo come una lista può contenere qualsiasi oggetto, anche una lista o una tupla (vedi sotto) >>> mialista = [ (1,1,1), [2,2,2], 3, ([4,4,4.],(4,4,4))]
Questa è una lista di 4 oggetti, uno dei quali è una tupla, il secondo è una lista, il terzo un intero, il quarto una tupla contenente a sua volta una lista e una tupla.
== '''TUPLE''' ==
è simile a una lista , è un contenitore di elementi. La tupla non è mutabile., per cui se definita con 4 oggetti non potrà mai contenerne 5 come non si può cambiare ilvalore a uno degli oggetti  >>> miatupla = ( 1, 2, "a" ,(1,2,3)) >>> miatupla (1, 2, 'a', (1, 2, 3)) >>> len(miatupla) 4 Dall'esempio vediamo come una tupla possa contenere al suo interno oggetti di vario tipo (tra cui una tupla stessa): a tal propositoLa si vede che la lunghezza della tupla è molto piu veloce rispetto alla lista4 , infatti la tupla in essa contenuta - e che a sua volta contiene 3 oggetti - viene considerataun unico oggetto (perchè difatto lo è.) Vediamo come si può accedere posizionalmente agli elementi della tupla (l'indice parte da zero) >>> miatupla[0] # primo elemento 1 >>> miatupla[2] # terzo elemento 'a' >>> primo, secondo, terzo, quarto = miatupla # scompatta la tupla in 4 variabili >>> terzo 'a' >>> quarto (1, 2, 3)Con Inoltre, tentare di assegnare un nuovo valore a un elemento della tupla genera una eccezione >>> miatupla[0] = 3 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple si usano le parentesi tonde.' object does not support item assignment >>>
== '''DIZIONARI''' ==
il dizionario si definisce con le parentesi graffe {chiave:valore, chiave:valore}
a{[chiave}]
da il valore associato alla chiave.
Dizionari liste e tuple sono dele sequenze e sono iterable e si possono quindi scorrere.
== '''If elif else''' ==
  if condizione :indentato roba da fare se vero. ''statement1'' ''statement2'' ''statement3''
Python supporta o tab o spazio, si decide quanti tab o spazi alla prima indentazione.
Meglio lo spazio perchè in futuro I tab verranno lasciati.
Di solito si usa 4 spazi.
Non c'è la graffa in pyton o I begin o gli end, si chiude e si apre la riga un blocco indentandoNell'esempio precedente, ''statement1'' e ''statement2'' vengono eseguiti solo se si indentala condizione è vera, mentre ''statement3'' viene eseguito sempre
Esempio:
'' >>> a=3 >>> b=1 >>> if a > b: ... print ("a è maggiore di b") ... elif a =1''= b: ... print ("a è uguale a b") ... else: ... print ("a è minore di b") ... a è maggiore di b >>>
''if in questo programma definisco due valori, a >e b.Chiedo al programma se a è maggiore di b di scrivere : print (“ a è maggiore di b”) elif b, se a è uguale a==b: print (“ di scrivere che a è uguale a b”b e in tutte le altre condizioni (else) else: print(“b di scrivere che a è maggiore minore di a”)''b.
'''2.is, is not or, and,!='''
'' >>> if a is 1: ... print (“si”) >>> elif a is not 1: ... print (“no”) no >>> if a is 1 and b is 3: ... print (“si”) >>> if a is 3 or b is 3: ... print (“okkei”) okkei
if a is 1 and b is 3: print (“si”)'''!= è il diverso.'''
if Oltre ai classici test a volte siamo interessati a is vedere se un particolare elemento è presente in una tupla, lista o dizionario  >>> miodizionario = { 'primo': 1, 'secondo': "golem", 'terzo': [1 or b is ,2,3] } >>> if "primo" in miodizionario: ... print (“okkei”)'yeah' ... yeah >>> Vediamo come l'operatore ''in''!cerca nelle chiavi del dizionarioAnalogamente possiamo farlo nelle liste  >>> mialista = [1,2,3] >>> if 4 not in mialista: ... print "non c'è il diverso" ... non c'''è >>>
L'esempio precedente mostra anche che l'operazione può essere negata usando ''not''
== '''append, insert''' ==
specifica un ciclo, fa le cose tante volte fino ad una condizione.
For variabile in una sequenza di qualche tipo.
Es: ''for elemento in a:
print elemento''
es b è una >>> miatupla = ( 1, 2, "a" ,(1,2,3)) >>> for variabile in miatupla: ... print "nella tupla: ", ... print variabile ...Allora posso scrivere nella tupla: 1 nella tupla: 2 ''for elem in b nella tupla: a print “altro elemento” nella tupla: (1, 2, 3) “print elem”'' >>>
elem o qualsiasi altro nome gli dia è ogni elemento dentro la In caso volessi, nel ciclo, sapere "a che punto" della tupla (o lista o dizionario.della sequenza, in generale a che punto dell' '''iterable''') sono:
Se io voglio sia la chiave sia il valore >>> for indice, variabile in un dizionario enumerate(se metto elem mi mette solo la chiavemiatupla) posso fare:for chiave in a: ... print "elemento", '' ... print “chiave: “ + chiaveindice ... print “valore: “ + variabile ... elemento 0 1 elemento 1 2 elemento 2 a[chiave]'' elemento 3 (1, 2, 3) >>>
Iterando su un dizionario, che è un iterable, vengono resistuite le chiave, non i valori.  >>> miodizionario = { 'primo': 1, 'secondo': "golem", 'DOPO I DUE PUNTI METTO SEMPRE IL TABterzo': [1,2,3] } >>> for chiave in miodizionario: ... print chiave, ... print ":", ... print miodizionario[chiave] ... terzo : [1, 2, 3] primo : 1 secondo : golem Vediamo come gli elementi del dizionario non ci vengono resistuiti in un particolare ordine, anzi, non ci soono garanzie a riguardo  >>> dir (miodizionario) ['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__str__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] se vogliamo iterare su i valori e non sulle chiavi dobbiamo usare il metodo '''itervalues''' degli oggetti dizionario: >>> for valore in miodizionario.itervalues(): ... print valore ... [1, 2, 3] 1 golem >>>
== '''xrange''' ==
9
10''
xrange vale solo per for.
== '''range''' ==
è ha la stessa funzione di xrange, ovvero servire da iterable su N numeri, però ritorna non un oggetto di tipo xrange ma una lista.se io scrivo: 'E'più lento di xrange  >>> print range(10)''lui mi da '' [0,1,2,3,4,5,6,7,8,9].''è più lento di xrange e poi sta morendo >>>
== '''len''' ==
Calcolo di una potenza.
''Base base= raw_input (“inserisce la base:”) esponente=raw_input (“inserisci 'inserisci l\' esponente'/ esponente”)
base=int(base)
result=1
for i in xrange(esponente):
result = result * base
print result''
l'operatore il [http://docs.python.org/lib/built-in-funcs.html built-in] int forza il fatto () è necessario, dato che tutto quello che proviene dalla tastiera viene acquisito da raw_input() come stringa. Dato che l'operatore deve essere dobbiamo usarli come interi, occorre effettuare un interocast, lo dobbiamo scrivereovverouna trasformazione di tipo, altrimenti da stringa a intero.E' interessante notare che int() non funziona perchè lui lo vede come stringacerca di fare i miracoli: provate a vedere cosa succede se cercate di convertire "awlerorj" in int! [[Category:Corsi]]

Menu di navigazione