Stringhe 3 - metodi base
Scarica zip esercizi
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 |
Ritorna la stringa con tutti i caratteri maiuscoli |
|
str |
Ritorna la stringa con tutti i caratteri minuscoli |
|
str |
Ritorna la stringa con il primo carattere maiuscolo |
|
bool |
Controlla se la stringa inizia con un’altra |
|
bool |
Controlla se la stringa finisce con un’altra |
|
bool |
Controlla se tutti i caratteri sono alfabetici |
|
bool |
Controlla se tutti i caratteri sono cifre |
|
bool |
Controlla se tutti i caratteri sono minuscoli |
|
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]:
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
[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à
[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
[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
[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 stampaFalse
Il codice deve essere generico, valido per tutte le parole
NON usare l’istruzione
if
[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
[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.
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 stampaFalse
Il codice deve essere generico, valido per tutte le stringhe
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”.
[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
[ ]: