Ora presenteremo un trucco che può
essere usato con le stringhe:
Ecco l'output:
def shout(string):
for character in string:
print "Gimme a "+character
print "'"+character+"'"
shout("Lose")
def middle(string):
print "The middle character is:",string[len(string)/2]
middle("abcdefg")
middle("The Python Programming Language")
middle("Atlanta")
Questo programma dimostra che le stringhe sono per alcuni
aspetti simili alle liste. La procedura
shout dimostra che
un ciclo for può essere usato con le
stringhe esattamente
nello stesso modo in cui veniva usato con le liste. La
procedura middle mostra come possa
essere utilizzata la
funzione len anche con le stringhe,
così come gli indici e le slice. Molte funzioni delle liste
funzionano con le stringhe.
Gimme a L
'L'
Gimme a o
'o'
Gimme a s
's'
Gimme a e
'e'
The middle character is: d
The middle character is: r
The middle character is: a
La prossima funzione utilizzerà alcune
funzioni specifiche delle stringhe:
Con l'output:
def to_upper(string):
## Converts a string to upper case
upper_case = ""
for character in string:
if 'a' <= character <= 'z':
location = ord(character) - ord('a')
new_ascii = location + ord('A')
character = chr(new_ascii)
upper_case = upper_case + character
return upper_case
print to_upper("This is Text")
Il motivo per cui questo codice funziona è che il computer
"vede" le lettere come numeri da 0 a 255. Python ha una
funzione ord (abbreviazione di
ordinale) che ritorna un
carattere come un numero. Esiste anche una funzione
corrispondente chr che converte
un numero in un carattere.
Imparate queste funzioni, il programma dovrebbe essere
chiaro. Il primo dettaglio è la linea:
if 'a' <= character <= 'z': che
controlla se la lettera è minuscola. La linea:
location = ord(character) - ord('a')
converte i numeri corrispondenti alle lettere nel codice
ASCII in numeri da 0 a 36 quindi la linea
new_ascii = location + ord('A')
converte la lettera minuscola in maiuscola.
THIS IS TEXT
Un'altro esercizio:
Se non l'avete ancora indovinato la funzione
repr converte un intero
in stringa e la funzione int
converte una stringa in intero. La funzione
float converte una stringa
in un numero in virgola mobile. La funzione
repr ritorna una rappresentazione
stampabile di qualcosa. Ecco alcuni esempi:
>>> #Integer to String
...
>>> 2
2
>>> repr(2)
'2'
>>> -123
-123
>>> repr(-123)
'-123'
>>> #String to Integer
...
>>> "23"
'23'
>>> int("23")
23
>>> "23"*2
'2323'
>>> int("23")*2
46
>>> #Float to String
...
>>> 1.23
1.23
>>> repr(1.23)
'1.23'
>>> #Float to Integer
...
>>> 1.23
1.23
>>> int(1.23)
1
>>> int(-1.23)
-1
>>> #String to Float
...
>>> float("1.23")
1.23
>>> "1.23"
'1.23'
>>> float("123")
123.0
La funzione int prova a convertire
una stringa (o un numero in virgola mobile) in un intero.
Esiste anche una funzione simile float
che converte un numero intero in numero in virgola mobile.
Un'altra funzione di Python è eval
che ritorna il tipo di dato che viene immesso. Per esempio:
>>> repr(1)
'1'
>>> repr(234.14)
'234.14'
>>> repr([4,42,10])
'[4, 42, 10]'
Se usate la funzione eval dovete
controllare il valore che ritorna per
assicurarvi che sia quello che vi aspettate.
>>> v=eval('123')
>>> print v,type(v)
123 <type 'int'>
>>> v=eval('645.123')
>>> print v,type(v)
645.123 <type 'float'>
>>> v=eval('[1,2,3]')
>>> print v,type(v)
[1, 2, 3] <type 'list'>
Un'altra funzione utile in string è
la funzione split. Questo è un esempio:
Notate come split converte una stringa
in una lista di stringhe. La stringa viene divisa in
corrispondenza di ogni spazio o di un secondo argomento (in
questo caso la virgola).
>>> import string
>>> string.split("This is a bunch of words")
['This', 'is', 'a', 'bunch', 'of', 'words']
>>> string.split("First batch, second batch, third, fourth",",")
['First batch', ' second batch', ' third', ' fourth']
Ecco l'output:
#Questo programma richiede un'eccellente conoscenza dei numeri decimali
def to_string(in_int):
"Converts an integer to a string"
out_str = ""
prefix = ""
if in_int < 0:
prefix = "-"
in_int = -in_int
while in_int / 10 != 0:
out_str = chr(ord('0')+in_int % 10) + out_str
in_int = in_int / 10
out_str = chr(ord('0')+in_int % 10) + out_str
return prefix + out_str
def to_int(in_str):
"Converts a string to an integer"
out_num = 0
if in_str[0] == "-":
multiplier = -1
in_str = in_str[1:]
else:
multiplier = 1
for x in range(0,len(in_str)):
out_num = out_num * 10 + ord(in_str[x]) - ord('0')
return out_num * multiplier
print to_string(2)
print to_string(23445)
print to_string(-23445)
print to_int("14234")
print to_int("12345")
print to_int("-3512")
2
23445
-23445
14234
12345
-3512