Commit 13ec2ace authored by Andrei - Tudor Corduneanu's avatar Andrei - Tudor Corduneanu
Browse files

last version + englisch

parent 82976a53
This diff is collapsed.
......@@ -2,11 +2,23 @@
"cells": [
{
"cell_type": "markdown",
"id": "00e3afed",
"id": "exposed-parade",
"metadata": {},
"source": [
"<h1 class=\"intro_title\" style=\"text-align:center; font-size: 45px;\">Python course 2021</h1>\n",
"<h2 class=\"intro_subtitle\" style=\"text-align:center; font-size: 30px;\">Python 101</h2>\n",
"\n",
" # Python\n",
"<img class=\"intro_logo\" style=\"width:400px\" src=\"https://static.poul.org/assets/logo/logo_text_g.svg\" alt=\"POuL logo\"/>\n",
"\n",
"<p class=\"intro_author\" style=\"text-align: center; font-size: 18px;\">Andrei Tudor &lt;tua_mail@poul.org&gt;</p>"
]
},
{
"cell_type": "markdown",
"id": "00e3afed",
"metadata": {},
"source": [
"# Python\n",
"\n",
"- Invecchia molto bene\n",
"- community --> librerie\n",
......@@ -65,19 +77,6 @@
"print(variabile)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a4c5765f",
"metadata": {},
"outputs": [],
"source": [
"x = 4\n",
"y = 2\n",
"print(x > y) ## >, <, >=, !=, ...\n",
"print(x / y) ## *, /, +, -, %"
]
},
{
"cell_type": "code",
"execution_count": null,
......@@ -188,7 +187,7 @@
" self.who = who\n",
"\n",
" def hello(self):\n",
" print(\"hello, \" + self.who)\n",
" print(f\"hello, {self.who}\")\n",
" \n",
"classe = Class_hello(\"world\")\n",
"classe.hello()"
......@@ -275,6 +274,63 @@
"> [@AlSweigart python books](https://automatetheboringstuff.com/2e/chapter1/)\n"
]
},
{
"cell_type": "markdown",
"id": "bffb1568",
"metadata": {},
"source": [
"## Tipi/Operatori \n",
"Le variabili possono contenere più tipi di dato, dai più semplici (che vedremo ora..), ai più complessi...\n",
"\n",
"Possiamo formare delle espressioni che l'interprete di python risolverà per noi.\n",
"\n",
"Per chi avrà poi voglia di [approfondire....](https://docs.python.org/3/tutorial/introduction.html#using-python-as-a-calculator)"
]
},
{
"cell_type": "markdown",
"id": "b6b37f12",
"metadata": {},
"source": [
"| Name | Exampl | \n",
"|--------------|--------------|\n",
"| Integer | 11 |\n",
"| Float | 2.3 |\n",
"| Boolean | True/False |\n",
"| String | \"mela\" |\n",
"| ...... | .... |"
]
},
{
"cell_type": "markdown",
"id": "362ccee3",
"metadata": {},
"source": [
"| operatore | nome |\n",
"|-----------|--------------|\n",
"| / | divisione |\n",
"| * | moltiplic. |\n",
"| + | addizione |\n",
"| - | sottrazione |\n",
"| % | resto |\n",
"| // | floor divis | \n",
"| ** | power |"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "06eba7f4",
"metadata": {},
"outputs": [],
"source": [
"######## Test operatori/tipi\n",
"x = 10\n",
"y = 5\n",
"\n",
"print((x % y) + 1**2 / 2)"
]
},
{
"cell_type": "markdown",
"id": "48686371",
......@@ -292,10 +348,10 @@
"source": [
"print(\"Ciao utente..\")\n",
"cestino = 12\n",
"print(\"[*] il cestino contiene \" + str(cestino) + \" mele.\")\n",
"print(f\"[*] il cestino contiene {cestino} mele.\")\n",
"mele_aggiunte = 6\n",
"cestino += mele_aggiunte\n",
"print(\"[*] al cestino sono state aggiunte \" + str(mele_aggiunte) + \" mele, oer un totale di \" + str(cestino) + \" mele.\")\n",
"print(f\"[*] al cestino sono state aggiunte {mele_aggiunte} mele, per un totale di {cestino} mele.\")\n",
"cestino %= 2\n",
"print(\"[*] ...\")"
]
......@@ -305,46 +361,17 @@
"id": "c57c59ee",
"metadata": {},
"source": [
"# controllo del flusso del programma\n",
"# [controllo del flusso del programma](https://docs.python.org/3/tutorial/controlflow.html)\n",
"\n",
"Un blocco di codice viene eseguito a determinate condizioni, che occorrono in base alla valutazione logica di un'espressione.\n",
"\n",
"Verranno quindi trattate le tematiche:\n",
"- Blocchi di codice\n",
"- Espressioni logiche\n",
"- Esecuzione condizionale\n",
"- Esecuzione per iterazione"
]
},
{
"cell_type": "markdown",
"id": "b6c5c7b1",
"metadata": {},
"source": [
"## Un blocco di codice\n",
"mentre in C i blocchi di codice vengono racchiusi tra *{* *}*:\n",
"```c\n",
"int main(void)\n",
"{\n",
" int x;\n",
" char xx;\n",
" printf(\"Program initializing...\")\n",
" //// ....Some other code\n",
" return 0;\n",
"}\n",
"```\n",
"\n",
"in python i blocchi di codice vengono definiti dalla loro indentazione:\n",
"```python\n",
"\n",
"def main():\n",
" x = 11\n",
" y = 2\n",
" something = \"something\"\n",
" print(\"Program initialized...\")\n",
" # Some other code....\n",
" return something\n",
"- Esecuzione per iterazione\n",
"- Blocchi di codice <-- siamo precisi\n",
"\n",
"```"
"...il titolo è anche un link"
]
},
{
......@@ -385,7 +412,20 @@
"source": [
"## Esecuzione CONDIZIONALE\n",
"- *if* --- controlla l'espressione, esegue il blocco di codice se risulta *vera*\n",
"- *else* --- esegue il blocco di codice se risulta *non vera*\n"
"- *elif* --- controlla un'altra espressione, esegue il blocco se risulta *vera*\n",
"- *else* --- esegue il blocco di codice se le precedenti risultano *non vere*\n",
"\n",
"\n",
"```python\n",
"if some_expression:\n",
" # Do something\n",
"elif some_other_expression:\n",
" # This also does something\n",
"elif maybe_last_expression:\n",
" # This does something different\n",
"else:\n",
" # Does something else\n",
"```"
]
},
{
......@@ -395,20 +435,14 @@
"metadata": {},
"outputs": [],
"source": [
"cestino = 18\n",
"cestino = 10\n",
"\n",
"if cestino % 2 == 0:\n",
" print(\"[*] Il cestino contiene un numero pari di mele\")\n",
"if cestino == 10:\n",
" print(\"[*] Il cestino contiene 10 mele\")\n",
"elif cestino > 10:\n",
" print(\"[*] Il cestino contiene più di 10 mele\")\n",
"else:\n",
" print(\"[*] Il cestino contiene un numero dispari di mele\")"
]
},
{
"cell_type": "markdown",
"id": "6ce2ac60",
"metadata": {},
"source": [
"...una casistica più ampia:"
" print(\"[*] Il cestino contiene meno di 10 mele\")"
]
},
{
......@@ -422,10 +456,8 @@
"\n",
"if cestino == 0:\n",
" print(\"[*] Il cestino è vuoto\")\n",
"elif cestino % 2 == 0:\n",
" print(\"[*] Il cestino contiene un numero pari di mele\")\n",
"else:\n",
" print(\"[*] Il cestino contiene un numero dispari di mele\")"
" print(\"[*] Il cestino contiene qualche mela\")"
]
},
{
......@@ -435,7 +467,15 @@
"source": [
"## Esecuzione per ITERAZIONE\n",
"- while -- esegue il blocco in 'loop' finchè l'espressione valutata è *vera*\n",
"- for -- esegue il blocco in 'loop' per ogni elemento in una sequenza"
"- for -- esegue il blocco in 'loop' per ogni elemento in una sequenza\n",
"\n",
"```python\n",
"while expression_is_true:\n",
" ## Do something\n",
" \n",
"for some_index in this_sequence:\n",
" ## Do something\n",
"```"
]
},
{
......@@ -446,9 +486,9 @@
"outputs": [],
"source": [
"cestino = 4\n",
"while cestino >= 0:\n",
"while cestino > 0:\n",
" cestino -= 1\n",
" print(\"Lo user ha lanciato una mela\")\n",
" print(f\"Lo user ha lanciato una mela, ora ce ne sono {cestino}\")\n",
"print(\"\\nNon ci sono più mele nel cestino :(\")"
]
},
......@@ -461,7 +501,7 @@
"source": [
"i = 1\n",
"while i <= 10:\n",
" print(\"9 x \" + str(i) + \" = \" + str(i*9))\n",
" print(f\"9 x {i} = {i*9}\")\n",
" i += 1"
]
},
......@@ -472,7 +512,7 @@
"metadata": {},
"outputs": [],
"source": [
"for indice in \"mela\":\n",
"for indice in [\"mele\",\"banane\",\"pere\",\"fagiani\"]:\n",
" print(indice)"
]
},
......@@ -486,7 +526,7 @@
"cestino = 0\n",
"for i in range(5):\n",
" cestino += 1\n",
" print(\"lo user ha aggiunto una mela, ce ne sono \" + str(cestino))"
" print(f\"lo user ha aggiunto una mela, ce ne sono {cestino}.\"))"
]
},
{
......@@ -506,7 +546,8 @@
"source": [
"for i in range(100):\n",
" print(i)\n",
" break"
" if i == 5:\n",
" break"
]
},
{
......@@ -517,6 +558,7 @@
"outputs": [],
"source": [
"i = 0\n",
"y = 0\n",
"while i < 10:\n",
" print(\"[*!*]\")\n",
" i += 5\n",
......@@ -527,15 +569,59 @@
"#print(y)"
]
},
{
"cell_type": "markdown",
"id": "f7b0044d",
"metadata": {},
"source": [
"## Un blocco di codice\n",
"mentre in C i blocchi di codice vengono racchiusi tra *{* *}*:\n",
"```c\n",
"int main(void)\n",
"{\n",
" int x;\n",
" char xx;\n",
" printf(\"Program initializing...\")\n",
" //// ....Some other code\n",
" return 0;\n",
"}\n",
"```\n",
"\n",
"in python i blocchi di codice vengono definiti dalla loro indentazione:\n",
"```python\n",
"\n",
"def main():\n",
" x = 11\n",
" y = 2\n",
" something = \"something\"\n",
" print(\"Program initialized...\")\n",
" # Some other code....\n",
" return something\n",
"\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "e6120a5b",
"metadata": {},
"source": [
"# Funzioni\n",
"\"Scatole nere\", possono prendere dei parametri in entrata, possono ritornare dei valori in uscita.\n",
"[\"Scatole nere\"](https://docs.python.org/3/tutorial/controlflow.html#defining-functions), possono prendere dei parametri in entrata, possono ritornare dei valori in uscita.\n",
"\n",
"Permettono la riusabilità del codice, permettono di fare cose complesse in poco tempo, col codice scritto da altri.\n",
"\n",
"Permettono la riusabilità del codice, permettono di fare cose complesse in poco tempo, col codice scritto da altri."
"```python\n",
"### DEFINIZIONE\n",
"def nome_della_funzione:\n",
" una_variabile = \"un'istruzione\"\n",
" altra_variabile = \"un'altra istruzione\"\n",
" una_terza_istruzione()\n",
" # e così via....\n",
"\n",
"### CHIAMATA\n",
"nome_della_funzione()\n",
"```"
]
},
{
......@@ -560,7 +646,7 @@
"outputs": [],
"source": [
"def say_hello(name):\n",
" print(\"Hello, \" + name + \"!\")\n",
" print(f\"Hello, {name}!\")\n",
" \n",
"say_hello(\"user\")\n",
"say_hello(\"Mario\")\n",
......@@ -589,26 +675,13 @@
"outputs": [],
"source": [
"def hello(name=\"user\"):\n",
" print(\"Hello, \" + name)\n",
" print(f\"Hello, {name}\")\n",
" \n",
"hello()\n",
"hello(\"user\")\n",
"hello(\"Mario\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f171d145",
"metadata": {},
"outputs": [],
"source": [
"def hello_fun():\n",
" print(\"Hello, world!\")\n",
"hello_var = hello_fun\n",
"hello_var()"
]
},
{
"cell_type": "code",
"execution_count": null,
......@@ -619,10 +692,10 @@
"def tabelline(x = 7):\n",
" i = 1\n",
" while i <= 10:\n",
" print(str(x) + \" x \" + str(i) + \" = \" + str(x*i))\n",
" print(f\"{x} x {i} = {x*i}\")\n",
" i += 1\n",
" \n",
"#tabelline()\n",
"tabelline()\n",
"### Trasformato l'esempio precedente in una funzione"
]
},
......@@ -631,7 +704,7 @@
"id": "9e1c3bae",
"metadata": {},
"source": [
"## Scope, o visibilità del codice\n",
"## [Scope](https://docs.python.org/3/tutorial/classes.html#python-scopes-and-namespaces), o visibilità del codice\n",
"Le variabili/funzioni hanno un loro contesto, per ragioni di praticità.\n",
"- collisioni tra nomi\n",
"- comportamenti inaspettati"
......@@ -648,19 +721,19 @@
"\n",
"def fun1():\n",
" x = \"alfabeto\"\n",
" print(\"valore di x interno a fun1 --> \" + str(x))\n",
" print(f\"valore di x interno a fun1 --> {x}\")\n",
" \n",
"def fun2():\n",
" x = \"abbecedario\"\n",
" print(\"valore di x interno a fun2 --> \" + str(x))\n",
" print(f\"valore di x interno a fun2 --> {x}\")\n",
"\n",
"def fun3():\n",
" print(\"valore di x interno a fun3 --> \" + str(x))\n",
" print(f\"valore di x interno a fun3 --> {x}\")\n",
" \n",
"print(\"valore globale di x --> \" + str(x))\n",
"fun1()\n",
"fun2()\n",
"fun3()"
"fun3()\n",
"print(f\"valore globale di x --> {x}\")"
]
},
{
......@@ -669,7 +742,7 @@
"metadata": {},
"source": [
"# Data Structures\n",
"Dati organizzati in una struttura che ne faciliti la lavorazione."
"Dati organizzati in una [struttura](https://docs.python.org/3/tutorial/datastructures.html) che ne faciliti la lavorazione."
]
},
{
......@@ -680,12 +753,17 @@
"## Sequenze:\n",
"\n",
"### List -- __sequenze mutabili__\n",
"- collezioni **ordinate**, **disomogenee**\n",
"- si definiscono usando *\\[* *\\]*\n",
"\n",
"- collezioni **ordinate**\n",
"- si definiscono usando *&#91;* *&#93;*\n",
"```python\n",
"nome_lista = [var, var, ...]\n",
"```\n",
"## Tuple -- __sequenze immutabili__\n",
"- collezioni **ordinate**, **disomogenee**\n",
"- si definiscono usando *(* *)*"
"- collezioni **ordinate**\n",
"- si definiscono usando *(* *)*\n",
"```python\n",
"nome_tuple = (var, var, ...)\n",
"```"
]
},
{
......@@ -696,40 +774,21 @@
"outputs": [],
"source": [
"## definizione di una funzione\n",
"def dimostrazione(sequenza):\n",
"def stampa_sequenza(sequenza):\n",
" for i in sequenza:\n",
" print(i)\n",
" \n",
" print(\"- partendo da destra: \", end=\"\")\n",
" print(sequenza[-1])\n",
" \n",
" sequenza[0] = \"valore modificato\"\n",
" print(\"- modifica: \" + sequenza[0])\n",
" \n",
"def modifica_sequenza(sequenza):\n",
" sequenza[0] = \"[*!!!*]\"\n",
" stampa_sequenza(sequenza)\n",
" \n",
"## strutture\n",
"lst = [\"cane\",\"gatto\",\"undici\",13]\n",
"tpl = (\"cane\",\"gatto\",\"undici\",13)\n",
"\n",
"## esecuzione della funzione con le strutture come parametri\n",
"dimostrazione(lst)\n",
"#dimostrazione(tpl)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c69bbd3c",
"metadata": {},
"outputs": [],
"source": [
"lst = [\"alpaca\",\"lama\",\"capra\"]\n",
"for i in lst:\n",
" print(i)\n",
"print(\"\\n=================\\n\")\n",
"\n",
"### slicing...\n",
"for i in lst[1:]:\n",
" print(i)"
"## esecuzione delle funzioni con le strutture come parametri\n",
"stampa_sequenza(lst)\n",
"#modifica_sequenza(lst)"
]
},
{
......@@ -743,7 +802,10 @@
"\n",
"- collezioni **mutabili**, **disomogenee**\n",
"- si definisce usando *{* *}*\n",
"\n"
"\n",
"```python\n",
"nome_dizionario = {chiave : valore, chiave : valore, ...}\n",
"```"
]
},
{
......@@ -802,9 +864,7 @@
" print_person(firstname, lastname, age)\n",
"\n",
"def print_person(firstname, lastname, age):\n",
" print(\"My name is {} {}, and I'm {}.\".format(firstname, \\\n",
" lastname, \\\n",
" age))\n",
" print(f\"My name is {firstname} {lastname}, and I'm {age}.\")\n",
"\n",
"init()"
]
......@@ -836,7 +896,7 @@
"id": "28d2f026",
"metadata": {},
"source": [
"# I/O -- ovvero Input/Output\n",
"# [I/O](https://docs.python.org/3/tutorial/inputoutput.html) -- ovvero Input/Output\n",
"Interazione con l'utente, è ciò che rende utile i tuoi programmi.. è molto utile, ma molto pericoloso."
]
},
......@@ -858,8 +918,9 @@
"metadata": {},
"outputs": [],
"source": [
"add1 = int(input(\"Primo addendo\"))\n",
"add2 = int(input(\"Secondo addendo\"))\n",
"print(\"Addizione:\")\n",
"add1 = int(input(\"Primo addendo: \"))\n",
"add2 = int(input(\"Secondo addendo: \"))\n",
"print(\"{} + {} = {}\".format(str(add1), str(add2), str(add1+add2)))"
]
},
......@@ -873,6 +934,21 @@
"\n",
"Questa sezione bonus per chi ha uno spiccato senso della curiosità.. consiglio di esplorare, magari con [questo](https://docs.python.org/3/library/string.html) esempio."
]
},
{
"cell_type": "markdown",
"id": "secondary-recording",
"metadata": {},
"source": [
"<h1 class=\"outro_title\" style=\"text-align:center; font-size: 35px;\">Thank you!</h1>\n",
"\n",
"<img class=\"outro_logo\" style=\"width: 20%;\" src=\"https://static.poul.org/assets/logo/logo_g.svg\" alt=\"POuL logo\">\n",
"\n",
"<a class=\"outro_license\" style=\"display: block; margin: 20px auto;\" rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\"><img alt=\"Creative Commons License\" src=\"https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png\" /></a>\n",
"<p class=\"outro_license_text\" style=\"font-size: 15px; text-align: center;\">Licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International</p>\n",
"\n",
"<p class=\"outro_author\" style=\"text-align: center; font-size: 18px;\">tuo_nome &lt;tua_mail@poul.org&gt;</p>"
]
}
],
"metadata": {
......@@ -891,7 +967,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
"version": "3.8.5"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
......
This diff is collapsed.
......@@ -526,7 +526,7 @@
"cestino = 0\n",
"for i in range(5):\n",
" cestino += 1\n",
" print(\"lo user ha aggiunto una mela, ce ne sono \" + str(cestino))"
" print(f\"lo user ha aggiunto una mela, ce ne sono {cestino}.\"))"
]
},
{
......@@ -755,10 +755,15 @@
"### List -- __sequenze mutabili__\n",
"- collezioni **ordinate**\n",
"- si definiscono usando *&#91;* *&#93;*\n",
"\n",
"```python\n",
"nome_lista = [var, var, ...]\n",
"```\n",
"## Tuple -- __sequenze immutabili__\n",
"- collezioni **ordinate**\n",
"- si definiscono usando *(* *)*"
"- si definiscono usando *(* *)*\n",
"```python\n",
"nome_tuple = (var, var, ...)\n",
"```"
]
},
{
......@@ -797,7 +802,10 @@
"\n",
"- collezioni **mutabili**, **disomogenee**\n",
"- si definisce usando *{* *}*\n",
"\n"
"\n",
"```python\n",
"nome_dizionario = {chiave : valore, chiave : valore, ...}\n",
"```"
]
},
{
......@@ -910,8 +918,9 @@
"metadata": {},