{ "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 }