day_1.md 6.36 KB
Newer Older
Tancredi Orlando's avatar
Tancredi Orlando committed
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# Corsi Python 2017

----

Potete ottenere questa presentazione recandovi all'indirizzo:

[slides.poul.org/2017/python](https://slides.poul.org/2017/python)

---

# Perché Python?

- Ottimo per i principianti
- Facile da usare
- Estremamente diffuso
- Moduli per qualunque cosa

----

## C

```c
#include <stdio.h>

int main() {
    printf("Hello World!\n");
    return 0;
}
```

----

## Java

```java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Goodbye, World!");
    }
}
```

----

## Python

```python
print('Hello World!')
```

----

![import antigravity](https://imgs.xkcd.com/comics/python.png)

----

## Breve storia

- Nasce nel 1991 per mano di Guido van Rossum
- Prende il nome dai Monty Python
- È in continua evoluzione
- Convivono due versioni (2 e 3)
edne's avatar
edne committed
63
- Noi useremo Python 3
Tancredi Orlando's avatar
Tancredi Orlando committed
64
65
66
- Fatelo anche voi

Notes:
edne's avatar
edne committed
67
68
- Ricordatevi il nome di Guido
- Aggiungere statistiche sullo sviluppo di python
Tancredi Orlando's avatar
Tancredi Orlando committed
69
70
71
72
73
74
75

----

## Interpretato vs. compilato

- Compilato: tradotto in linguaggio macchina
- Interpretato: eseguito da un altro programma
edne's avatar
edne committed
76
- Python è interpretato (circa)
Tancredi Orlando's avatar
Tancredi Orlando committed
77
78

Notes:
edne's avatar
edne committed
79
- Parlare della VM Python
Tancredi Orlando's avatar
Tancredi Orlando committed
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109

---

## Cosa serve

- Editor di testo (Atom, Notepad++)
- Interprete Python
  - Linux: generalmente preinstallato, altrimenti utilizzare il package manager
  - macOS: [Installer](https://www.python.org/ftp/python/3.6.1/python-3.6.1-macosx10.6.pkg)
  - Windows: [32bit](https://www.python.org/ftp/python/3.6.1/python-3.6.1.exe)
    o [64bit](https://www.python.org/ftp/python/3.6.1/python-3.6.1-amd64.exe)

----

## REPL

**R**ead, **E**val, **P**rint **L**oop

```bash
$ python3
Python 3.6.1 (default, Mar 27 2017, 00:27:06) 
[GCC 6.3.1 20170306] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello world!')
Hello world!
```

Per uscire: quit()

Notes:
edne's avatar
edne committed
110
- Differenza tra interprete (il software che converte le istruzioni in bytecode e
Tancredi Orlando's avatar
Tancredi Orlando committed
111
112
113
114
115
116
poi esegue quest'ultimo) e REPL (il software che si interfaccia con l'utente)

----

## Espressioni

edne's avatar
edne committed
117
```
Tancredi Orlando's avatar
Tancredi Orlando committed
118
119
>>> 2 + 2
4
edne's avatar
edne committed
120

Tancredi Orlando's avatar
Tancredi Orlando committed
121
122
>>> 3 * 3
9
edne's avatar
edne committed
123
124

>>> 4 < 5
Tancredi Orlando's avatar
Tancredi Orlando committed
125
126
127
128
129
True
```

----

edne's avatar
edne committed
130
131
132
133
## Commenti

----

Tancredi Orlando's avatar
Tancredi Orlando committed
134
135
## Errori

edne's avatar
edne committed
136
```
Tancredi Orlando's avatar
Tancredi Orlando committed
137
138
139
140
141
142
>>> 3 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
```

edne's avatar
edne committed
143
144
"Le scritte vanno lette" o "Il segreto degli hacker"

Tancredi Orlando's avatar
Tancredi Orlando committed
145
146
147
148
149
150
151
152
([Lettura consigliata](http://www.girodivite.it/Diario-di-un-aspirante-hacker.html))

----

## Variabili

```python
>>> x = 6
edne's avatar
edne committed
153

Tancredi Orlando's avatar
Tancredi Orlando committed
154
155
>>> x
6
edne's avatar
edne committed
156

Tancredi Orlando's avatar
Tancredi Orlando committed
157
158
159
160
>>> 2 * x
12

>>> y = x + 4
edne's avatar
edne committed
161

Tancredi Orlando's avatar
Tancredi Orlando committed
162
163
164
165
166
167
168
169
>>> y
10
```

----

### Cosa ho di fronte?

edne's avatar
edne committed
170
```
Tancredi Orlando's avatar
Tancredi Orlando committed
171
172
173
174
175
176
177
178
179
>>> type(3)
<class 'int'>

>>> type(3.14)
<class 'float'>
```

----

edne's avatar
edne committed
180
181
### Interi (`int`)

edne's avatar
edne committed
182
183
184
185
186
187
- Cifre senza punto.
```
12
0xAB
0b101
```
edne's avatar
edne committed
188
189
190
191
192
193
194
195
196
197
198
199
200

----

### Decimali (`float`)

- Cifre con punto

```
>>> 3.14 + 1.234
4.3740000000000006

>>> 100 / 3
33.333333333333336
Tancredi Orlando's avatar
Tancredi Orlando committed
201

edne's avatar
edne committed
202
203
204
>>> 100 // 3
33
```
Tancredi Orlando's avatar
Tancredi Orlando committed
205
206
207

----

edne's avatar
edne committed
208
209
210
### Casting

- È l'azione di conversione del tipo
edne's avatar
edne committed
211
- Si usa il nome del tipo destinazione
Tancredi Orlando's avatar
Tancredi Orlando committed
212

edne's avatar
edne committed
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
```
>>> int(4.20)
4

>>> x = float(13)

>>> x
13.0

>>> type(x)
float

>>> type(13)
int
```
Tancredi Orlando's avatar
Tancredi Orlando committed
228
229
230

----

edne's avatar
edne committed
231
### Booleani (`bool`)
Tancredi Orlando's avatar
Tancredi Orlando committed
232

edne's avatar
edne committed
233
234
235
236
237
238
239
240
241
242
243
- Possono assumere due valori: `True` o `False`
- Supportano operazioni logiche (`and`, `or`, `not`)
- Sono il risultato delle operazioni di confronto

```
# esempi + corto circuito e quando ti esplode in faccia la vita
# cast a booleano?
```

----

edne's avatar
edne committed
244
245
246
### None  ← metterlo parlando di funzioni?

- Equivale al `NULL` di C o Java
Tancredi Orlando's avatar
Tancredi Orlando committed
247
248
249

----

edne's avatar
edne committed
250
### Stringhe (`str`)
Tancredi Orlando's avatar
Tancredi Orlando committed
251

edne's avatar
edne committed
252
253
254
- Testo.
- Racchiuse tra singoli apici (`'`) o virgolette (`"`)
- Per stringhe su più righe racchiuse tra tripli apici (`'''`) o virgolette (`"""`)
edne's avatar
edne committed
255
- Sono immutabili
edne's avatar
edne committed
256
257
258
259
260
261

```
>>> a = "Hello"
>>> b = "World"
>>> a + ' ' + b
'Hello World'
Tancredi Orlando's avatar
Tancredi Orlando committed
262
263
264
265
266
267
```

----

### Liste

edne's avatar
edne committed
268
269
- Collezione ordinata di elemeti, anche di tipi diversi.
- Si definiscono con le parentesi quadre
Tancredi Orlando's avatar
Tancredi Orlando committed
270

edne's avatar
edne committed
271
```python
edne's avatar
edne committed
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
lista = [false, 1, "due", 3.0, 4, 5]
```

- Per accedere ad un elemento si usano le parentesi quadre
- Il primo elemento ha indice 0

```
>>> lista[2]
'due'
```

- Possono essere modificate

```
>>> lista[0] = 0.0
>>> lista.append('sei')
>>> lista
[0.0, 1, "due", 3.0, 4, 5, 'sei']
Tancredi Orlando's avatar
Tancredi Orlando committed
290
291
292
293
294
295
```

----

### Tuple

edne's avatar
edne committed
296
297
- Esattamente come le liste, ma immutabili.
- Si definiscono con le parentesi tonde.
Tancredi Orlando's avatar
Tancredi Orlando committed
298

edne's avatar
edne committed
299
```python
Tancredi Orlando's avatar
Tancredi Orlando committed
300
301
302
tupla = ('a', 1, 2, 'bcd')
```

edne's avatar
edne committed
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
---

### Unpacking

- Estrarre valori da un contenitore

```
>>> t = (1, 2)
>>> a, b = t
>>> b
2

>>> a, b = b, a
>>> b
1
```

Tancredi Orlando's avatar
Tancredi Orlando committed
320
321
----

edne's avatar
edne committed
322
323
324
325
326
327
328
329
### in

----

### Riferimenti

----

Tancredi Orlando's avatar
Tancredi Orlando committed
330
331
332
### Insiemi

- Come gli insiemi matematici,
edne's avatar
edne committed
333
- Non sono ordniati
Tancredi Orlando's avatar
Tancredi Orlando committed
334
335
- Non contengono elementi duplicati

edne's avatar
edne committed
336
```python
Tancredi Orlando's avatar
Tancredi Orlando committed
337
338
339
insieme = {"mele", "pere", 2, "arance"}
```

edne's avatar
edne committed
340
341
- Supportano operazioni logiche

Tancredi Orlando's avatar
Tancredi Orlando committed
342
343
344
345
346
347
---

### Dizionari

- Associano una chiave ad un valore
- Le chiavi devono essere immutabili
edne's avatar
edne committed
348
- I valori possono essere cambiati
Tancredi Orlando's avatar
Tancredi Orlando committed
349

edne's avatar
edne committed
350
```python
edne's avatar
edne committed
351
d = {
Tancredi Orlando's avatar
Tancredi Orlando committed
352
353
354
355
356
    "nome":"Tancredi",
    "cognome":"Orlando"
    }
```

edne's avatar
edne committed
357
358
359
360
361
362
363
- Si accede ai campi usando le chiavi

```
>>> d['nome']
'Tancredi'
```

Tancredi Orlando's avatar
Tancredi Orlando committed
364
365
366
367
----

## Strutture di controllo

edne's avatar
edne committed
368
369
TODO: parlare di musica

Tancredi Orlando's avatar
Tancredi Orlando committed
370
371
372
373
----

### if

edne's avatar
edne committed
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
Se una condizione è vera esegue un blocco di codice

```python
if 3 > 2:
    print('Condizione vera')
```

Notes:
- Dire perché qua stiamo usando `print` e non scrivendo il valore e basta come
  prima

### Blocchi
Si allineano con quattro spazi

(si possono usare anche 2 o 8 spazi, o i TAB, ma per favore non fatelo)

### else

```python
if 3 > 2:
    print('Condizione vera')
else:
    print('Condizione falsa')
```


Tancredi Orlando's avatar
Tancredi Orlando committed
400
401
402
403
404
405
406
407
----

### while

----

### for

edne's avatar
edne committed
408
409
410
break e continue?

----
Tancredi Orlando's avatar
Tancredi Orlando committed
411

edne's avatar
edne committed
412
413
### funzioni

edne's avatar
edne committed
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
----

### Scoping

global?

### Argomenti di default

```python
def f(a, b=3, c=6):
    print(a, b, c)
```

```
>>> f(1)
1 3 6

>>> f(1, 2)
1 2 6

>>> f(1, c=4)
1 3 4
```

### Return

edne's avatar
Moduli    
edne committed
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
---

# Moduli

--

## Moduli

- Riutilizzare funzioni o tenere un programma ordinato

- Semplicemente un file con estensione .py

- Un modulo può essere importato da un altro programma
 
 
```python
>>> import math
>>> math.sqrt(16)
4.0
```

--

## `from ... import`
edne's avatar
edne committed
464

edne's avatar
Moduli    
edne committed
465
Permette di importare solo alcune funzioni
edne's avatar
edne committed
466

edne's avatar
Moduli    
edne committed
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
```python
>>> from math import sqrt
>>> sqrt(16)
4.0
```

--

## La variabile `__name__`

- Contiene il nome del modulo

- Modulo importato o eseguito direttamente?

```python
if __name__ == '__main__':
	print('Programma eseguito direttamente')
else:
	print('Questo modulo è stato importato')
```
edne's avatar
edne committed
487

edne's avatar
edne committed
488
489
490
491
492
493

### i/o

- print
- input

edne's avatar
edne committed
494
495
496
497
498
499
500
501
502
503
504
### Formattaizine dell'utput

### Errori di sintassi

### Eccezzioni

### try (metterlo prima?)

### Sollevare Eccezioni
(definire eccezioni va nel giorno 2)

edne's avatar
edne committed
505

Tancredi Orlando's avatar
Tancredi Orlando committed
506
507
508
Tancredi Orlando
`<`[`tancredi@coselosche.org`](mailto:tancredi@coselosche.org)`>`

edne's avatar
edne committed
509
Niccolò Izzo `<`[`izzo.niccolo@gmail.com`](mailto:izzo.niccolo@gmail.com)`>`