day_1.md 5.34 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
130
131
True
```

----

## Errori

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

edne's avatar
edne committed
139
140
"Le scritte vanno lette" o "Il segreto degli hacker"

Tancredi Orlando's avatar
Tancredi Orlando committed
141
142
143
144
145
146
147
148
([Lettura consigliata](http://www.girodivite.it/Diario-di-un-aspirante-hacker.html))

----

## Variabili

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

Tancredi Orlando's avatar
Tancredi Orlando committed
150
151
>>> x
6
edne's avatar
edne committed
152

Tancredi Orlando's avatar
Tancredi Orlando committed
153
154
155
156
>>> 2 * x
12

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

Tancredi Orlando's avatar
Tancredi Orlando committed
158
159
160
161
162
163
164
165
>>> y
10
```

----

### Cosa ho di fronte?

edne's avatar
edne committed
166
```
Tancredi Orlando's avatar
Tancredi Orlando committed
167
168
169
170
171
172
173
174
175
>>> type(3)
<class 'int'>

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

----

edne's avatar
edne committed
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
### Interi (`int`)

- Cifre senza punto

----

### Decimali (`float`)

- Cifre con punto

```
>>> 3.14 + 1.234
4.3740000000000006

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

edne's avatar
edne committed
193
194
195
>>> 100 // 3
33
```
Tancredi Orlando's avatar
Tancredi Orlando committed
196
197
198

----

edne's avatar
edne committed
199
200
201
### Casting

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

edne's avatar
edne committed
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
```
>>> int(4.20)
4

>>> x = float(13)

>>> x
13.0

>>> type(x)
float

>>> type(13)
int
```
Tancredi Orlando's avatar
Tancredi Orlando committed
219
220
221

----

edne's avatar
edne committed
222
### Booleani (`bool`)
Tancredi Orlando's avatar
Tancredi Orlando committed
223

edne's avatar
edne committed
224
225
226
227
228
229
230
231
232
233
234
- 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
235
236
237
### None  ← metterlo parlando di funzioni?

- Equivale al `NULL` di C o Java
Tancredi Orlando's avatar
Tancredi Orlando committed
238
239
240

----

edne's avatar
edne committed
241
### Stringhe (`str`)
Tancredi Orlando's avatar
Tancredi Orlando committed
242

edne's avatar
edne committed
243
244
245
- Testo.
- Racchiuse tra singoli apici (`'`) o virgolette (`"`)
- Per stringhe su più righe racchiuse tra tripli apici (`'''`) o virgolette (`"""`)
edne's avatar
edne committed
246
- Sono immutabili
edne's avatar
edne committed
247
248
249
250
251
252

```
>>> a = "Hello"
>>> b = "World"
>>> a + ' ' + b
'Hello World'
Tancredi Orlando's avatar
Tancredi Orlando committed
253
254
255
256
257
258
```

----

### Liste

edne's avatar
edne committed
259
260
- Collezione ordinata di elemeti, anche di tipi diversi.
- Si definiscono con le parentesi quadre
Tancredi Orlando's avatar
Tancredi Orlando committed
261

edne's avatar
edne committed
262
```python
edne's avatar
edne committed
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
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
281
282
283
284
285
286
```

----

### Tuple

edne's avatar
edne committed
287
288
- Esattamente come le liste, ma immutabili.
- Si definiscono con le parentesi tonde.
Tancredi Orlando's avatar
Tancredi Orlando committed
289

edne's avatar
edne committed
290
```python
Tancredi Orlando's avatar
Tancredi Orlando committed
291
292
293
tupla = ('a', 1, 2, 'bcd')
```

edne's avatar
edne committed
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
---

### 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
311
312
313
314
315
----

### Insiemi

- Come gli insiemi matematici,
edne's avatar
edne committed
316
- Non sono ordniati
Tancredi Orlando's avatar
Tancredi Orlando committed
317
318
- Non contengono elementi duplicati

edne's avatar
edne committed
319
```python
Tancredi Orlando's avatar
Tancredi Orlando committed
320
321
322
insieme = {"mele", "pere", 2, "arance"}
```

edne's avatar
edne committed
323
324
- Supportano operazioni logiche

Tancredi Orlando's avatar
Tancredi Orlando committed
325
326
327
328
329
330
---

### Dizionari

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

edne's avatar
edne committed
333
```python
edne's avatar
edne committed
334
d = {
Tancredi Orlando's avatar
Tancredi Orlando committed
335
336
337
338
339
    "nome":"Tancredi",
    "cognome":"Orlando"
    }
```

edne's avatar
edne committed
340
341
342
343
344
345
346
- Si accede ai campi usando le chiavi

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

Tancredi Orlando's avatar
Tancredi Orlando committed
347
348
349
350
----

## Strutture di controllo

edne's avatar
edne committed
351
352
TODO: parlare di musica

Tancredi Orlando's avatar
Tancredi Orlando committed
353
354
355
356
----

### if

edne's avatar
edne committed
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
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
383
384
385
386
387
388
389
390
391
392
----

### while

----

### for

---

edne's avatar
edne committed
393
394
395
396
397
398
399
400
401
402
403
### funzioni

### try

### i/o

- print
- input

## import

Tancredi Orlando's avatar
Tancredi Orlando committed
404
405
406
Tancredi Orlando
`<`[`tancredi@coselosche.org`](mailto:tancredi@coselosche.org)`>`

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