{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Ricapitolazione Lez 2\n", "- definizione di funzione\n", "- tipo booleano, espressioni, operatori booleani, operatori di confronto, funzioni booleane\n", "- definizione di funzione\n", "- costrutto if, if else, if elif else\n", "- controllo dell'input e concetto di sottostringa\n", "- confronto fra interi e reali" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# scrivere funzione valore assoluto" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# scrivere funzione che torna vero o falso se x è divisibile o no per y" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# scrivere una funzione che ti dice se tre numeri interi formano \n", "# un triangolo e che tipo di triangolo\n", "# scrivere una seconda funziona che prende 3 interi in input e poi \n", "# usa la funzione precedente per dirmi se e che triangolo formano" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Lez 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Iterazioni\n", "Ripetizione di istruzioni. Non abbiamo più un programma lineare. Due costrutti iterativi il for (numero di iterazioni noto a priori) ed il while (numero di iterazioni non noto a priori). Posso simulare uno con l'altro ma creati per usare il più addatto a seconda di quello che devo fare. \n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Riassegnazione" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = 5" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = 7" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Aggiornamento" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = 0" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = x + 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### While\n", "while condizione(espressione logica):\n", "\n", " istruzioni eseguite" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import random\n", "x=0 \n", "while x !=2: # condizione iniziale\n", " x=random.randint(1,10) # istruzione che modifica la condizione del while\n", " print(x,end=\"\")" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "L'ordine delle istruzioni è importante!!!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import random\n", "x=0\n", "while x !=2:\n", " print(x,end=\"\") # cambiando l'ordine non mi stampa più l'ultimo numero\n", " x=random.randint(1,10) # \n", " " ] }, { "cell_type": "raw", "metadata": {}, "source": [ "Per contare le iterazioni" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import random\n", "x=0 \n", "i=0\n", "while x !=2:\n", " x=random.randint(1,100) \n", " print(x,' ', end=\"\") \n", " i=i+1\n", "print (\"\\n\",'i =',i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Attenzione ai cicli infiniti. Vedi esempio." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Attenzione all'and" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s=''\n", "False and s[0] " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Controlla solo la prima e da falso ma s[0] non potrebbe essere controlla, infatti se le invertiamo..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s=''\n", "s[0] and False" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Possiamo terminare il while con un input dell'utente" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# programma che fa la somma di un tot di numeri inseriti dall'utente\n", "somma = 0\n", "ninput = int(input('Inserisci un numero (0 per terminare): '))\n", "while ninput != 0:\n", " somma = somma + ninput\n", " print('somma:', somma)\n", " ninput = int(input('Inserisci un numero (0 per terminare): '))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "somma" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s=0 \n", "s=s+4 #zero è l'elemento neutro per l'addizione\n", "s=s+5\n", "s=s+8\n", "s" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Stare attenti a fare condizioni robuste e controllare che ci sia dentro al ciclo l'istruzione che rende prima o poi falsa la condizione." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "OSSERVAZIONE: i booleani non si valutano." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = True" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "if x: # la variabile f è già booleana di per se stessa, non c'è bisogno di confrontarla\n", " print(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### NON scrivere: if x == True" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# programma che fa la somma di nnumeri inseriti dall'utente\n", "# qui contiamo anche quanti numeri sono stati inseriti\n", "somma = 0\n", "nnumeri = 0 # conta le volte che viene eseguito il ciclo\n", "ninput = int(input('Inserisci un numero (0 per terminare): '))\n", "while ninput != 0:\n", " somma = somma + ninput\n", " nnumeri = nnumeri + 1\n", " print('somma:', somma)\n", " ninput = int(input('Inserisci un numero (0 per terminare): '))\n", "print('somma = ', somma)\n", "print('hai sommato ', nnumeri, 'numeri')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Posso attribuire alla variabile di elaborazione un valore fin dall'inizio consistente con la situazione. Si può fare solo se sono sicuro che il primo ingresso è valido" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "i = input('Inserisci un numero (0 per terminare): ')\n", "somma = int(i)\n", "while i != '0':\n", " print('somma:', somma)\n", " i = input('Inserisci un numero (0 per terminare): ')\n", " somma = somma + int(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "OSS: abbiamo invertito l'ordine di print e somma perché la prima somma viene già fatta fuori!!!\n", "Ragionare sulla differenza!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# un ciclo che continua finché l'utente non insrisci la parola si, cioè finché\n", "# la variabile finito non diventa vera\n", "finito = False\n", "while not finito: ### vedete come è chiaro il significato?\n", " print('ciao')\n", " finito =input('Finisco? ').lower()=='si'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "i = True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Per richiamare uno script python usare exec(open('path/nomefile.py').read())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "exec(open('/Users/lauretta/Desktop/Sol_Ex_triangolo.py').read())" ] } ], "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }