{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Programmare in Python\n",
"\n",
"Il format generico della definizione di una funzione è:\n",
"\n",
"```python\n",
"def my_function(arg1, arg2, ..., argn):\n",
" \"\"\"Optional docstring.\"\"\"\n",
"\n",
" # Implementation of the function\n",
"\n",
" return result # optional\n",
"\n",
"#this is not part of the function\n",
"some_command\n",
"```\n",
"Le parentesi dopo il nome della funzione sono necessarie. Se una funzione non ha argomenti si scrive:\n",
"```python\n",
"def my_function2():\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Esempio 1\n",
"Una funzione che prende come input due numeri e ne restituisce la somma:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def my_sum(a,b):\n",
" ''' Calcola la somma dei due numeri in input'''\n",
" c = a+b\n",
" return c"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Esempio 2\n",
"Una funzione senza input che restituisce il valore di $\\pi$:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def my_pi():\n",
" '''Restituisce il valore di pi-greco'''\n",
" return 3.141592653589793\n",
"\n",
"my_pi()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Esempio 3\n",
"Una funzione che calcola l'area di un rettangolo."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"L'area del rettangolo di lati 3.0 e 4.0 vale 12.0\n"
]
},
{
"data": {
"text/plain": [
"12.0"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def area_rettangolo(a,b):\n",
" '''\n",
" Calcola l'area di un rettangolo.\n",
" Input: lunghezza di due lati contigui\n",
" '''\n",
" c = a*b\n",
" print(\"L'area del rettangolo di lati\",a,\"e\",b,\"vale\",c)\n",
" return c\n",
"\n",
"area_rettangolo(3.,4.)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Help on function area_rettangolo in module __main__:\n",
"\n",
"area_rettangolo(a, b)\n",
" Calcola l'area di un rettangolo.\n",
" Input: lunghezza di due lati contigui\n",
"\n"
]
}
],
"source": [
"help(area_rettangolo)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Esercizi: Funzioni"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__1 - Scrivete una funzione che prenda come input le coordinate due punti del piano, p1x, p1y, p2x e p2y, e restituisca la loro distanza. Per le coordinate del secondo punto, p2x e p2y, usate parametri opzionali con default 0. In questo modo la funzione può essere usata in modo semplice per calcolare la distanza di un punto dall'origine.__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__2 - Scrivete una funzione che calcoli a) il tempo di viaggio b) i litri di benzina consumati c) il costo della benzina per il viaggio, usando come informazioni: a) la distanza b) il numero di km percorsi per litro c) il costo di un litro di benzina d) la velocità (assunta costante) dell'auto.__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__3 - Costruite una funzione pos(y0,v0,v1) che prenda come input la posizione iniziale y0 di un grave di massa M, la sua velocità inziale v0 e una velocità v1. `pos` deve calcolare la posizione del grave quando la sua velocità è uguale a v1 (g = 9.81 m/s\\*\\*2).__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__4 - Costruite una funzione che prenda come input l'altezza iniziale y0 di un grave di massa M, la sua velocità inziale v0 e il tempo trascorso T, e calcoli la posizione e la velocità del grave in funzione del tempo T (g = 9.81 m/s\\*\\*2). Si confronti con il risultato dell'esercizio precedente.__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__5 - Costruite una funzione che converta una misura di temperatura in gradi Farhenheit nella corrispondente misura in gradi Celsius, sapendo che, a pressione standard, l'acqua congela a 32 F, bolle a 212 F e la relazione fra le due scale è lineare. Scrivete nel file FtoC.txt le temperature Farhenheit fra 0 F e 200 F a intervalli di 10 gradi e le corrispondenti temperature Celsius, con una coppia di valori per riga.__
\n",
"__Esempio:__\n",
"```\n",
" 0.0 -17.7778\n",
" 10.0 -12.2222\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__6 - Costruite una funzione che restituisca la probalità di osservare N eventi in un intervallo di tempo dato usando la distribuzione di Poisson.__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__7 - Costruite una funzione che restituisca la densità di probabilità di ottenere il valore X usando la distribuzione gaussiana.__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__8 - Costruite una funzione che restituisca il periodo di oscillazione di un pendolo di lunghezza L e massa M (g = 9.81 m/s\\*\\*2). Cosa succede se la lunghezza L raddoppia? E se raddoppia la massa M? Sulla Luna la costante di gravitazione vale g = 1.62 m/s\\*\\*2. Qual'è il rapporto fra i periodi di oscillazione dello stesso pendolo sulla superficie della Terra e su quella della Luna?__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__9 - Un grave di massa M viene lanciato verso l'alto con velocità v0, da una altezza y0 rispetto al terreno.\n",
"Costruite una funzione che calcoli in quale istante arriverà a terra (g = 9.81 m/s**2).__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__10 - Costruite una funzione che calcoli il perimetro di un poligono regolare di N lati, inscritto in un circonferenza di raggio 1 metro. Verificate che per grandi valori di N il risultato sia sensato. Scrivete in un file Side2Perimeter.txt i risultati per 3 $\\le$ N $\\le$ 50.__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__11 - Scrivete in un file chiamato \"operazioni.py\":__\n",
"- __Una funzione \"somma\" che restituisca la somma di due numeri dati in input__\n",
"- __Una funzione \"differenza\" che restituisca la differenza fra due numeri dati in input__\n",
"\n",
"__Salvate il file nella directory corrente.__
\n",
"__Importate il modulo \"operazioni\" nella vostra sessione.__
\n",
"__Eseguite le operazioni: (17 + 5.3) e (14.7 - 8.9) usando le funzioni \"somma\" e \"differenza\".__\n",
"\n",
"__Ricordate la differenza fra:__\n",
"\n",
"- `import X`\n",
"\n",
"- `from X import Y`\n",
"\n",
"- `from X import *`"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__12 - Costruite una funzione che restituisca la posizione di un massa in moto nella gravità in funzione del tempo T, le componenti della velocità iniziale v0x, v0y e le componenti della posizione iniziale s0x, s0y.
\n",
"v0x, v0y, s0x, s0y devono essere parametri opzionali, tutti con valore di default zero.__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__13 - Costruite una funzione `isnear` di parametri `x1`, `x2` e `reldif` che restituisca `True` o `False` se la differenza relativa fra i numeri reali `x1` e `x2` è minore o maggiore di `reldif`.
\n",
"`reldif` deve essere un parametro opzionale con valore di default 1.e-10.__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__14 - Costruite una funzione `angolo` dei parametri `c_theta`, `s_theta` e `debug`. \n",
" `angolo` restituisce l'ampiezza dell'angolo di cui `c_theta` e `s_theta` sono il coseno e il seno.
\n",
" `debug` è un parametro opzionale con valore di default `False`. Se in input `debug` viene passato come `True` la funzione deve stampare sullo schermo i valori di `c_theta` e `s_theta`.__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__15 - Supponete di avere un dizionario che rappresenti una lista della spesa, con i prodotti da acquistare come chiavi e la relativa quantità come valori.
\n",
"Un esempio potrebbe essere:\n",
" `lista = {'latte':1, 'pane':1, 'uova':6}`.
\n",
" Costruite una funzione `aggiungi` di parametri `lista`, `prodotto` e `numero` che aggiunga a `lista` un nuovo elemento con chiave `prodotto` e quantità\n",
" `numero`, dove `numero` è un parametro opzionale con valore di default uno.__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"hide_input": false,
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.12"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": true,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 4
}