Stringhe 3 - metodi

Scarica zip esercizi

Naviga file online

Ogni tipo di dati ha associati dei metodi particolari per quel tipo, vediamo quelli associati al tipo stringa (str)

ATTENZIONE: TUTTI i metodi sulle stringhe generano SEMPRE una NUOVA stringa

L’oggetto stringa originale non viene MAI modificato (perchè le stringhe sono immutabili).

Risultato

Metodo

Significato

str

str.upper()

Ritorna la stringa con tutti i caratteri maiuscoli

str

str.lower()

Ritorna la stringa con tutti i caratteri minuscoli

str

str.capitalize()

Ritorna la stringa con il primo carattere maiuscolo

str

str.strip(str)

Rimuove stringhe dai lati

str

str.lstrip(str)

Rimuove stringhe da sinistra

str

str.rstrip(str)

Rimuove stringhe da destra

str

str.replace(str, str)

Sostituisce sottostringhe

bool

str.startswith(str)

Controlla se la stringa inizia con un’altra

bool

str.endswith(str)

Controlla se la stringa finisce con un’altra

int

str.find(str)

Ritorna la prima posizione di una sottostringa a partire da sinistra

int

str.rfind(str)

Ritorna la prima posizione di una sottostringa a partire da destra

int

str.count(str)

Conta il numero di occorrenze di una sottostringa

Che fare

  • scompatta lo zip in una cartella, dovresti ottenere qualcosa del genere:

strings
    strings1.ipynb
    strings1-sol.ipynb
    strings2.ipynb
    strings2-sol.ipynb
    strings3.ipynb
    strings3-sol.ipynb
    strings4.ipynb
    strings4-sol.ipynb
    jupman.py

ATTENZIONE: Per essere visualizzato correttamente, il file del notebook DEVE essere nella cartella szippata.

  • apri il Jupyter Notebook da quella cartella. Due cose dovrebbero aprirsi, prima una console e poi un browser. Il browser dovrebbe mostrare una lista di file: naviga la lista e apri il notebook strings1.ipynb

  • Prosegui leggendo il file degli esercizi, ogni tanto al suo interno troverai delle scritte ESERCIZIO, che ti chiederanno di scrivere dei comandi Python nelle celle successive. Gli esercizi sono graduati per difficoltà, da una stellina ✪ a quattro ✪✪✪✪

Scorciatoie da tastiera:

  • Per eseguire il codice Python dentro una cella di Jupyter, premi Control+Invio

  • Per eseguire il codice Python dentro una cella di Jupyter E selezionare la cella seguente, premi Shift+Invio

  • Per eseguire il codice Python dentro una cella di Jupyter E creare una nuova cella subito dopo, premi Alt+Invio

  • Se per caso il Notebook sembra inchiodato, prova a selezionare Kernel -> Restart

Esempio - upper

Un metodo è una funzione di un oggetto che prende in ingresso l’oggetto a cui è applicata e vi fa dei calcoli.

Il tipo stringa (str) ha metodi predefiniti come str.upper() che possono essere applicati agli oggetti stringa (es: 'ciao' è un oggetto stringa).

Il metodo str.upper() prende la stringa su cui è applicato e crea una NUOVA stringa in cui tutti i caratteri sono in maiuscolo. Per applicare un metodo come str.upper() al particolare oggetto stringa 'ciao', dobbiamo scrivere

'ciao'.upper()

cioè dobbiamo prima scrivere l’oggetto su cui applicare il metodo ('ciao'), poi un punto . , quindi il nome del metodo seguito da parentesi tonde. Le tonde possono contenere ulteriori parametri a seconda del metodo.

Esempi:

[2]:
'ciao'.upper()
[2]:
'CIAO'
[3]:
'prova'.upper()
[3]:
'PROVA'

ATTENZIONE: come TUTTI i metodi delle stringhe, l’oggetto stringa originale su cui è chiamato NON viene modificato.

Esempio:

[4]:
x = "ciao"
y = x.upper()    #  genera una NUOVA stringa e la associa alla variabile y
[5]:
x     # la variabile x è ancora associata alla vecchia stringa
[5]:
'ciao'
[6]:
y     # la variabile y è associata alla nuova stringa
[6]:
'CIAO'

Guarda lo stesso esempio in Python Tutor:

[7]:
x = "ciao"
y = x.upper()
print(x)
print(y)

jupman.pytut()
ciao
CIAO
[7]:

Esercizio - cammina

Scrivere del codice che data una stringa x (per es: x='cammina') stampa due volta la riga

cammina CAMMINA cammina CAMMINA
cammina CAMMINA cammina CAMMINA
  • NON creare nuove variabili

  • il tuo codice deve funzionare con qualsiasi stringa

[8]:
x = 'cammina'

print(x, x.upper(), x, x.upper())
print(x, x.upper(), x, x.upper())
cammina CAMMINA cammina CAMMINA
cammina CAMMINA cammina CAMMINA

