Pensare da informatico/Variabili, espressioni ed istruzioni: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Wim bot (discussione | contributi)
m Update syntaxhighlight tags - remove use of deprecated <source> tags
 
Riga 6:
 
L'istruzione <code>print</code> funziona sia per le stringhe che per gli interi.
<sourcesyntaxhighlight lang="python">
>>> print 4
4
</syntaxhighlight>
</source>
Se non sei sicuro del tipo di un valore, l'interprete te lo può dire:
<sourcesyntaxhighlight lang="python">
>>> type("Hello, World!")
<type 'string'>
>>> type(17)
<type 'int'>
</syntaxhighlight>
</source>
Ovviamente le stringhe appartengono al tipo string e gli interi al tipo int. Non è invece intuitivo il fatto che i numeri con il punto decimale appartengano al tipo float: questi numeri sono rappresentati in un formato chiamato '''[[w:Numero in virgola mobile|virgola mobile]]''' o '''floating-point'''.
<sourcesyntaxhighlight lang="python">
>>> type(3.2)
<type 'float'>
</syntaxhighlight>
</source>
Cosa dire di numeri come "17" e "3.2"? Sembrano effettivamente dei numeri, ma sono racchiusi tra virgolette e questo sicuramente significa qualcosa. Infatti non siamo in presenza di numeri ma di stringhe:
<sourcesyntaxhighlight lang="python">
>>> type("17")
<type 'string'>
>>> type("3.2")
<type 'string'>
</syntaxhighlight>
</source>
Quando scrivi numeri grandi puoi essere tentato di usare dei punti per delimitare i gruppi di tre cifre, come in 1.000.000. Questa in effetti non è una cosa consentita in Python ed il valore numerico in questo caso non è valido. È invece corretta una scrittura del tipo
<sourcesyntaxhighlight lang="python">
>>> print 1,000,000
1 0 0
</syntaxhighlight>
</source>
...anche se probabilmente questo risultato non è quello che ci si aspettava! Python interpreta 1,000,000 come una lista di tre valori da stampare (1, 0 e 0). Ricordati di non inserire virgole nei tuoi interi.
 
Riga 41:
 
L''''istruzione di assegnazione''' crea nuove variabili e assegna loro un valore:
<sourcesyntaxhighlight lang="python">
>>> messaggio = "Come va?"
>>> n = 17
>>> pi = 3.14159
</syntaxhighlight>
</source>
Questo esempio effettua tre assegnazioni. La prima assegna la stringa "Come va?" ad una nuova variabile chiamata messaggio. La seconda assegna l'intero 17 alla variabile n e la terza assegna il valore in virgola mobile 3.14159 alla variabile [[w:Pi greco|pi]].
 
Riga 58:
|}</div>
L'istruzione <code>print</code> funziona anche con le variabili:
<sourcesyntaxhighlight lang="python">
>>> print messaggio
Come va?
Riga 65:
>>> print pi
3.14159
</syntaxhighlight>
</source>
ed in ogni caso il risultato è il valore della variabile. Anche le variabili hanno il tipo; ancora una volta possiamo chiedere all'interprete a quale tipo ogni variabile appartenga:
<sourcesyntaxhighlight lang="python">
>>> type(message)
<type 'string'>
Riga 74:
>>> type(pi)
<type 'float'>
</syntaxhighlight>
</source>
Il tipo di una variabile è il tipo di valore cui essa si riferisce.
 
Riga 85:
 
Assegnando un nome illegale alla variabile otterrai un messaggio d'errore di sintassi:
<sourcesyntaxhighlight lang="python">
>>> 76strumenti = "grande banda"
SyntaxError: invalid syntax
Riga 92:
>>> class = "Computer Science 101"
SyntaxError: invalid syntax
</syntaxhighlight>
</source>
76strumenti è illegale perché non inizia con una lettera. milione$ è illegale perché contiene un carattere non valido (il segno di dollaro $). Ma cosa c'è di sbagliato in class?
 
Riga 118:
 
Per esempio lo script:
<sourcesyntaxhighlight lang="python">
print 1
x = 2
print x
</syntaxhighlight>
</source>
produce questa stampa:
<sourcesyntaxhighlight lang="python">
1
2
</syntaxhighlight>
</source>
 
== Valutazione delle espressioni ==
Un'espressione è una combinazione di valori, variabili e operatori. Se scrivi un'espressione sulla riga di comando l'interprete la valuta e mostra a video il risultato:
<sourcesyntaxhighlight lang="python">
>>> 1 + 1
2
</syntaxhighlight>
</source>
Sia un valore (numerico o stringa) che una variabile sono già di per sé delle espressioni:
<sourcesyntaxhighlight lang="python">
>>> 17
17
>>> x
2
</syntaxhighlight>
</source>
La differenza tra "valutare un'espressione" e stamparne il valore è sottile ma importante:
<sourcesyntaxhighlight lang="python">
>>> messaggio = "Come va?"
>>> messaggio
Riga 149:
>>> print messaggio
Come va?
</syntaxhighlight>
</source>
 
