Site icon BLOG GioTech

python e le stringhe

&NewLine;<p>Python&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h1 class&equals;"wp-block-heading">Stringhe<&sol;h1>&NewLine;&NewLine;&NewLine;&NewLine;<h1 class&equals;"wp-block-heading">7&period;1 Tipi di dati composti<&sol;h1>&NewLine;&NewLine;&NewLine;&NewLine;<p>Finora abbiamo visto tre tipi di dati&colon;&nbsp&semi;<span class&equals;"code">int<&sol;span>&comma;&nbsp&semi;<span class&equals;"code">float<&sol;span>&nbsp&semi;e&nbsp&semi;<span class&equals;"code">string<&sol;span>&period; Le stringhe sono qualitativamente diverse dagli altri tipi di dati poiché sono composte di unità più piccole&colon; i caratteri&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>I tipi di dati che sono fatti di elementi più piccoli sono detti&nbsp&semi;<b>tipi di dati composti<&sol;b>&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>A seconda di ciò che stiamo facendo possiamo avere la necessità di trattare un tipo composto come fosse una singola entità o possiamo voler agire sulle sue singole parti&period; Questa duplice possibilità è molto utile&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">L&&num;8217&semi;operatore porzione seleziona dei caratteri da una stringa&colon;<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi; Frutto &equals;&nbsp&semi;&&num;8220&semi;banana&&num;8221&semi;<br>&gt&semi;&gt&semi;&gt&semi; Lettera &equals; Frutto&lbrack;1&rsqb;<br>&gt&semi;&gt&semi;&gt&semi;&nbsp&semi;print&nbsp&semi;Lettera<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>L&&num;8217&semi;espressione&nbsp&semi;Frutto&lbrack;1&rsqb;&nbsp&semi;seleziona il carattere numero 1 dalla stringa&nbsp&semi;Frutto&period; La variabile&nbsp&semi;Lettera&nbsp&semi;contiene il risultato&period; Quando stampiamo&nbsp&semi;Lettera&nbsp&semi;abbiamo però una sorpresa&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">a<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>La prima lettera di&nbsp&semi;&&num;8220&semi;banana&&num;8221&semi;&nbsp&semi;logicamente non è&nbsp&semi;&&num;8220&semi;a&&num;8221&semi;&colon; in informatica i conteggi partono spesso da 0 e non da 1 come potrebbe sembrare normale e per accedere al primo carattere di una stringa dobbiamo quindi richiedere il numero 0&comma; per il secondo il numero 1 e così via&period; Sembra un po&&num;8217&semi; illogico ma ci farai facilmente l&&num;8217&semi;abitudine perché questo è il modo normale di contare in molti linguaggi di programmazione&period; Quindi se vogliamo sapere l&&num;8217&semi;iniziale della stringa scriviamo&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi; Lettera &equals; Frutto&lbrack;0&rsqb;<br>&gt&semi;&gt&semi;&gt&semi;&nbsp&semi;print&nbsp&semi;Lettera<br>b<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>il numero tra parentesi quadre è chiamato&nbsp&semi;<strong>indice<&sol;strong>&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>Esso identifica un particolare elemento di un insieme ordinato che nel nostro caso è l&&num;8217&semi;insieme dei caratteri di una stringa&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">L&&num;8217&semi;indice può essere una qualsiasi espressione intera&period;<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">7&period;2 Lunghezza<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p>La funzione&nbsp&semi;len&nbsp&semi;ritorna il numero di caratteri di una stringa&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi; Frutto &equals;&nbsp&semi;&&num;8220&semi;banana&&num;8221&semi;<br>&gt&semi;&gt&semi;&gt&semi; len&lpar;Frutto&rpar;<br>6<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Per ottenere l&&num;8217&semi;ultimo carattere di una stringa potresti essere tentato di fare qualcosa di simile a&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Lunghezza &equals; len&lpar;Frutto&rpar;<br>Ultimo &equals; Frutto&lbrack;Lunghezza&rsqb;&nbsp&semi; &nbsp&semi; &nbsp&semi; &nbsp&semi;&num; ERRORE&excl;&nbsp&semi;<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>ma c&&num;8217&semi;è qualcosa che non va&colon; infatti ottieni un errore&nbsp&semi;IndexError&colon; string index out of range&nbsp&semi;dato che stai facendo riferimento all&&num;8217&semi;indice 6 quando quelli validi vanno da 0 a 5&period; Per ottenere l&&num;8217&semi;ultimo carattere dovrai quindi scrivere&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Lunghezza &equals; len&lpar;Frutto&rpar;<br>Ultimo &equals; Frutto&lbrack;Lunghezza-1&rsqb;<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>In alternativa possiamo usare indici negativi che in casi come questo sono più comodi&comma; contando a partire dalla fine della stringa&colon; l&&num;8217&semi;espressione&nbsp&semi;Frutto&lbrack;-1&rsqb;&nbsp&semi;ritorna l&&num;8217&semi;ultimo carattere della stringa&comma;&nbsp&semi;Frutto&lbrack;-2&rsqb;&nbsp&semi;il penultimo e così via&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">7&period;3 Elaborazione trasversale e cicli&nbsp&semi;for<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p>Molti tipi di elaborazione comportano un&&num;8217&semi;azione su una stringa un carattere per volta&period; Spesso queste elaborazioni iniziano dal primo carattere&comma; selezionano un carattere per volta e continuano fino al completamento della stringa&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>Questo tipo di elaborazione è definita&nbsp&semi;<strong>elaborazione trasversale<&sol;strong>&nbsp&semi;o&nbsp&semi;<strong>attraversamento<&sol;strong>&comma; in quanto attraversa la stringa dall&&num;8217&semi;inizio alla fine&period; Un modo per implementare un&&num;8217&semi;elaborazione trasversale è quello di usare un ciclo&nbsp&semi;while&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Indice &equals; 0<br>while&nbsp&semi;Indice &lt&semi; len&lpar;Frutto&rpar;&colon;<br>Lettera &equals; Frutto&lbrack;Indice&rsqb;<br>print&nbsp&semi;Lettera<br>Indice &equals; Indice &plus; 1<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Questo ciclo attraversa la stringa e ne mostra una lettera alla volta&comma; una per riga&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>La condizione del ciclo è&nbsp&semi;Indice &lt&semi; len&lpar;Frutto&rpar;&nbsp&semi;così che quando&nbsp&semi;Indice&nbsp&semi;è uguale alla lunghezza della stringa la condizione diventa falsa&comma; il corpo del ciclo non è eseguito ed il ciclo termina&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>L&&num;8217&semi;ultimo carattere cui si accede è quello con indice&nbsp&semi;len&lpar;Frutto&rpar;-1&nbsp&semi;che è l&&num;8217&semi;ultimo carattere della stringa&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Esercizio&colon; <&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<blockquote class&equals;"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>scrivi una funzione che prende una stringa come argomento e la stampa un carattere per riga partendo dall&&num;8217&semi;ultimo carattere&period;<&sol;p><&sol;blockquote>&NewLine;&NewLine;&NewLine;&NewLine;<p>Usare un indice per attraversare un insieme di valori è un&&num;8217&semi;operazione così comune che Python fornisce una sintassi ancora più semplice&colon; il ciclo&nbsp&semi;for&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">for&nbsp&semi;Lettera&nbsp&semi;in&nbsp&semi;Frutto&colon;<br>print&nbsp&semi;Lettera<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Ad ogni ciclo&comma;&nbsp&semi;Lettera&nbsp&semi;assume il valore del prossimo carattere della stringa&nbsp&semi;Frutto&comma; così che&nbsp&semi;Frutto&nbsp&semi;viene attraversata completamente finché non rimangono più caratteri da analizzare&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">quindi&colon;<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>L&&num;8217&semi;esempio seguente mostra come usare il concatenamento e un ciclo&nbsp&semi;for&nbsp&semi;per generare una serie alfabetica&comma; e cioè una lista di valori nei quali gli elementi appaiono in ordine alfabetico&period; Per esempio nel libro&nbsp&semi;<em>Make Way for Ducklings<&sol;em>&nbsp&semi;di Robert McCloskey i nomi dei protagonisti sono Jack&comma; Kack&comma; Lack&comma; Mack&comma; Nack&comma; Ouack&comma; Pack e Quack&period; Questo ciclo restituisce i nomi in ordine&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Prefissi &equals;&nbsp&semi;&&num;8220&semi;JKLMNOPQ&&num;8221&semi;<br>Suffisso &equals;&nbsp&semi;&&num;8220&semi;ack&&num;8221&semi;<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">for&nbsp&semi;Lettera&nbsp&semi;in&nbsp&semi;Prefissi&colon;<br>print&nbsp&semi;Lettera &plus; Suffisso<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Il risultato del programma è&colon;<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Jack<br>Kack<br>Lack<br>Mack<br>Nack<br>Oack<br>Pack<br>Qack<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Non è del tutto corretto dato che&nbsp&semi;Ouack&nbsp&semi;e&nbsp&semi;Quack&nbsp&semi;sono scritti in modo errato&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&NewLine;&NewLine;Esercizio&colon; &NewLine;&NewLine;<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<blockquote class&equals;"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>modifica il programma per correggere questo errore&period;<&sol;p><&sol;blockquote>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">7&period;4 Porzioni di stringa<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p>Un segmento di stringa è chiamato&nbsp&semi;<strong>porzione<&sol;strong>&period; La selezione di una porzione è simile alla selezione di un carattere&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi; s &equals;&nbsp&semi;&&num;8220&semi;Pietro&comma; Paolo e Maria&&num;8221&semi;<br>&gt&semi;&gt&semi;&gt&semi;&nbsp&semi;print&nbsp&semi;s&lbrack;0&colon;6&rsqb;<br>Pietro<br>&gt&semi;&gt&semi;&gt&semi;&nbsp&semi;print&nbsp&semi;s&lbrack;8&colon;13&rsqb;<br>Paolo<br>&gt&semi;&gt&semi;&gt&semi;&nbsp&semi;print&nbsp&semi;s&lbrack;16&colon;21&rsqb;<br>Maria<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>L&&num;8217&semi;operatore&nbsp&semi;&lbrack;n&colon;m&rsqb;&nbsp&semi;ritorna la stringa a partire dall&&num;8217&semi; &&num;8220&semi;n-esimo&&num;8221&semi; carattere incluso fino all&&num;8217&semi; &&num;8220&semi;m-esimo&&num;8221&semi; escluso&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>Questo comportamento non è intuitivo&comma; e per comprenderlo è meglio immaginare i puntatori&nbsp&semi;<em>tra<&sol;em>&nbsp&semi;i caratteri&comma; come nel diagramma seguente&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-image"><img src&equals;"https&colon;&sol;&sol;www&period;python&period;it&sol;doc&sol;Howtothink&sol;Howtothink-html-it&sol;illustrations&sol;i&lowbar;banana&period;png" alt&equals;""&sol;><&sol;figure>&NewLine;&NewLine;&NewLine;&NewLine;<p>Se non è specificato il primo indice &lpar;prima dei due punti&nbsp&semi;&colon;&rpar; la porzione parte dall&&num;8217&semi;inizio della stringa&period; Senza il secondo indice la porzione finisce con il termine della stringa&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi; Frutto &equals;&nbsp&semi;&&num;8220&semi;banana&&num;8221&semi;<br>&gt&semi;&gt&semi;&gt&semi; Frutto&lbrack;&colon;3&rsqb;<br>&&num;8216&semi;ban&&num;8217&semi;<br>&gt&semi;&gt&semi;&gt&semi; Frutto&lbrack;3&colon;&rsqb;<br>&&num;8216&semi;ana&&num;8217&semi;<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Secondo te cosa significa&nbsp&semi;Frutto&lbrack;&colon;&rsqb;&quest;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">7&period;5 Confronto di stringhe<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p>Gli operatori di confronto operano anche sulle stringhe&period; Per vedere se due stringhe sono uguali&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">if&nbsp&semi;Parola &equals;&equals;&nbsp&semi;&&num;8220&semi;BANANA&&num;8221&semi;&colon;<br>print&nbsp&semi;&nbsp&semi;&&num;8220&semi;stai parlando di un frutto&excl;&&num;8221&semi;<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Altri operatori di confronto sono utili per mettere le parole in ordine alfabetico&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">if&nbsp&semi;Parola &lt&semi;&nbsp&semi;&&num;8220&semi;BANANA&&num;8221&semi;&colon;<br>print&nbsp&semi;&&num;8220&semi;la tua parola&&num;8221&semi;&nbsp&semi;&plus; Parola &plus;&nbsp&semi;&&num;8220&semi;viene prima di BANANA&period;&&num;8221&semi;<br>elif&nbsp&semi;Parola &gt&semi;&nbsp&semi;&&num;8220&semi;BANANA&&num;8221&semi;&colon;<br>print&nbsp&semi;&&num;8220&semi;la tua parola&&num;8221&semi;&nbsp&semi;&plus; Parola &plus;&nbsp&semi;&&num;8220&semi;viene dopo BANANA&period;&&num;8221&semi;<br>else&colon;<br>print&nbsp&semi;&&num;8220&semi;hai inserito la parola BANANA&&num;8221&semi;<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Devi comunque fare attenzione al fatto che Python non gestisce le parole maiuscole e minuscole come facciamo noi in modo intuitivo&colon; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>in un confronto le lettere maiuscole vengono sempre prima delle minuscole&comma; così che&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&&num;8220&semi;BANANA&&num;8221&semi;&nbsp&semi;&lt&semi;&nbsp&semi;&&num;8220&semi;BAnana&&num;8221&semi;&nbsp&semi;&lt&semi;&nbsp&semi;&&num;8220&semi;Banana&&num;8221&semi;&nbsp&semi;&lt&semi;&nbsp&semi;&&num;8220&semi;bANANA&&num;8221&semi;&nbsp&semi;&lt&semi;&nbsp&semi;&&num;8220&semi;banana&&num;8221&semi;<br>&&num;8220&semi;ZEBRA&&num;8221&semi;&nbsp&semi;&lt&semi;&nbsp&semi;&&num;8220&semi;banana&&num;8221&semi;<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Un modo pratico per aggirare il problema è quello di convertire le stringhe ad un formato standard &lpar;tutto maiuscole o tutto minuscole&rpar; prima di effettuare il confronto&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">7&period;6 Le stringhe sono immutabili<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p>Si può essere tentati di usare l&&num;8217&semi;operatore porzione&nbsp&semi;&lbrack;&rsqb;&nbsp&semi;alla sinistra di un&&num;8217&semi;assegnazione&comma; con l&&num;8217&semi;intenzione di cambiare un carattere di una stringa&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Saluto &equals;&nbsp&semi;&&num;8220&semi;Ciao&excl;&&num;8221&semi;<br>Saluto&lbrack;0&rsqb; &equals;&nbsp&semi;&&num;8216&semi;M&&num;8217&semi;&nbsp&semi; &nbsp&semi; &nbsp&semi; &nbsp&semi; &nbsp&semi; &nbsp&semi;&nbsp&semi;&num; ERRORE&excl;&nbsp&semi;<br>print&nbsp&semi;Saluto<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Invece di ottenere&nbsp&semi;Miao&excl;&nbsp&semi;questo codice stampa il messaggio d&&num;8217&semi;errore&nbsp&semi;TypeError&colon; object doesn&&num;8217&semi;t support item assignment&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>Le stringhe sono infatti&nbsp&semi;<strong>immutabili<&sol;strong>&nbsp&semi;e ciò significa che non puoi cambiare una stringa esistente&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>L&&num;8217&semi;unica cosa che puoi eventualmente fare è creare una nuova stringa come variante di quella originale&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Saluto &equals;&nbsp&semi;&&num;8220&semi;Ciao&excl;&&num;8221&semi;<br>NuovoSaluto &equals;&nbsp&semi;&&num;8216&semi;M&&num;8217&semi;&nbsp&semi;&plus; Saluto&lbrack;1&colon;&rsqb;<br>print&nbsp&semi;NuovoSaluto<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Abbiamo concatenato la nuova prima lettera ad una porzione di&nbsp&semi;Saluto&comma; e questa operazione non ha avuto alcun effetto sulla stringa originale&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">7&period;7 Funzione&nbsp&semi;Trova<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p>Secondo te cosa fa questa funzione&quest;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">def&nbsp&semi;Trova&lpar;Stringa&comma; Carattere&rpar;&colon;<br>Indice &equals; 0<br>while&nbsp&semi;Indice &lt&semi; len&lpar;Stringa&rpar;&colon;<br>if&nbsp&semi;Stringa&lbrack;Indice&rsqb; &equals;&equals; Carattere&colon;<br>return&nbsp&semi;Indice<br>Indice &equals; Indice &plus; 1<br>return&nbsp&semi;-1<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>In un certo senso questa funzione&nbsp&semi;Trova&nbsp&semi;è l&&num;8217&semi;opposto dell&&num;8217&semi;operatore porzione&nbsp&semi;&lbrack;&rsqb;&colon; invece di prendere un indice e trovare il carattere corrispondente cerca in una stringa la posizione dove appare un carattere e ne restituisce l&&num;8217&semi;indice&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Se il carattere non è presente la funzione restituisce&nbsp&semi;-1&period;<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Questo è il primo esempio di&nbsp&semi;return&nbsp&semi;all&&num;8217&semi;interno di un ciclo&period; Se&nbsp&semi;Stringa&lbrack;Indice&rsqb; &equals;&equals; Carattere&nbsp&semi;il ciclo viene interrotto prematuramente&period; Se il carattere non fa parte della stringa il programma termina normalmente e ritorna&nbsp&semi;-1&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading"> Esercizio&colon; <&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<blockquote class&equals;"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>modifica la funzione&nbsp&semi;Trova&nbsp&semi;per accettare un terzo parametro che rappresenta la posizione dove si deve cominciare a cercare all&&num;8217&semi;interno della stringa&period;<&sol;p><&sol;blockquote>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">7&period;8 Cicli e contatori<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p>Questo programma conta il numero di volte in cui la lettera&nbsp&semi;&&num;8216&semi;a&&num;8217&semi;&nbsp&semi;compare in una stringa&comma; usando un&nbsp&semi;<strong>contatore<&sol;strong>&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Frutto &equals;&nbsp&semi;&&num;8220&semi;banana&&num;8221&semi;<br>Conteggio &equals; 0<br>for&nbsp&semi;Carattere&nbsp&semi;in&nbsp&semi;Frutto&colon;<br>if&nbsp&semi;Carattere &equals;&equals;&nbsp&semi;&&num;8216&semi;a&&num;8217&semi;&colon;<br>Conteggio &equals; Conteggio &plus; 1<br>print&nbsp&semi;Conteggio<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>La variabile&nbsp&semi;Conteggio&nbsp&semi;è inizializzata a 0 e poi incrementata ogni volta che è trovata una&nbsp&semi;&&num;8216&semi;a&&num;8217&semi;&nbsp&semi;&lpar;<strong>incrementare<&sol;strong>&nbsp&semi;significa aumentare di 1&semi; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>è l&&num;8217&semi;opposto di&nbsp&semi;<strong>decrementare<&sol;strong>&rpar;&period; Al termine del ciclo&nbsp&semi;Conteggio&nbsp&semi;contiene il risultato e cioè il numero totale di lettere&nbsp&semi;a&nbsp&semi;nella stringa&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Esercizio&colon;<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<blockquote class&equals;"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>incapsula questo codice in una funzione&nbsp&semi;ContaLettera&nbsp&semi;e fai in modo che questa accetti sia la stringa che la lettera da cercare come parametri&period;<&sol;p><&sol;blockquote>&NewLine;&NewLine;&NewLine;&NewLine;<blockquote class&equals;"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>riscrivi la funzione&nbsp&semi;ContaLettera&nbsp&semi;in modo che invece di elaborare completamente la stringa faccia uso della versione a tre parametri di&nbsp&semi;Trova&period;<&sol;p><&sol;blockquote>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">7&period;9 Il modulo&nbsp&semi;string<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p>Il modulo&nbsp&semi;string&nbsp&semi;contiene funzioni molto utili per la manipolazione delle stringhe&period; Come abbiamo già visto prima di poter usare un modulo lo dobbiamo importare&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi;&nbsp&semi;import&nbsp&semi;string<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>&bsol;fussy Il modulo&nbsp&semi;string&nbsp&semi;include una funzione chiamata&nbsp&semi;find&nbsp&semi;che fa le stesse cose della nostra funzione&nbsp&semi;Trova&period; Per poterla usare&comma; dopo avere importato il modulo&comma; dobbiamo chiamarla usando la notazione punto<br>&lpar;<em>NomeDelModulo&period;NomeDellaFunzione<&sol;em>&rpar;&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi; Frutto &equals;&nbsp&semi;&&num;8220&semi;banana&&num;8221&semi;<br>&gt&semi;&gt&semi;&gt&semi; Posizione &equals; string&period;find&lpar;Frutto&comma;&nbsp&semi;&&num;8220&semi;a&&num;8221&semi;&rpar;<br>&gt&semi;&gt&semi;&gt&semi;&nbsp&semi;print&nbsp&semi;Posizione<br>1<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>In realtà&nbsp&semi;string&period;find&nbsp&semi;è più generale della nostra&nbsp&semi;Trova&period; In primo luogo possiamo usarla per cercare stringhe e non soltanto caratteri&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi; string&period;find&lpar;&&num;8220&semi;banana&&num;8221&semi;&comma;&nbsp&semi;&&num;8220&semi;na&&num;8221&semi;&rpar;<br>2<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Inoltre ammette un argomento ulteriore per specificare da dove vogliamo iniziare la nostra ricerca&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi; string&period;find&lpar;&&num;8220&semi;banana&&num;8221&semi;&comma;&nbsp&semi;&&num;8220&semi;na&&num;8221&semi;&comma; 3&rpar;<br>4<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Ancora&comma; può prendere due argomenti che specificano il dominio di ricerca&comma; cioè la porzione di stringa originale dove vogliamo effettuare la ricerca&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi; string&period;find&lpar;&&num;8220&semi;bob&&num;8221&semi;&comma;&nbsp&semi;&&num;8220&semi;b&&num;8221&semi;&comma; 1&comma; 2&rpar;<br>-1<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>In questo esempio la ricerca fallisce perché la lettera&nbsp&semi;&&num;8216&semi;b&&num;8217&semi;&nbsp&semi;non appare nel dominio definito dagli indici&nbsp&semi;1&nbsp&semi;e&nbsp&semi;2&nbsp&semi;&lpar;da&nbsp&semi;1&nbsp&semi;incluso fino a&nbsp&semi;2&nbsp&semi;escluso&rpar;&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">7&period;10 Classificazione dei caratteri<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p>È spesso necessario esaminare un carattere e controllare se questo è maiuscolo&comma; minuscolo&comma; o se si tratta di una cifra o di uno spazio bianco&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>A questo scopo il modulo&nbsp&semi;string&nbsp&semi;fornisce parecchie costanti molto utili&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>La stringa&nbsp&semi;string&period;lowercase&nbsp&semi;contiene tutti i caratteri che il sistema considera minuscoli&period; Allo stesso modo&nbsp&semi;string&period;uppercase&nbsp&semi;contiene tutti i caratteri maiuscoli&period; Guarda cosa contengono queste stringhe&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi;&nbsp&semi;print&nbsp&semi;string&period;lowercase<br>&gt&semi;&gt&semi;&gt&semi;&nbsp&semi;print&nbsp&semi;string&period;uppercase<br>&gt&semi;&gt&semi;&gt&semi;&nbsp&semi;print&nbsp&semi;string&period;digits<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>Possiamo usare queste costanti e la funzione&nbsp&semi;find&nbsp&semi;per classificare i caratteri&period; Per esempio se&nbsp&semi;find&lpar;string&period;lowercase&comma; Carattere&rpar;&nbsp&semi;ritorna un valore diverso da&nbsp&semi;-1&nbsp&semi;allora&nbsp&semi;Carattere&nbsp&semi;è minuscolo &lpar;un valore diverso da -1 indicherebbe infatti la posizione del carattere trovato&rpar;&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">def&nbsp&semi;Minuscolo&lpar;Carattere&rpar;&colon;<br>return&nbsp&semi;string&period;find&lpar;string&period;lowercase&comma; Carattere&rpar; &excl;&equals; -1<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>In alternativa possiamo usare l&&num;8217&semi;operatore&nbsp&semi;in&nbsp&semi;che determina se un carattere compare in una stringa&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">def&nbsp&semi;Minuscolo&lpar;Carattere&rpar;&colon;<br>return&nbsp&semi;Carattere&nbsp&semi;in&nbsp&semi;string&period;lowercase<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>o il consueto operatore di confronto&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>def&nbsp&semi;Minuscolo&lpar;Carattere&rpar;&colon;<br>return&nbsp&semi;&&num;8216&semi;a&&num;8217&semi;&nbsp&semi;&lt&semi;&equals; Carattere &lt&semi;&equals;&nbsp&semi;&&num;8216&semi;z&&num;8217&semi;<br><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>Se&nbsp&semi;Carattere&nbsp&semi;è compreso tra&nbsp&semi;&&num;8216&semi;a&&num;8217&semi;&nbsp&semi;e&nbsp&semi;&&num;8216&semi;z&&num;8217&semi;&nbsp&semi;deve per forza trattarsi di una lettera minuscola&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">Esercizio&colon;<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<blockquote class&equals;"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>prova a determinare quale di queste versioni è la più veloce&period; Puoi pensare ad altre ragioni&comma; a parte la velocità&comma; per preferire una versione piuttosto che un&&num;8217&semi;altra&quest;<&sol;p><&sol;blockquote>&NewLine;&NewLine;&NewLine;&NewLine;<p>Un&&num;8217&semi;altra costante definita nel modulo&nbsp&semi;string&nbsp&semi;può sorprenderti quando provi a stamparla&colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h4 class&equals;"wp-block-heading">&gt&semi;&gt&semi;&gt&semi;&nbsp&semi;print&nbsp&semi;string&period;whitespace<br><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p>I caratteri&nbsp&semi;<strong>spazi bianchi<&sol;strong>&nbsp&semi;infatti muovono il cursore senza stampare nulla&colon; sono questi che creano lo spazio bianco tra i caratteri visibili&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>La costante&nbsp&semi;string&period;whitespace&nbsp&semi;contiene tutti gli spazi bianchi inclusi lo spazio&comma; la tabulazione &lpar;&bsol;t&rpar; ed il ritorno a capo &lpar;&bsol;n&rpar;&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>Ci sono molte altre utili funzioni nel modulo&nbsp&semi;string&nbsp&semi;ma questo libro non è inteso per essere un manuale di riferimento come invece lo è la&nbsp&semi;<em>Python Library Reference<&sol;em>&comma; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>disponibile al sito ufficiale del linguaggio Python&nbsp&semi;<a href&equals;"http&colon;&sol;&sol;www&period;python&period;org&sol;">www&period;python&period;org<&sol;a>&period;<&sol;p>&NewLine;

Exit mobile version