# Una stringa è un array di caratteri individuali.
# Per esempio, la stringa "ciao" è in realtà l'array ['c','i','a','o']
# Dichiarariamo una variabile contenente una stringa di testo:
my_original_text = "hello"
# Otteniamo un carattere ad un indice specifico nella stringa:
# (il primo carattere ha indice zero)
# (my_character conterrà il carattere 'e')
my_character = my_original_text[1]
# Appendiamo una stringa ad un altra usando l'operatore +
# (my_text conterrà la stringa "helloworld")
my_text = my_original_text + "world"
# Rimpiazziamo parte del testo nella stringa usando la funzione membro 'replace':
# (my_text conterrà la stringa "hello world")
my_text = my_text.replace("low", "lo w")
# Cerchiamo una sottostringa in una stringa:
# (se esiste, ritorna l'indice di partenza della sottostringa trovata)
# (se non esiste, ritorna -1 per convenzione)
# (in questo caso, my_search_result conterrà '-1')
my_search_result = my_text.find("low")
# Suddividiamo la stringa in un array di stringhe in base ad un carattere separatore:
# (my_array conterrà un array di due stringhe: ["hello", "world"])
my_array = my_text.split(" ")
# Otteniamo il terzo carattere della seconda stringa nell'array di stringhe:
# (whatever conterrà il carattere 'r')
whatever = my_array[1][2]
# Calcoliamo la lunghezza della stringa "hello world":
# (my_length conterrà il valore '11')
my_length = len(my_text)
# Calcoliamo la lunghezza della stringa risultante da un'espressione:
# (my_other_length conterrà il valore '11')
my_other_length = len("abra" + "cadabra")
# Contiamo le occorrenze di una sottostringa in una stringa:
# (how_many_non conterrà il valore '2')
my_other_string = "quod non dedit fortuna non eripit"
how_many_non = my_other_string.count("non")
# L'operatore di slicing estrae una sottostringa da una stringa:
# (formato: [start:end], dove 'start' è l'indice di partenza ed 'end' l'indice finale non-inclusivo)
# (omettere 'start' è equivalente a specificare 0 come indice iniziale)
# (omettere 'end' è equivalente a specificare la lunghezza come indice finale non-inclusivo)
# (indici negativi si riferiscono ad una posizione partendo dalla fine della stringa)
my_last_text = "0123456789"
x = my_last_text[1:4] # << x conterrà la stringa "123"
y = my_last_text[:5] # << y conterrà la stringa "01234"
z = my_last_text[-3:] # << z conterrà la stringa "789"
# Stampiamo tutto a video
# (utilizziamo la funzione 'str' per convertire variabili intere ed array in stringhe di testo)
print "my_original_text contiene: " + my_original_text
print "my_character contiene: " + my_character
print "my_text contiene: " + my_text
print "my_search_result contiene: " + str(my_search_result)
print "my_array contiene: " + str(my_array)
print "whatever contiene: " + whatever
print "my_length contiene: " + str(my_length)
print "my_other_length contiene: " + str(my_other_length)
print "my_other_string contiene: " + str(my_other_string)
print "how_many_non contiene: " + str(how_many_non)
print "my_last_test contiene: " + my_last_text
print "x contiene: " + x
print "y contiene: " + y
print "z contiene: " + z