



Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
esonero: programmazione python e logica proposizionale
Tipologia: Esercizi
1 / 5
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




Gioia Annalia Rocco, matricola 169983.
pos = 0 matches = True while pos < len(s1) and matches == True: if alist1[pos] == alist2[pos]: pos = pos + 1 else: matches = False print("Sono due anagrammi?", matches) Spiegazione: Questo programma analizza due parole inserite in input e verifica se sono 2 anagrammi (parole con lo stesso numero di caratteri che hanno le lettere uguali ma in ordine diverso). Per esempio “nave” e “vane” sono due anagrammi, perché sono parole che hanno entrambe 4 lettere e sono costituite dalle stesse lettere, ma inserite in ordine diverso. Analisi riga per riga: s1 = input("Inserisci la prima parola: ") s2 = input("Inserisci la seconda parola: ") La funzione input() consente all’utente di inserire una stringa, e quindi un valore. In questo caso il valore viene passato alle due variabili s1 e s2 tramite l’assegnazione. s1 conterrà quindi la prima parola in formato stringa, ed s2 la seconda parola, sempre in formato stringa. alist1 = list(s1) alist2 = list(s2) La funzione list() prende come argomento un iterabile, ovvero un oggetto (come una stringa) che può essere separato in diversi valori (la stringa è un insieme di caratteri) e ritorna in output una lista, contenente i valori dell’iterabile. In questo caso quindi alist1 e alist2 sono due oggetti di tipo lista, contenenti rispettamente i caratteri di s1 per la lista alist1 e i caratteri di s2 per la lista alist.
while pos < len(s1) and matches == True: Con questa istruzione stiamo definendo come il ciclo deve funzionare e per quanto deve andare avanti. In particolare la condizione pos < len(s1), significa che il while scorrerà tante volte quanto sarà lunga la parola s1. Infatti len(s1) ritorna la lunghezza della parola, e dato che pos sarà incrementata di ciclo in ciclo, il while continuerà a funzionare fino a quando tutti i caratteri di s non saranno stati analizzati. Il while deve controllare anche un’altra condizione, che è concatenata alla prima grazie all’operatore and. L’altra condizione è matches == True, ovvero il ciclo deve continuare ad andare avanti fino a che il valore di matches non cambia, ovvero diventa False. Come già spiegato prima matches controlla che i due caratteri siano uguali o meno, e se anche solo 1 carattere è diverso interrompe appunto il ciclo while. Per la presenza dell’operatore and entrambe le condizione devono essere verificate allo stesso tempo, altrimenti il ciclo while termina. if alist1[pos] == alist2[pos]: pos = pos + 1 L’if controlla la veridicità di una particolare espressione. In questo caso alist1[pos] e alist2[pos] sono i caratteri delle liste s1 e s2 che sono in fase di confronto. Questo perché con l’espressione lista[indice] si va a prendere lo specifico elemento che si trova in quella lista e ha quel particolare indice. In questo caso l’indice è pos e le liste sono alist1 e alist2. Ricordiamo inoltre che le liste alist1 e alist2 sono state ordinate alfabeticamente. Questo significa che se è presente una ‘a’ in entrambe le parole, allora entrambe le ‘a’ saranno confrontate in questa espressione e l’if incrementerà la variabile pos di 1. else: matches = False La clausola else esegue il blocco di codice al suo interno soltanto quando quello che è stato scritto nell’espressione if non si verifica. In questo caso i caratteri confrontati e corrispondenti non erano uguali. Questo significa che le due parole non erano anagrammi e che il ciclo while va fermato. L’unico modo per fermare il while è quindi quello di aggiornare il valore della variabile matches per far si che le due condizioni presenti al primo ciclo non siano più entrambi vere (matches non è più uguale a True). print("Sono due anagrammi?", matches) Infine tramite la funzione print viene stampato il risultato del programma, dove viene mostrato il valore della variabile matches. In particolare se matches = True allora le due parole sono anagrammi, invece se matches = False , non lo sono. Valori delle variabili: Se a inizio programma vengono dati alle variabili s1 e s2 i seguenti valori:
s1 = “nave” s2 = “vane” le variabili successive assumono i seguenti valori: alist1 = [‘a’, ‘e’, ‘n’, ‘v’] alist2 = [‘a’, ‘e’, ‘n’, ‘v’] matches = True In questo caso le variabili alist1 e alist2 hanno gli stessi valori perché sono delle liste ordinate di parole che hanno gli stessi caratteri e lo stesso numero di essi. Nel caso in cui invece: s1 = “cane” s2 = “cera” le variabili successive assumono i seguenti valori: alist1 = [‘a’, ‘c’, ‘e’, ‘n’] alist2 = [‘a’, ‘c’, ‘e’, ‘r’] matches = False In questo caso la variabile matches sarà uguale a False, perché le liste delle due parole ordinate alfabeticamente saranno diverse e i caratteri non corrisponderanno. In particolare sarà la ‘n’ ad essere diversa dalla ‘r’. Questo significa che le due parole non sono anagrammi.