Laboratorio di Python
|
|
|
- Franco Fabiani
- 8 anni fa
- Просмотров:
Транскрипт
1 Problem solving, Ricorsione, 14 marzo 2014
2 Sommario Sintassi ed Esempi
3 Esercizi Lunedì il numero di studenti che avevano consegnato gli esercizi era 13. Martedì il numero di esercizi ricevuti, compresi i 13 di lunedì, non arrivava a 20. Da mercoledì alle 16:40 a giovedì alle 22 ho ricevuto più di 40 consegne. Il corso viene seguito da più di 100 studenti.
4 Errore di semantica print("esercizio 6. La funzione richiesta: cambialettera()") def cambialettera(): s=input('inserire la parola ') x=input('inserire il carattere che si vuole cambiare ') y=input('inserire il carattere con cui si vuole sostituire...') A='' for C in s: if C==x: A=A+y else: A=A+C print('la parola', s,' e' stata sostituita con la parola',a) Cosa diceva il testo dell esercizio? Cosa non rispecchia le richieste?
5 Errore Runtime Esercizio def div(x,y): #controlla se x divide y if y%x==0: return True elif y%x>0: return False div(0,3)? altri problemi?
6 Errore di? Esercizio def esercizio6_sostituisci(s,a,b): x='' for i in range(len(s)): if s[i]!=a: x=x+s[i] else: x=x+b print(x)
7 Problem solving Definizione informale È una attività del pensiero che si mette in atto per raggiungere un determinato risultato. Può essere svolta in maniera intuitiva o metodologica. Fasi del metodo intuitivo: Individuazione del problema Suddivisione in sotto-problemi Formulazione e verifica dell ipotesi Valutazione delle soluzioni Implementazione della soluzione migliore Verifica dei risultati
8 Problem solving e produzione del Software Produzione del Software Individuazione e suddivisione del problema Analisi Verifica e valutazione delle soluzioni Progettazione Implementazione della soluzione Implementazione Verifica dei risultati Debugging Tabella: Problem solving vs produzione del Software
9 Strumenti per la suddivisione in sotto-problemi Analizzando il problema ci si può accorgere che questo sia suddivisibile in problemi più semplici Ogni paradigma di programmazione prevede diverse tecniche per raggiungere questo obiettivo: Il paradigma di programmazione imperativo suddivide il programma in funzioni raggruppate in moduli Il paradigma ad oggetti progetta classi che sono raggruppate in package
10 Esercizio Definire una funzione che presi come parametri (a,b,c) restituisca gli intervalli di valori in cui risulta essere verificata la disequazione ax 2 + bx + c > 0. Come possiamo risolvere questo problema? Può essere suddiviso in sotto problemi? Possiamo utilizzare riusare del codice?
11 Disequazione import equazione_sec_grado def disequazione(a,b,c): x1,x2=equazione_sec_grado.equazione_sec_grado(a,b,c) if x1 is not None and x2 is not None: if a>0: print ("x<", x1, "and x>", x2) else: print (x1,"<x<",x2) elif x1!= "l'equazione e' impossibile" and x1!="l'equazione e' indeterminata" and x2 is None: if b>=0: print ("x>",x1) else: print ("x<", x1) elif x1== "l'equazione e' indeterminata" and x2 is None: print("mai") elif x1=="l'equazione e' impossibile" and x2 is None: if a>0: print ("sempre") else: print ("mai")
12 Ricorsione e la scomposizione in sotto-problemi Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa Operativamente, risolvere un problema con un approccio ricorsivo comporta: l identificazione di un caso base (n = n 0 ) in cui la soluzione sia nota esprimere la soluzione al caso generico n con (n n 0 ) mediante la soluzione allo stesso problema basandosi su uno o più casi precedenti (n 1, n 2, ). La ricorsione è basata sul principio di induzione dei numeri Naturali.
13 Principio di induzione e ricorsione Una successione di proposizioni logiche (P n ) n N è una successione di affermazioni con identico predicato P riferito ad espressioni dipendenti da un numero naturale n. Principio di induzione Data P n una successione di proposizioni logiche tale che: Sia P n0 è una proprietà vera per n 0 N (caso base) e P nk è vera per n k n 0 implica che P nk+1 è vera (passo induttivo) Possiamo dire che: P(n) è vera per ogni n n 0 È il principio su cui si basa la ricorsione
14 Come definire una funzione ricorsiva Quindi per definire una funzione ricorsiva bisogna: individuare il caso base di cui si ha una soluzione cogliere il passo induttivo, esprimendo la stessa funzione per un generico n rispetto a uno o più soluzioni precedenti Utilizzando la ricorsione si può testare la nostra funzione usando la dimostrazione per induzione
15 Esempio funzione ricorsiva def palin(s): x=len(s) if x==0 or x==1: return 'palindroma' if s[0]==s[x-1]: return palin(s[1:x-1]) else: return 'non palindroma'
16 Esempio Alice distribuisce i suoi dadi colorati (r) in un numero n di scatole. Alice li distribuisce in modo tale che in ogni scatola ci sia un diverso numero di dadi colorati, e ne sia presente almeno uno in ogni scatola. Qual è il numero minimo di dadi colorati posseduti da Alice? Individuiamo le possibili soluzioni a questo problema.
17 Soluzioni 1 Metodo iterativo 2 Metodo ricorsivo 3 Applicazione di una formula
18 Soluzioni 1 Possiamo mettere tutte le scatole in fila e poi inseriamo un dato in ogni scatola, finite le scatole riparto con la stessa operazione partendo dalla seconda scatola e così fino all ultima. 2 Se ho una scatola allora il numero di dati sarà 1. Se ho un numero n di scatole allora il mio numero totale di dadi sarà il mio numero n sommato al numero di dati che avrei avuto con n 1 scatole. 3 Ci potremmo accorgere che questo non vuol dire altro che applicare la formula della somma dei primi n numeri naturali, e quindi basterà restituire il risultato di questa formula n (n + 1)/2
19 I dadi di alice def dadi_alice(n): if n<=0: return ('errore') else: s=0 dadi_in_scatola=range(1,n+1) for i in dadi_in_scatola: s=s+i return s def dadi_alice_ric(n): if n<=0: return('errore') if n==1: return 1 else: return(n+dadi_alice_ric(n-1)) def dadi_alice_formula(n): if n<=0: return ('errore') else: return(n*(n+1)//2)
20 Testiamo le soluzioni Proviamo le nostre funzioni con diversi dati alice(3), alice(10), alice (100) vediamo qualche differenza percettibile nell esecuzione dei nostri programmi?
21 Esempio di Ricorsione Data la serie di Fibonacci così definita: F 0 = 1 F 1 = 1 F n = F n 1 + F n 2 Scrivere una funzione che prenda come parametro n, dove tale parametro rappresenta l ennesimo valore nella funzione di fibonacci (F n ).
22 Outline Sintassi ed Esempi Sintassi ed Esempi
23 Iterazione Sintassi Sintassi ed Esempi while <condizione>: <istruzioni_while> while: indica l operatore di iterazione condizionata. condizione: è l espressione booleana che viene controllata la prima volta che si incontra l istruzione while e ogni volta che si conclude la sequenza di <istruzioni_while> istruzioni_while: sono l insieme di istruzioni che vengono eseguite se e soltanto se risulta True la condizione Attenzione: Se si usa l iterazione condizionata bisogna verificare che l espressione presente nella condizione venga modificata all interno del blocco <istruzioni_while>
24 Iterazione esempio Sintassi ed Esempi def menu(): print('seleziona 1 per calcolare la somma dei primi n numeri') print('seleziona 2 per calcolare le soluzioni della disequazione') print('seleziona 3 per calcolare l''equazione di secondo grado') print('seleziona qualsiasi altro carattere o numero per uscire') x= int(input('digita la tua scelta')) while 1<=x<=3: if x==1: a=somma_nat_input() print(somma_nat(a)) x= int(input('digita la tua scelta')) elif x==2: a,b,c=diseq_sec_grad_input() print(diseq_sec_grado(a,b,c)) x= int(input('digita la tua scelta')) elif x==3: a,b,c=equazione_sec_grad_input() print(equazione_sec_grad(a,b,c)) x= int(input('digita la tua scelta')) else: break
25 Break Sintassi ed Esempi break: si trova annidato in un ciclo (for while). Interrompe l esecuzione del ciclo
26 Esempi Sintassi ed Esempi Scrivere una funzione che dato un numero mi restituisca tutti i suoi divisori. Utilizzare il ciclo for e while
27 Soluzione Divisori for Sintassi ed Esempi def divisori(x): for i in range(1,x+1): if x%i==0: print(i) var: in questo esempio è chiamata i. Per ogni i appartenente alla tupla si esegue l istruzione condizione: < if x%i==0: print(i)> sequenza: è creata dalla funzione range(x+1) che crea un tipo range. Quindi si eseguono le iterazioni per i {1,, x}. istruzioni_for: se il modulo della divisione tra x e i è 0 allora significa che i divide x e quindi lo stampo col comando print(). (perché non usiamo return?)
28 Soluzione Divisori while Sintassi ed Esempi def divisori(x): i=1 while i<=x : if x%i==0: print(i) i+=1 i viene inizializzata si implementa il ciclo col controllo su i e x si verifica la condizione di divisore si incrementa i
29 While e for a confronto Sintassi ed Esempi (a) (b) Figura: (a) Diagramma di flusso While. (b) Diagramma di flusso For.
30 Confronto Sintassi ed Esempi Il while e il for sono equivalenti?
31 Esercizi a casa Sintassi ed Esempi Scrivere una funzione che presi due numeri come parametri della funzione mi stampi il MCD tra i due numeri. Usare ciclo for e while Scrivere una funzione che preso un numero come parametro restituisca True se è primo, e False altrimenti. Usare ciclo for e while Scrivere una funzione che preso un numero come parametro mi stampi tutti i numeri primi che lo dividano. Usare ciclo for e while Scrivere una funzione che prese in input due stringhe le stampi ordinate in ordine alfabetico.
32 Esercizi a casa Sintassi ed Esempi Scrivere un unico programma, che attraverso un menù di selezione restituisca i risultati delle funzioni che seguono, senza uscire dal programma se non selezionando il numero 4. la somma dei primi n numeri pari, dove n è richiesto in input (soluzione iterativa con for) la somma dei primi n numeri dispari, dove n è richiesto in input (soluzione iterativa con while) la serie geometrica di n numeri, dove n è richiesto in input (soluzione ricorsiva) Inviate gli esercizi svolti a: [email protected]
33 Cosa abbiamo fatto? Sintassi ed Esempi Sintassi ed Esempi
Laboratorio di Python
Problem solving, Ricorsione, Università di Bologna 13 e 15 marzo 2013 Sommario 1 2 3 4 Errore di semantica Esercizio def vocali(s): voc='' for c in s: if c in 'aeiou': voc=voc+c return voc Cerchiamo di
Laboratorio di Python
19 marzo 2015 Sommario 1 2 3 4 Esercizi Scrivere e documentare le funzioni che risolvano i seguenti problemi: 1 Definire una funzione che presa una sequenza come parametro restituisca il valore della media
Laboratorio di Python
Iterazione determinata, 12 marzo 2015 Sommario 1 2 3 Sintassi ed Esempi 4 Input da tastiera Sintassi = raw_input('stringa descrittiva') #versione 2.* = input('stringa descrittiva') #versione
Laboratorio di Python
Istruzione di condizione, Input da tastiera, Università di Bologna 6 e 8 marzo 2013 Sommario 1 Tipi di errore e Debugging 2 3 4 Outline Tipi di errore e Debugging 1 Tipi di errore e Debugging 2 3 4 Esercizio
Laboratorio di Python
, Input da tastiera, Iterazione incondizionata 7 marzo 2014 Sommario 1 2 3 Outline 1 2 3 Definizione di funzione import modulo Si importa il modulo specificato def nome_f(par 1,, par n ) : Si definiscono
Laboratorio di Informatica
Laboratorio di Informatica Seconda lezione a Python Dottore Paolo Parisen Toldin - [email protected] Dottoressa Sara Zuppiroli - [email protected] L'importanza di capire Perché non dobbiamo dichiarare
laboratorio di python
laboratorio di python iterazione in python 22 Marzo 2019 1/31 Correzione esercizi per oggi esercizio 1 per casa Scrivere una funzione che restituisce True se una stringa passata come parametro è palindroma
Laboratorio di Python
25 marzo 2015 Sommario 1 2 Esercizi a casa Scrivere un unico programma, che attraverso un menù di selezione restituisca i risultati delle funzioni che seguono, senza uscire dal programma se non selezionando
Laboratorio di Python
Algoritmo, sulle liste Università di Bologna 3 e 5 aprile 2013 Sommario Correzione esercizi 1 Correzione esercizi 2 3 4 Correzione Correzione esercizi scrivere e documentare un programma con un menu dove:
Laboratorio di Python
, Istruzione di condizione 3 marzo 2015 Sommario 1 Outline 1 Scrivere uno script 1 Aprire IDLE di Python. 2 Dal menù del programma aprire un nuovo file. 3 Scrivere la funzione. 4 Salvare ed eseguire il
osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1
Esempio: Leggere due interi positivi e calcolarne il massimo comun divisore. MCD(12, 8) = 4 MCD(12, 6) = 6 MCD(12, 7) = 1 Sfruttando direttamente la definizione di MCD osservazione: 1 MCD(m,n) min(m,n)
Introduzione agli Algoritmi
Introduzione agli Algoritmi Informatica Sara Zuppiroli A.A. 2012-2013 Informatica () Introduzione agli Algoritmi A.A. 2012-2013 1 / 25 Risoluzione dei problemi Dalla descrizione del problema all individuazione
laboratorio di python
laboratorio di python definizioni di booleani, selezione ed uso degli input 13 Marzo 2019 1/32 Correzione esercizi per oggi esercizio 1 per casa Scrivere una funzione che non ha nessun parametro, non restituisce
Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
Laboratorio di Python (con Linux)
Indeterminata,,,... Università di Bologna 14, 16 marzo 2012 Sommario 1 2 3 4 5 Modularità Quando si deve fare un programma complicato è meglio suddividerlo in più parti. Per ridurre la complessità (più
Risoluzione di un problema
Algoritmi Risoluzione di un problema Descrizione di un problema! Individuazione di un ALGORITMO! Metodo risolutivo (progetto) Introduzione 2 Algoritmo Sequenza finita di mosse che risolve in un tempo finito
Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1
Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1 1) Il bus in un computer trasporta a) solo dati b) solo istruzioni c) sia dati sia istruzioni 2) In una sequenza
Laboratorio di Python
Laboratorio di Python Iterazione determinata Lab05 17 Marzo 2017 Variazione data laboratorio! Mercoledì 22 marzo ci sarà laboratorio Mercoledì 3 maggio non ci sarà laboratorio (si terrà lezione regolare)
Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output
Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output F = { (s, s ) } per ogni s esiste una e una sola coppia (s, s ). Esempio: un algoritmo che calcola il quadrato di
Fondamenti di Informatica
Fondamenti di Informatica AlgoBuild: Strutture selettive, iterative ed array Prof. Arcangelo Castiglione A.A. 2016/17 AlgoBuild : Strutture iterative e selettive OUTLINE Struttura selettiva Esempi Struttura
Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto
Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto 14 1. Dato un numero dire se è positivo o negativo 2. e se il numero fosse nullo? 3. Eseguire il prodotto tra
Introduzione alla programmazione
Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste
Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A
Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare
Istruzioni Condizionali
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 6 Istruzioni Condizionali Carla Limongelli Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Istruzioni condizionali
Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.
Cicli e array Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione all ambiente
Indice. Prefazione. 3 Oggetti e Java 53
Prefazione xv 1 Architettura dei calcolatori 1 1.1 Calcolatori e applicazioni 1 1.1.1 Alcuni esempi di applicazioni 3 1.1.2 Applicazioni e interfacce 4 1.2 Architettura dei calcolatori 7 1.2.1 Hardware
Fondamenti di Informatica
Fondamenti di Informatica AlgoBuild: Strutture iterative e selettive Prof. Christian Esposito Corso di Laurea in Ingegneria Meccanica e Gestionale (Classe I) A.A. 2016/17 AlgoBuild: Strutture iterative
Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl
Approfondimento 2.1 Non è questo il testo dove trattare esaurientemente queste tecniche semantiche. Ci accontenteremo di dare un semplice esempio delle tecniche basate sui sistemi di transizione per dare
Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013
Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario La ricorsione Metodi ricorsivi Esercizi proposti 16/01/2013 2 La ricorsione In Java ogni metodo può chiamare anche se stesso,
Rappresentazione degli algoritmi
Rappresentazione degli algoritmi Universitá di Ferrara Ultima Modifica: 21 ottobre 2014 1 1 Diagramma di flusso Utilizzare il diagramma di flusso per rappresentare gli algoritmi che risolvono i seguenti
PROGRAMMAZIONE STRUTTURATA
PROGRAMMAZIONE STRUTTURATA Programmazione strutturata 2 La programmazione strutturata nasce come proposta per regolamentare e standardizzare le metodologie di programmazione (Dijkstra, 1965) Obiettivo:
Rappresentazione degli algoritmi
Rappresentazione degli algoritmi Universitá di Ferrara Ultima Modifica: 21 ottobre 2014 1 1 Diagramma di flusso Utilizzare il diagramma di flusso per rappresentare gli algoritmi che risolvono i seguenti
Laboratorio di Calcolo Numerico
Laboratorio di Calcolo Numerico Lezione 3 Padova, April 4th 2016 F. Piazzon Department of Mathematics. Doctoral School in Mathematical Sciences, Applied Mathematics Area Outline Lab. 3-2 of 16 1 Costrutti
Laboratorio di Python
Laboratorio di Python Alberi binari Lab15 12 Maggio 2017 Outline Correzione esercizi per oggi Alberi binari Teoria Esercizi Esercizi per casa Saluti Esercizio 1 per casa Scrivere una funzione palindroma(s)
I cicli. Iterazioni Calcolo della media Istruzioni break e continue
I cicli Iterazioni Calcolo della media Istruzioni break e continue Ciclo while p Vero A while() ; Falso Esegue una istruzione mentre una condizione è verificata Programmazione
Laboratorio di Programmazione M-Z
Diretta Laboratorio di Programmazione M-Z Docente: Dott.ssa Alessandra Lumini [email protected] Università di Bologna, Sede di Cesena Divide et impera Dividere un problema in sottoproblemi più
Come scrivere bene codice? (1 di 1)
DIAGRMMI DI FLUSSO Come scrivere bene codice? (1 di 1) Prima di iniziare a scrivere un programma: Acquisire profonda comprensione del problema; Progettare un approccio per la risoluzione del problema.