Help: Se non sei sicuro riguardo a un metodo (per esempio strip), puoi chiedere aiuto a Python in questo modo:

ATTENZIONE: con help dopo il nome del metodo NON ci sono parentesi !!

[9]:
help("ciao".strip)

Help on built-in function strip:

strip(...) method of builtins.str instance
    S.strip([chars]) -> str

    Return a copy of the string S with leading and trailing
    whitespace removed.
    If chars is given and not None, remove characters in chars instead.

Metodo lower

Ritorna la stringa con tutti i caratteri minuscoli

[10]:
stringa = "ciAo MonDo"

altra_stringa = stringa.lower()

print(altra_stringa)

ciao mondo
[11]:
print(stringa)  # non è cambiata
ciAo MonDo

Esercizio - lowermezzo

Scrivi del codice che data una stringa qualsiasi x di lunghezza dispari, stampa una nuova stringa uguale a x eccetto al carattere in mezzo che deve essere in minuscolo.

  • Il tuo codice deve funzionare con qualunque stringa !

  • SUGGERIMENTO: per calcolare la posizione del carattere in mezzo, usa la divisione intera con l’operatore //

Esempi:

Dato

x = 'ASCENSORE'

deve stampare

ASCEnSORE

Dato

x = 'LAMPADA'

deve stampare

LAMpADA

[12]:
    #012345678
x = 'ASCENSORE'
k = len(x) // 2

print(x[:k] + x[k].lower() + x[k+1:])
ASCEnSORE

Metodo capitalize

Il metodo capitalize() crea una NUOVA stringa avente solo il PRIMO carattere in maiuscolo:

[13]:
"ciao".capitalize()
[13]:
'Ciao'
[14]:
"mondo".capitalize()
[14]:
'Mondo'
[15]:
x = 'capra'
y = 'capra'.capitalize()
[16]:
x      #  x rimane associata al vecchio valore
[16]:
'capra'
[17]:
y      #  y viene associata alla nuova stringa
[17]:
'Capra'

Esercizio - Vostra Eccellenza

Scrivere del codice che date due stringhe qualsiasi x e y restituisce le due stringhe concatenate, separandole con uno spazio ed entrambe tutte in minuscolo eccetto le rispettive prime lettere che devono essere maiuscole.

Esempio 1 - dati:

x = 'vosTRA'
y = 'ecCeLLeNza'

deve stampare:

Vostra Eccellenza

Esempio 2 - dati:

x = 'sUa'
y = 'maEStà'

deve stampare:

Sua Maestà
Mostra soluzione
[18]:
x,y = 'vosTRA', 'ecCeLLeNza'
#x,y = 'sUa', 'maEStà'

# scrivi qui


Vostra Eccellenza

Metodo strip

Elimina spazi bianchi, tab e ritorni a capo dalle estremità della stringa. In genere, questo insieme di caratteri viene definito blank

NOTA: NON rimuove i blank tra le parole della stringa! Solo quelli all’estremità destra e sinistra.

[19]:
x = ' \t\n\n\t ciao mondo \t  '   # alle estremità abbiamo messo spazi bianchi, tab e ritorni a capo
[20]:
x
[20]:
' \t\n\n\t ciao mondo \t  '
[21]:
print(x)


         ciao mondo
[22]:
len(x)   # ricorda che i caratteri speciali come \t e \n occupano 1 carattere
[22]:
20
[23]:
y = x.strip()
[24]:
y
[24]:
'ciao mondo'
[25]:
print(y)
ciao mondo
[26]:
len(y)
[26]:
10
[27]:
x      # IMPORTANTE: x è ancora associato alla vecchia stringa !
[27]:
' \t\n\n\t ciao mondo \t  '

Metodo lstrip

Elimina spazi bianchi, tab e ritorni a capo dall’ estremità sinistra della stringa.

NOTA: NON rimuove i blank tra le parole della stringa! Solo quelli all’estremità sinistra.

[28]:
x = '\n \t la strada \t '
[29]:
x
[29]:
'\n \t la strada \t '
[30]:
len(x)
[30]:
16
[31]:
y = x.lstrip()
[32]:
y
[32]:
'la strada \t '
[33]:
len(y)
[33]:
12
[34]:
x       # IMPORTANTE: x è ancora associato alla vecchia stringa !
[34]:
'\n \t la strada \t '

Metodo rstrip

Elimina spazi bianchi, tab e ritorni a capo dall’ estremità destra della stringa.

NOTA: NON rimuove i blank tra le parole della stringa! Solo quelli all’estremità destra.

[35]:
x = '\n \t il faro \t '
[36]:
x
[36]:
'\n \t il faro \t '
[37]:
len(x)
[37]:
14
[38]:
y = x.rstrip()
[39]:
y
[39]:
'\n \t il faro'
[40]:
len(y)
[40]:
11
[41]:
x       # IMPORTANTE: x è ancora associato alla vecchia stringa !
[41]:
'\n \t il faro \t '

Esercizio - hatespace

Data una stringa x che può contenere dei blank (spazi, caratteri di controllo come \t e \n, …) all’inizio e alla fine, scrivi del codice che stampa la stringa senza i blank e le stringhe INIZIO e FINE alle estremità.

Esempio - dato:

x = ' \t  \n \n hatespace\n   \t \n'

stampa:

INIZIOhatespaceFINE
Mostra soluzione
[42]:
# scrivi qui


INIZIOhatespaceFINE

Metodo replace

str.replace prende due stringhe, e restituisce una NUOVA stringa ricavata sostituendo nella stringa su cui è chiamata tutte le occorrenze del primo parametero stringa con il secondo.

Esempio:

[43]:
"il treno percorre".replace('re', 'ro')
[43]:
'il trono percorro'
[44]:
"alberello bello".replace('llo', 'llini')
[44]:
'alberellini bellini'
[45]:
"parlare e brindare".replace('ARE', 'iamo')  # se cerchiamo maiuscole qua non le troveremo
[45]:
'parlare e brindare'
[46]:
"PARLARE E BRINDARE".replace('ARE', 'IAMO')  # ma qua sì
[46]:
'PARLIAMO E BRINDIAMO'

Come sempre per le stringhe, replace NON modifica la stringa su cui è chiamato:

[47]:
x = "sulla panca"
[48]:
y = x.replace('panca', 'panca la capra campa')
[49]:
y
[49]:
'sulla panca la capra campa'
[50]:
x  # IMPORTANTE: x è ancora associato alla vecchia stringa !
[50]:
'sulla panca'

Esercizio - sostituisci

Data una stringa x, scrivi del codice per stampare una stringa come x ma con tutte le occorrenze di bab sostituite da dada

Esempio - dati:

x = 'kljsfsdbabòkkrbabej'

Dovrebbe stampare:

kljsfsddadaòkkrdadaej
Mostra soluzione
[51]:
# scrivi qui


kljsfsddadaòkkrdadaej

Metodo startswith

str.startswith prende come parametro una stringa e ritorna True se la stringa prima del punto inizia con la stringa passata come parametro. Esempio:

[52]:
"il cane abbaia nella strada".startswith('il cane')
[52]:
True
[53]:
"il cane abbaia nella strada".startswith('abbaia')
[53]:
False
[54]:
"il cane abbaia nella strada".startswith('IL CANE')  # le maiuscole sono diverse dalle minuscole
[54]:
False
[55]:
"IL CANE ABBAIA SULLA STRADA".startswith('IL CANE')  # le maiuscole sono diverse dalle minuscole
[55]:
True

Esercizio - per Giove

Scrivere del codice che date tre stringhe qualsiasi x e y e z, stampa True se entrambe x e y iniziano con la stringa z, altrimenti stampa False

Esempi 1 - Dati:

x = 'per Giove'
y = 'per Zeus'
z = 'per'

deve stampare

True

Esempio 2 - Dati:

x = 'per Giove'
y = 'per Zeus'
z = 'da'

deve stampare

False

Esempio 3 - Dati:

x = 'da Giove'
y = 'per Zeus'
z = 'per'

deve stampare

False
Mostra soluzione
[56]:
x = 'per Giove'
y = 'per Zeus'
z = 'per'

# scrivi qui


True

Metodo endswith

str.endswith prende come parametro una stringa e ritorna True se la stringa prima del punto finisce con la stringa passata come parametro. Esempio:

[57]:
"I miei più cari saluti".endswith('cari saluti')
[57]:
True
[58]:
"I miei più cari saluti".endswith('cari')
[58]:
False
[59]:
"I miei più cari saluti".endswith('SALUTI')  # le maiuscole sono diverse dalle minuscole
[59]:
False
[60]:
"I MIEI PIU' CARI SALUTI".endswith('SALUTI')  # le maiuscole sono diverse dalle minuscole
[60]:
True

Esercizio - Snobbonis

Dati nomi di coppie marito e moglie, scrivi del codice che stampa True se condividono il cognome, False altrimenti.

  • assumi che il cognome sia sempre alla stessa posizione

  • il tuo codice deve funzionare per qualsiasi coppia marito moglie

Mostra soluzione
[61]:
                 #0123456789               #0123456789
marito, moglie = 'Antonio  Snobbonis',     'Carolina Snobbonis'   # True
#marito, moglie = 'Camillo  De Spaparanzi', 'Matilda  Degli Agi'  # False

# scrivi qui


True

Altri esercizi

DOMANDA: Per ciascuna espressione di seguito, cerca di indovinare il risultato.

  1. 'gUrP'.lower() == 'GuRp'.lower()
    
  2. 'NaNo'.lower() != 'nAnO'.upper()
    
  3. 'O' + 'ortaggio'.replace('o','\t \n     ').strip() + 'O'
    
  4. 'DaDo'.replace('D','b') in 'barbados'
    

Prosegui

Trovi ulteriori esercizi nel foglio Stringhe 4

[ ]: