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