Quando Python mostra il valore di un'espressione usa lo stesso formato che si userebbe per inserirla: nel caso delle stringhe ciò significa che include le virgolette di delimitazione. L'istruzione print invece stampa il valore dell'espressione, che nel caso delle stringhe corrisponde al loro contenuto. Le virgolette sono quindi rimosse.
 
In uno script un valore preso da solo è legale, anche se non fa niente e non produce alcun risultato:
<sourcesyntaxhighlight lang="python">
17
3.2
"Hello, World!"
1 + 1
</syntaxhighlight>
</source>
 
{{cassetto
|titolo = Lo script dell'esempio non produce alcun risultato. Come lo modificheresti per mostrare i quattro valori?
|testo =
<sourcesyntaxhighlight lang="python">
print 17
print 3.2
Riga 171:
sum = "1 + 1"
print sum
</syntaxhighlight>
</source>
}}
 
Riga 186:
 
Addizione, sottrazione, moltiplicazione ed elevamento a potenza fanno tutto ciò che potresti aspettarti, ma la divisione potrebbe non sembrare così intuitiva. L'operazione seguente ha infatti un risultato inatteso:
<sourcesyntaxhighlight lang="python">
>>> minuti = 59
>>> minuti/60
0
</syntaxhighlight>
</source>
Il valore di minuti è 59, e 59 diviso 60 è 0.98333, non zero. La ragione di questa differenza sta nel fatto che Python sta facendo una '''divisione tra numeri interi'''.
 
Riga 196:
 
Una possibile soluzione a questo problema potrebbe essere il calcolo della percentuale, piuttosto che del semplice valore decimale:
<sourcesyntaxhighlight lang="python">
>>> minuti*100/60
98
</syntaxhighlight>
</source>
Ancora una volta il valore è arrotondato per difetto, ma almeno la risposta è approssimativamente corretta. Un'altra alternativa è l'uso della divisione in virgola mobile che tratteremo nella [[Pensare da informatico/Funzioni|sezione 3]].
 
Riga 216:
messaggio-1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Ciao"/123 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; messaggio*"Ciao" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "15"+2
L'operatore + funziona con le stringhe anche se la sua funzione è diversa da quella cui siamo abituati in matematica: infatti nel caso di stringhe l'operatore + rappresenta il '''concatenamento''', cioè l'aggiunta del secondo operando alla fine del primo. Per esempio:
<sourcesyntaxhighlight lang="python">
frutta = "banana"
verdura = " pomodoro"
print frutta + verdura
</syntaxhighlight>
</source>
Il risultato a video di questo programma è banana pomodoro. Lo spazio davanti alla parola pomodoro è parte della stringa ed è necessario per produrre lo spazio tra le due stringhe concatenate.
 
Riga 237:
 
Sappiamo già sommare e stampare dei numeri e possiamo fare le due operazioni nello stesso momento:
<sourcesyntaxhighlight lang="python">
>>> print 17 + 3
20
</syntaxhighlight>
</source>
In realtà l'addizione è stata portata a termine prima della stampa, così che le due operazioni non stanno avvenendo contemporaneamente. Qualsiasi operazione che ha a che fare con i numeri, le stringhe e le variabili può essere usata all'interno di un'istruzione di stampa. Hai già visto un esempio a riguardo:
<sourcesyntaxhighlight lang="python">print "Numero di minuti da mezzanotte: ", ore*60+minuti</sourcesyntaxhighlight>
Puoi anche inserire espressioni arbitrarie nella parte destra di un'istruzione di assegnazione:
<sourcesyntaxhighlight lang="python">percentuale = (minuti * 100) / 60 </sourcesyntaxhighlight>
Questa capacità può non sembrare particolarmente impressionante, ma vedrai presto altri esempi in cui la composizione permette di esprimere elaborazioni complesse in modo chiaro e conciso.
 
Riga 253:
 
Per questa ragione è una buona idea aggiungere delle note ai tuoi programmi per spiegare con un linguaggio naturale cosa sta facendo il programma nelle sue varie parti. Queste note sono chiamate '''commenti''', e sono marcati dal simbolo <code>#</code>:
<sourcesyntaxhighlight lang="python">
# calcola la percentuale di ore trascorse
percentuale = (minuti*100)/60
</syntaxhighlight>
</source>
In questo caso il commento appare come una linea a sé stante. Puoi eventualmente inserire un commento alla fine di una riga:
<sourcesyntaxhighlight lang="python">percentuale = (minuti*100)/60 # attenzione: divisione intera </sourcesyntaxhighlight>
Qualsiasi cosa scritta dopo il simbolo <code>#</code> e fino alla fine della riga viene trascurata nell'esecuzione del programma. Il commento serve al programmatore o ai futuri programmatori che dovranno usare questo codice. In questo ultimo esempio il commento ricorda al lettore che ci potrebbe essere un comportamento inatteso dovuto all'uso della divisione tra numeri interi.