{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Input tramite mouse con la libreria ezgraphics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vediamo in questa mini-lezione come prendere rilevare i click del mouse tramite la libreria *ezgraphics*. Sarà importante sia per svolgere l'esercizio 1, che per il progetto d'esame." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Per poter rilevare i click del mouse, il tipo `GraphicsWindow` mette a disposizione il metodo `getMouse()`. Quando il metodo viene chiamato, il programma si ferma e aspetta che l'utente clicchi sulla finestra grafica. A quel punto il metodo restituisce il controllo al programma restituendo la coordinata x ed y del punto dove è avvenuto il click.\n", "\n", "Una cosa particolare di `getMouse()` è che il metodo restituisce **due** valori, mentre fino ad ora abbiamo avuto a che fare solo con metodi/funzione che restituiscono un valore (come `abs`) o nessuno (come `print`). Il metodo standard per usare i due valori restituiti da `getMouse`` (o altre funzioni/metodi) di questo tipo, è una istruzione del tipo:\n", "```python\n", "x, y = win.getMouse()\n", "```\n", "Con questa istruzione, i due valori resituiti da `win.getMouse()` vanno a finire nelle varabili `x` ed `y`.\n", "\n", "P.S. Tecnicamente, getMouse non restituisce due valori, ma un unico valore del tiplo `tuple`. Ne parleremo più in dettaglio a tempo debito." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from ezgraphics import GraphicsWindow\n", "win = GraphicsWindow()\n", "x, y = win.getMouse()\n", "win.close() # chiude una finestra da programma\n", "print(f\"Click alle cordinate ({x},{y})\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# L'istruzione match" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Quando si vuole controllare il contenuto di una variabile con molti valori differenti, è possibile utilizzare una istruzione `if` ... `elif` ... `else`. Ad esempio, la seguente instruzione converte un numero da 1 a 4 in un nome di stagione. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "estate\n" ] } ], "source": [ "x = 3\n", "if x == 1:\n", " print(\"inverno\")\n", "elif x == 2:\n", " print(\"primavera\")\n", "elif x == 3:\n", " print(\"estate\")\n", "elif x == 4:\n", " print(\"autunno\")\n", "else:\n", " print(\"stagione non valida\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una alternativa, disponibile da Python 3.10 in poi, è l'istruzione `match`. In realtà l'istruzione `match` è abbastanza complessa, ma il suo utilizzo di base è semplice. L'istruzione:\n", "```python\n", "match exp:\n", " case v1:\n", " blocco1\n", " case v2:\n", " blocco2:\n", " ..\n", " ..\n", " case _:\n", " blocco residuo\n", "```\n", "controlla il risultato dell'espressione `exp` con i valori `v1`, `v2`, etc... ed esegue il blocco corrispondente al valore corretto. La clausola `case _` viene scelta se nessuno dei valori precedenti era quello giusto. Il programma di prima con il `match` diventa:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "estate\n" ] } ], "source": [ "x = 3\n", "match x:\n", " case 1:\n", " print(\"inverno\")\n", " case 2:\n", " print(\"primavera\")\n", " case 3:\n", " print(\"estate\")\n", " case 4:\n", " print(\"inverno\")\n", " case _:\n", " print(\"stagione non valida\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "È possibile mettere più alternative dopo il `case` separandole da `|`, come il seguente esempio di conversione da voti in decimi a giudizi." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "buono\n" ] } ], "source": [ "voto = 7\n", "match voto:\n", " case 9 | 10:\n", " giudizio = \"ottimo\"\n", " case 6 | 7 | 8:\n", " giudizio = \"buono\"\n", " case 4 | 5:\n", " giudizio = \"insufficiente\"\n", " case _:\n", " giudizio = \"scarso\"\n", "print(giudizio)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.11.5" } }, "nbformat": 4, "nbformat_minor": 2 }