{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Programmare in Python\n", "\n", "## Esercizi: Control Flow" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Esempio 1: if-elif-else" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = 37\n", "if a == 0:\n", " print(\"a is zero\")\n", "elif a < 0:\n", " print(\"a is negative\")\n", "else:\n", " print(\"a is positive\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Esempio 2: do-loop" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for i in range(5,10):\n", " print(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Esempio 3: while-loop" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "repeat = 0\n", "while repeat < 5:\n", " print('repeat:',repeat)\n", " repeat+=1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Esercizi" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__1 - Scrivete una funzione che determini se un numero intero è pari o dispari e dia la risposta con un messaggio appropriato.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__2 -Scrivete una funzione per determinare se un numero intero N1 è divisibile per un numero intero N2. La funzione deve ritornare `True/False`.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__3 - Scrivete una funzione che, date le lunghezze di tre segmenti, determini se possono formare un triangolo e restituisca un messaggio opportuno.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__4 - Scrivere una funzione che determini se un carattere A, dato in input, è una vocale.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__5 - Scrivere una funzione che prenda come input un intero e restituisca la somma delle sue cifre.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__6 - Scrivere una funzione che stampi le prime N righe del triangolo di Pascal (coefficienti dello sviluppo binomiale) usando un metodo iterativo.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__7 - Scrivere una funzione che stampi l'N-esima riga del triangolo di Pascal (coefficienti dello sviluppo binomiale) usando l'espressione analitica.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__8 - Scrivete una funzione per calcolare le radici di un'equazione algebrica di secondo grado tenendo conto del segno del determinante.__ " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__9 - Scrivete una funzione che verifichi se un numero intero N è palindromo oppure no (Palindromo vuol dire che è identico a se stesso se letto da destra a sinistra invece che da sinistra a destra).__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__10 - Un filamento di DNA è una stringa formata dall'alfabeto 'A', 'C', 'G', and 'T' (Adenina, Citosina, Guanina, Timina).
\n", "Data una stringa D di DNA corrispondente a un filamento di codice genetico, la sua trascrizione in una stringa R di RNA si ottiene rimpiazzando tutte le istanze di 'T' (Timina) in D con 'U'.
\n", "Costruite una funzione che, data una stringa D di DNA, contenente al più 1000 nucleotidi, restituisca la sua trascrizione in una stringa R di RNA.__
\n", "__Testate la vostra funzione con il filamento CCAGTTCTGATTG.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__11 - In una molecola di DNA, i simboli 'A' e 'T' sono complementari, come lo sono 'C' e 'G'. In altre parole, se in un filamento di DNA alla posizione N c'è 'A' ('C'), nel secondo filamento (complemento) alla posizione N c'e' sempre 'T' ('G') e viceversa.
\n", "Il complemento inverso SC di un filamento di DNA S si ottiene invertendo l'ordine dei simboli e poi sostituendo ciascun simbolo con il suo complemento. Per esempio il complemento inverso di \"GTCA\" è \"TGAC\".
\n", "Costruite una funzione che, data una stringa S di DNA, contenente al più 1000 nucleotidi, restituisca il suo complemento inverso SC?
\n", "Cosa succede se si inverte l'ordine delle operazioni, cioè prima si sostituisce ciascun simbolo con il suo complemento e poi si inverte l'ordine dei simboli?__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__12 - Scrivete una funzione per calcolare il Massimo Comun Divisore fra due interi usando l'algoritmo di Euclide (Cercatelo su Google.).__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__13 - Scrivere una funzione che determini se tutti i numeri di una lista, data in input, sono più grandi di un numero dato R.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__14 - Scrivete una funzione che prende come input un intero e restituisca la somma delle sue cifre dispari.__\n", "\n", "__Test:__\n", "* Input: -131723\n", "* Output: 15 " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__15 - Costruite, usando un ciclo opportuno, una ntupla che contenga il quadrato di tutti i numeri interi a una cifra.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__16 - Scrivete una funzione che prenda come input il seno e il coseno di un angolo alfa e che restituisca il valore dell'angolo.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__17 - Scrivere una funzione che calcoli la somma di due numeri se entrambi sono interi, altrimenti restituisca un appropriato messaggio di errore.(Hint: cercate in rete informazioni sulla funzione intrinseca `isinstance` oppure usate `help(isinstance)`.)__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__18 - Scrivere una funzione che prenda come input una lista di interi e restituisca la lista degli elementi pari, nello stesso ordine in cui compaiono nella lista iniziale.__
\n", "\n", "__Sfida opzionale: Modificate la funzione in modo che se nella lista compare il numero 237, la funzione non restituisca nessuno dei numeri che seguono 237.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__19 - Un anno è bisestile se:__ \n", "\n", "- Non è secolare, cioè non è divisibile per 100, ed è divisibile per 4.\n", "- È secolare ed è divisibile per 400.\n", "\n", "__Scrivete una funzione che prenda come input un intero positivo e ritorni se l'anno corrispondente è bisestile oppure no con un messaggio opportuno__." ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__20 - Trovate tutti i numeri interi positivi e non nulli $a$, $b$ tali che__\n", "$$ \\sqrt{a} + \\sqrt{b} = \\sqrt{2009}.$$" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__21 - Calcolare numericamente la somma:__\n", "$$\\frac{1}{1+\\sqrt{2}} + \\frac{1}{\\sqrt{2}+\\sqrt{3}} + \\frac{1}{\\sqrt{3}+\\sqrt{4}} + \\cdots + \\frac{1}{\\sqrt{2021}+\\sqrt{2022}}.$$\n", "__(La risposta è $\\sqrt{2022} - 1$.)__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__22 - La \"Congettura di Collatz\" è una congettura la cui validità nessuno è finora stato capace di provare o confutare. La si può descrivere così:__\n", "\n", "- Si prenda un numero intero intero positivo N\n", "- Se N è pari si divida N per 2\n", "- Se N è dispari si moltiplichi N per 3 e poi si aggiunga 1.\n", "- Si ripeta la procedura con il nuovo risultato\n", "\n", "__La congettura di Collatz afferma che per qualunque N la sequenza arriva a 1 (Quando la sequenza arriva a 1 segue poi il ciclo 1 -> 4 -> 2 -> 1 e quindi si considera terminata.)__
\n", "__Costruite la funzione Collatz(N) che restituisca in una lista l'intera sequenza di numeri che a partire da N arriva per la prima volta a 1.__\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__23 - La funzione `all_equal` ([source](https://levelup.gitconnected.com/10-python-hacks-in-30s-1b86b0e91ff2)) verifica che tutti gli elementi di `lst` siano uguali. Spiegate l'algoritmo che utilizza.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def all_equal(lst):\n", " \"\"\"\n", " It returns True if all the elements in the list are equal, and False otherwise\n", "\n", " :param lst: The list to check\n", " :return: True or False\n", " \"\"\"\n", " return lst[1:] == lst[:-1]\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "__24 - I numeri di Fibonacci sono una successione di numeri interi definita da__\n", "$$ F(0) = 0,\\, F(1) = 1,\\, F(n) = F(n-1) + F(n-2) \\quad per\\,\\, n\\, >\\, 1.$$\n", "__I primi termini sono quindi 0, 1 , 1, 2, 3, 5, 8, ....__
\n", "__Costruite una funzione `Fib(max)` che restituisca la lista dei numeri di Fibonacci minori o uguali a `max`.__
\n", "__Suggerimento 1: in rete trovate un sacco di esempi che calcolano i numeri di Fibonacci come esempio di funzione recursiva. Non è quello che vi serve.__
\n", "__Suggerimento 2: partite dalla lista [0,1].__
\n", "__Per esempio `Fib(20)` deve restituire [0,1,1,2,3,5,8,13].__\n" ] }, { "cell_type": "markdown", "metadata": {}, "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 }