Stringhe 3 - metodi base

Scarica zip esercizi

Naviga file online

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

Metodo

Risultato

Significato

str.upper()

str

Ritorna la stringa con tutti i caratteri maiuscoli

str.lower()

str

Ritorna la stringa con tutti i caratteri minuscoli

str.capitalize()

str

Ritorna la stringa con il primo carattere maiuscolo

str1.startswith(str2)

bool

Controlla se la stringa inizia con un’altra

str1.endswith(str2)

bool

Controlla se la stringa finisce con un’altra

str1.isalpha(str2)

bool

Controlla se tutti i caratteri sono alfabetici

str1.isdigit(str2)

bool

Controlla se tutti i caratteri sono cifre

str.isupper()

bool

Controlla se tutti i caratteri sono minuscoli

str.islower()

bool

Controlla se tutti i caratteri sono maiuscoli

Gli altri sono descritti alla pagina Metodi di ricerca

ATTENZIONE: Quando i metodi sulle stringhe generano una stringa, questa è SEMPRE NUOVA

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

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
    strings5-chal.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 strings3.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.

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]:
'Sono importante'.upper()
[3]:
'SONO IMPORTANTE'

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]:
Python Tutor visualization

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(chars=None, /) method of builtins.str instance
    Return a copy of the string 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

Mostra soluzione
[12]:

#012345678 x = 'ASCENSORE' # scrivi qui

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

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:

[19]:
"il cane abbaia nella strada".startswith('il cane')
[19]:
True
[20]:
"il cane abbaia nella strada".startswith('abbaia')
[20]:
False
[21]:
"il cane abbaia nella strada".startswith('IL CANE')  # le maiuscole sono diverse dalle minuscole
[21]:
False
[22]:
"IL CANE ABBAIA SULLA STRADA".startswith('IL CANE')  # le maiuscole sono diverse dalle minuscole
[22]:
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
[23]:

x,y,z = 'per Giove', 'per Zeus', 'per' # True #x,y,z = 'per Giove', 'per Zeus', 'da' # False #x,y,z = 'da Giove', 'per Zeus', 'per' # False # scrivi qui

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:

[24]:
"I miei più cari saluti".endswith('cari saluti')
[24]:
True
[25]:
"I miei più cari saluti".endswith('cari')
[25]:
False
[26]:
"I miei più cari saluti".endswith('SALUTI')  # le maiuscole sono diverse dalle minuscole
[26]:
False
[27]:
"I MIEI PIU' CARI SALUTI".endswith('SALUTI')  # le maiuscole sono diverse dalle minuscole
[27]:
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
[28]:

#0123456789 #0123456789 marito, moglie = 'Antonio Snobbonis', 'Carolina Snobbonis' # True #marito, moglie = 'Camillo De Spaparanzi', 'Matilda Degli Agi' # False # scrivi qui

Metodo isalpha

Il metodo isalpha ritorna True se tutti i caratteri nella stringa sono alfabetici:

[29]:
'BarrieraCorallina'.isalpha()
[29]:
True

I numeri non sono considerati alfabetici:

[30]:
'Route 666'.isalpha()
[30]:
False

Nota che le spaziature (i cosiddetti blank) non sono alfabetiche:

[31]:
'Barriera Corallina'.isalpha()
[31]:
False

… nè la punteggiatura:

[32]:
'!'.isalpha()
[32]:
False

… e neanche strani caratteri Unicode:

[33]:
'♥'.isalpha()
[33]:
False
[34]:
''.isalpha()
[34]:
False

Esercizio - Combattiamo gli hacker

Come è noto nei piani bassi dell’Interpol, gli hacker internazionali comunicano usando una lingua ricca di slang chiamata Leet. Tuttavia questa moda si sta diffondendo anche nelle scuole, dove si viene considerati K001 (cool) se si sa comunicare in questa scomoda maniera. La base è cercare di sostituire alle lettere dei numeri durante la scrittura. ( Qui una guida completa )

1 -> i
2 -> z
3 -> e
4 -> h, a, y
etc

Scrivi un codice che controlla che i nome e cognome forniti dagli studenti per evitare che si esprimano in questa maniera, che Dante di sicuro disapprova!

  • stampa True se almeno una delle parole contiene numeri al posto di lettere, altrimenti stampa False

  • Il codice deve essere generico, valido per tutte le parole

  • NON usare l’istruzione if

Mostra soluzione
[35]:

nome, cognome = 'K001', 'H4ck3r' # True #nome, cognome = 'Cool', 'H4ck3r' # True #nome, cognome = 'Romina','Rossi' # False #nome, cognome = 'Peppo', 'Sbirilli' # False #nome, cognome = 'K001', 'Sbirilli' # True # scrivi qui

