Le stringhe nel linguaggio Python
Autore:[Antonio Gallonetto]
La stringa è un tipo di dato immutabile, quindi la possiamo definire una lista immutabile. Nel senso che non possiamo prendere una stringa e cambiare un carattere al suo interno.
Assegnamento di una stringa ad una variabile
nomeVariabile="stringa"
oppure nomeVariabile='stringa'
quindi si possono usare indifferentemente le doppie virgolette oppure le virgolette singole.
Operazioni e metodi sulle stringhe
- Concatenazione
+
- Ripetizione
*
- Slicing
- Lunghezza di una stringa
- Confronto fra stringhe
- Verifica se una sottostringa è contenuta in una stringa
- Formattazione delle stringhe
- capitalize()
- center(lunghezzaStringa,carattereDiRiempimento)
- count(stringa)
- encode() e decode()
- find(stringa)
- index(sottoStringa)
- join(sottoStringa)
- list(stringa)
- lower() e upper()
- replace(stringaDaRimpiazzare, stringaSostitutiva)
- startswith(stringa) e endswith(stringa)
- strip(stringa), lstrip(stringa), rstrip(stringa)
Metodi e operatori non cambiano la stringa
Tutti i metodi e gli operatori non cambiano la stringa ma creano una copia della stringa stessa modificata.
Concatenazione
L’operatore di concatenazione è il +
e la sintassi è la seguente: nuovaStringa=stringa1+stringa2
Ripetizione
L’operatore di ripetizione è *
, la sintassi è la seguente nuovaStringa=stringaA*numRipetizioni
. Quindi la stringaA sarà ripetuta un certo numero di volte indicato dopo il *
.
Slicing
Per slicing si intende l’estrazione di una sottostringa.
Sintassi dello slicing
nuovaStringa=stringa[inizioSottostringa:fineSottostringa]
la fineSottostringa non è contenuta.
Esempio
my_string = input("Inserisci il tuo codice fiscale: ")
if not(len(my_string)==16):
print("Questo codice fiscale è troppo lungo o troppo corto")
else:
consonanti=my_string[0:6]
print(f"{consonanti} queste sono le consonanti del cognome e nome")
Casi particolari di slicing
- non si indica il primo elemento, quindi abbiamo
nuovaStringa=stringa[:fineSottostringa]
in questo caso si intende che inizia dal primo elemento nuovaStringa=stringa[inizioSottostringa:]
la fine della sottostringa è l’ultimo elementonuovaStringa=stringa[valoreNegativo:]
in questo caso si intendono gli ultimi caratteri partendo dalla fine pari al valore indicato.nuovaStringa=stringa[inizioSottostringa:valoreNegativo]
si escludono i caratteri finali pari a quelli del valore indicato.
Lunghezza di una stringa len()
Sintassi: numCaratteri=len(stringa)
ovviamente questo metodo ritorna un numero intero pari al numero di caratteri contenuto nella stringa.
Confronto tra stringhe
Tipi di confronto:
==
in questo caso verifica che due stringhe siano identiche>
,>=
,<
,<=
questo è un confronto sul contenuto ab è minore di cd
Esempio
if ("azd">"zz") :
print("azd>zz")
else :
print("azd<zz")
## ris azd<zz
if ("z">"zd") :
print("z>zd")
else :
print("z<zd")
## ris z<zd
Verifica se una sottostringa è contenuta nella stringa
L’operatore è in
Esempio
stringa="Not Quit"
while stringa.lower() !="quit":
stringa = input("Inserisci una stringa: ")
sottoStringa=input("Inserisci una seconda stringa: ")
if sottoStringa in stringa:
print(f"La sottostringa {sottoStringa} è contenuta in {stringa}")
Formattazione delle stringhe
I principali metodi di formattazione delle stringhe sono due:
- anteporre una f alla stringa e nella stringa il valore di eventuali variabili sono messe tra parentesi graffe
- Sintassi
f " testo {variabile} testo"
- Sintassi
- usare in modo esplicito il metodo format()
- Sintassi
stringa.format()
. All’interno della stringa posso indicare le variabili per posizione oppure per nome e le indico tra parentesi graffe.
- Sintassi
Esempio
stringa = input("Inserisci una stringa: ")
if stringa.isdigit():
print (f"La stringa inserita {stringa} è un numero")
else:
nuovaStringa="La stringa inserita {} non è un numero".format(stringa)
print(nuovaStringa)
Esempio di formattazione con più variabili indicate per posizione
stringa1=input("Inserisci la stringa1: ")
stringa2=input("Inserisci la stringa2: ")
stringa3=input("Inserisci la stringa3: ")
nuovaStringa="stringa3={2} -- stringa2={1} -- stringa1={0}"
nuovaStringa=nuovaStringa.format(stringa1,stringa2,stringa3)
print(nuovaStringa)
## ris stringa3=s3 -- stringa2=s2 -- stringa1=s1
nuovaStringa="stringa3={} -- stringa2={} -- stringa1={}"
nuovaStringa=nuovaStringa.format(stringa3,stringa2,stringa1)
print(nuovaStringa)
## ris stringa3=s3 -- stringa2=s2 -- stringa1=s1
capitalize()
Questo metodo converte il primo carattere di stringa in maiuscolo e ritorna una nuova stringa.
##Sintassi
nuovaStringa=stringaDiPartenza.capitalize()
Esempio
stringa="testo di prova"
nuovaStringa=stringa.capitalize()
print(nuovaStringa) ## ris Testo di prova
center(lunghezzaStringa,carattereDiRiempimento)
Riempie una stringa centrandola e riempendo l’inizio e la fine con il carattereDiRiempimento se non indicato è lo spazio. Il carattereDiRiempimento può essere fatto al massimo da un singolo carattere.
Sintassi
nuovaStringa=stringa.center(lunghezzaStringa, carattereDiRiempimento)
Esempio
stringa="abcdefghilmnopqrstuvz"
nuovaStringa=stringa.center(35,".")
print(nuovaStringa) ##ris .......abcdefghilmnopqrstuvz.......
print(len(nuovaStringa)) ## ris 35
count(sottostringa)
Conta quante volte una sottostringa è ripetuta
Sintassi
numeroRipetizioni=stringa.count(sottostringa)
il numero di ripetizioni di ritorno è un intero. Nel caso che non sia presente la sottostringa ritorna 0.
Esempio
stringa="pinco pallino"
sottostringa="l"
ripetizioni=stringa.count(sottostringa)
print(ripetizioni)
## ris 2
encode() e decode()
Una stringa può essere codificata e decodificata attraverso questi due comandi. I codec disponibili sono moltissimi, alcuni esempi utf-8, utf-16, e quelli su base 64 sono usatissimi.
Sintassi
nuovaStringa=stringaDaCodificare(encoding="codec",errors="gestioneErrore")
Tipi di errore gestiti:
- strict se non riesce a codificare i caratteri genera un errore
- ignore ignora i caratteri non codificabili
- replace rimpiazza i caratteri non codificabili con un punto di domanda ?
- xmlcharrefreplace
- backslashreplace inserisci una sequenza di escape \unnn
- namereplace
Esempio
Notare i punti di domanda nel risultato
stringa="abcdefghilmnopqrstuvz,.@#+*è'ì^ù§!£$%&/()="
nuovaStringa=stringa.encode(encoding='cp1250',errors='replace')
print(nuovaStringa) ##ris b"abcdefghilmnopqrstuvz,.@#+*?'?^?\xa7!?$%&/()="
nuovaStringa=stringa.encode(encoding='utf_16',errors='replace')
print(nuovaStringa)
find(sottostringa)
find ricerca la posizione di una sottostringa all’interno di una stringa, se non presente ritorna -1.
Sintassi
posizioneSottostringa=stringa.find(sottoStringa)
Il valore di posizioneSottostringa è compreso tra 0 e la lunghezza della stringa -1.
Esempio
stringa="Tom e Jerry"
sottoStringa="jerry"
lowStringa=stringa.lower()
posJerry=lowStringa.find(sottoStringa)
print(posJerry)
## ris 6
index(sottoStringa)
Ritorna la posizione della sottoStringa all’interno di una stringa, ovviamente si parte sempre da zero.
Sintassi
posizione=nomeStringa.index(sottoStringa)
Esempio
urlSitoInternet="https://www.velociraptus.com/"
pos=urlSitoInternet.index(":")
print(pos) ##ris 5
join(sottoStringa)
Questo metodo inserisce la stringa tra ogni elemento della sottoStringa e ritorna una nuova stringa.
Sintassi
nuovaStringa=stringaDiPartenza.join(stringa1)
Esempio
my_string="."
sottoStringa="1234567890"
nuovaStringa=my_string.join(sottoStringa)
print(nuovaStringa)
##ris 1.2.3.4.5.6.7.8.9.0
Un uso speciale di join, convertire una lista di caratteri in una stringa
lista=["a","b","c"]
stringaVuota=""
nuovaStringa=stringaVuota.join(lista)
print(nuovaStringa)
list(stringa)
Metodo che converte una stringa in una lista
Sintassi
nomeLista=list(stringa)
Esempio
stringa="www.velociraptus.com"
listaCaratteri=list(stringa)
print(listaCaratteri)
##ris ['w', 'w', 'w', '.', 'v', 'e', 'l', 'o', 'c', 'i', 'r', 'a', 'p', 't', 'u', 's', '.', 'c', 'o', 'm']
lower() e upper()
lower() converte e restituisce una stringa in minuscolo e upper() in maiuscolo
Sintassi
nuovaStringa=stringa.lower()
e nuovaSTringa=stringa.upper()
replace(stringaDaRimpiazzare, stringaSostitutiva)
Sostituisce una sottostringa con un altra e restituisce la nuova stringa
Sintassi
nuovaStringa=stringa.replace(stringaDaRimpiazzare, stringaSostitutiva)
startswith(stringa) endswith(stringa)
Controlla se la stringa inizia con una certa sottostringa oppure finisce con una determinata serie di caratteri. Il valore di ritorno è un booleano
Sintassi
boolDiRitorno=stringa.startswidth(sottostringa)
oppure boolDiRitorno=stringa.endsswidth(sottostringa)
Esempio
my_string = input("Inserisci l'URL da controllare: ")
test_url=my_string.lower()
if len(test_url)>0 and test_url.startswith("https://www."):
print(f"Posso testare la stringa -- {my_string} --")
else:
print("Non posso testare l'URL")
strip(sottoStringa), lstrip(sottoStringa), rstrip(sottoStringa)
- strip(sottoStringa) rimuove la sottoStringa sia all’inizio che alla fine della stringa
- lstrip(sottoStringa) rimuove la sottoStringa all’inizio della stringa
- rstrip(sottoStringa) rimuove la sottostringa alla fine della stringa
Sintassi
nuovaStringa=nomeStringa.strip(sotyoStringaDaRImuovere)
oppure nuovaStringa=nomeStringa.lstrip(sotyoStringaDaRImuovere)
oppure nuovaStringa=nomeStringa.rstrip(sotyoStringaDaRImuovere)
Esempio
urlSitoInternet=" https://www.velociraptus.com/ "
nuovaUrl=urlSitoInternet.strip(" ")
nuovaUrl=nuovaUrl.lstrip("https://")
nuovaUrl=nuovaUrl.rstrip("/")
print(nuovaUrl) ##ris www.velociraptus.com
Verifiche sui tipi di carattere contenuti in una stringa
- isalpha() oppure isalnum()
- isdecimal()
- isdigit()
- isnumeric()
- islower()
- isspace()
- istitle()
- isupper()
- max() e min()
isalpha() oppure isalnum()
Controlla che i caratteri contenuti siano tutti alfanumerici
Sintassi
valoreBooleano=stringa.isalpha()
Esempio
stringa="abcdefghilmnopqrstuvz"
if stringa.isalpha():
print(f"{stringa} sono tutti caratteri alfanumerici")
isdecimal()
Controlla se la stringa contiene cifre decimali
Sintassi
valoreRestituitoBooleano=nomeStringa.isdecimal()
Esempio
stringa="11\u00b2"
if stringa.isdecimal():
print("stringa composta da valori decimali")
else:
print("stringa non composta da valori decimali")
if stringa.isdigit():
print("stringa composta da numeri e simboli matematici")
else:
print("stringa non composta da numeri e simboli matematici")
isdigit()
Controlla se il contenuto della stringa è un numero e può contenere simboli matematici come pedici e apici esempio elevazione a potenza.
Sintassi
valoreBooleano=stringa.isdigit()
isnumeric()
Controlla se la stringa contiene numeri, nel caso nel quale contenga lettere oppure punti virgole restituisce false.
Sintassi
valoreBooleano=stringa.isnumeric()
Esempio
numeroFrazionario="10.35"
if numeroFrazionario.isnumeric():
print(f"{numeroFrazionario} è un numero per isnumeric ")
else:
print(f"{numeroFrazionario} non è un numero per isnumeric")
islower()
Controlla se i caratteri all’interno sono tutti minuscoli
Sintassi
valoreBooleano=stringa.islower()
isspace()
Controlla se la stringa è composta soltanto da spazi
Sintassi
valoreBooleano=nomeStringa.isspace()
istitle()
Controlla se la stringa inizia con una lettera maiuscola
Esempio
stringa="Star Wars"
if not(stringa.isspace()):
if stringa.istitle:
print(f"{stringa} è un titolo")
else:
print(f"{stringa} non è un titolo")
else:
print("La stringa è composta soltanto da caratteri")
## ris Star Wars è un titolo
isupper()
Controlla se i caratteri all’interno sono tutti maiuscoli.
Sintassi
valoreBooleano=stringa.isupper()
Esempio
stringa = input("Inserisci una stringa: ")
if stringa.isdigit():
print (f"La stringa inserita {stringa} è un numero")
else:
print(f"La stringa inserita {stringa} non è un numero")
if stringa.islower():
print(f"La stringa {stringa} è formata da tutti caratteri minuscoli")
max(stringa) e min(stringa)
Questi due metodi estraggono il carattere ascii più piccolo e il più grande
Sintassi
carattere=min(stringa)
e carattere=max(stringa)
Esempio
stringa="abcdefghilmnopqrstuvz"
print(min(stringa)) ##ris a
print(max(stringa)) ##ris z