Metodo isdigit

Il metodo isdigit ritorna True se una stringa è solo composta di cifre:

[36]:
'391'.isdigit()
[36]:
True
[37]:
'400m'.isdigit()
[37]:
False

Le notazioni a virgola mobile e scientifica non sono riconosciute:

[38]:
'3.14'.isdigit()
[38]:
False
[39]:
'4e29'.isdigit()
[39]:
False

Esercizio - Vendere numeri

La multinazionale ToxiCorp è riuscita a mettere le mani su un tesoro di dati personali di ignari utenti, e ti propone di analizzarli per poi vendere informazioni private sul mercato nero al miglior offerente. L’offerta ti pare questionabile, ma pagano bene, perciò accetti.

Occorre capire che dati sono e come catalogarli. Tra i tanti hai trovato una serie di stringhe che sembrano dei numeri di telefono.

Ogni numero dovrebbe essere così composto:

+[prefisso nazionale 39][10 numeri]

Per esempio, questo è un numero valido: +392574856985

Scrivi del codice che stampa True se la stringa è un numero telefonico, False altrimenti

  • Prova le varie combinazioni scommentando telefono

  • Il codice deve essere generico, valido per tutti i numeri

Mostra soluzione
[40]:


telefono = '+392574856985' # True #telefono = '395851256954' # False (manca il '+') #telefono = '++7485125874' # False (manca il prefisso) #telefono = '+39333457Ciao' # False (mi pare ovvio :D ) #telefono = "+3912" # False (troppo corto) #telefono = '+393481489945' # True # scrivi qui

Metodi isupper e islower

Possiamo controllare se un carattere è maiuscolo o minuscolo con i metodi isupper e islower:

[41]:
'q'.isupper()
[41]:
False
[42]:
'Q'.isupper()
[42]:
True
[43]:
'b'.islower()
[43]:
True
[44]:
'B'.islower()
[44]:
False

Funzionano anche con stringhe lunghe, controllando se tutti i caratteri soddisfano il criterio:

[45]:
'GREAT'.isupper()
[45]:
True
[46]:
'NotSoGREAT'.isupper()
[46]:
False

Nota che spaziatura in genere (i blank) e punteggiatura non sono prese in considerazione:

[ ]:
'TROPPO\nGIUSTO !'.isupper()

Potremmo controllare se un carattere è maiuscolo/minuscolo guardando il codice ASCII ma il miglior modo per coprire tutti gli alfabeti è usare i metodi isupper e islower, per esempio funzionano anche con lettere accentate:

[48]:
'à'.isupper()
[48]:
False
[49]:
'Á'.isupper()
[49]:
True

Esercizio - nani e GIGANTI

In un mondo fantasy eccitante e sconosciuto vivono due popolazioni: si tratta dei nani e dei GIGANTI.

  • I nani amano dare nomi ai propri pargoli che contengono solo lettere minuscole.

  • I GIGANTI invece non devono nemmeno pensarci, perchè come scritto sulle tavole di GROCK i nomi dei GIGANTI possono solo avere lettere maiuscole.

Un giorno arrivò una minaccia malvagia da un regno lontano e come in tutti i clichè fu composta una compagnia. Una profezia diceva che solo una compagnia mista di GIGANTI e di nani per un totale di 4 persone avrebbe potuto sconfiggere il malvagio di turno.

  1. Scrivi del codice che controlla se quattro componenti possono comporre una compagnia valida:

  • Stampa True se i quattro nomi sono sia di nani che di GIGANTI, altrimenti se sono di una sola delle due popolazioni stampa False

  • Il codice deve essere generico, valido per tutte le stringhe

  1. Cerca dei nomi di GIGANTI e Nomi di nani e prova a metterli, facendo attenzione a tradurli con la capitalizzazione tutta minuscola / tutta maiuscola corretta, es “Jisog” non è un nome di gigante valido, va tradotto alla scrittura gigantica “JISOG”.

Mostra soluzione
[50]:

avv1, avv2, avv3, avv4 = 'gimli', 'savorlim', 'glazouc', 'hondouni' # False #avv1, avv2, avv3, avv4 = 'OXLOR', 'HIVAR', 'ELOR', 'SUXGROG' # False #avv1, avv2, avv3, avv4 = 'krakrerlig', 'GUCAM', 'SUXGROG', 'kodearen' # True #avv1, avv2, avv3, avv4 = 'yarnithra', 'krakrerlig', 'jandreda', 'TOVIR' # True # scrivi qui

Prosegui

Trovi ulteriori esercizi nel foglio Stringhe 4 - metodi di ricerca

[ ]: