Ora presenteremo un trucco che può essere usato con le stringhe:
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")
E l'output è:
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 funzionalità specifiche delle stringhe:
def to_upper(string):
## Converte la stringa in maiuscolo.
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")
THIS IS TEXT
if 'a' <= character <= 'z': che controlla se la lettera è
minuscola. Se è così, allora prosegue alla linea successiva. 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.
Adesso, qualche esercizio interattivo da digitare:
>>> # Da intero a stringa.
...
>>> 2
2
>>> repr(2)
'2'
>>> -123
-123
>>> repr(-123)
'-123'
>>> # Da stringa a intero.
...
>>> "23"
'23'
>>> int("23")
23
>>> "23"*2
'2323'
>>> int("23")*2
46
>>> # Da decimale a stringa.
...
>>> 1.23
1.23
>>> repr(1.23)
'1.23'
>>> # Da decimale a intero.
...
>>> 1.23
1.23
>>> int(1.23)
1
>>> int(-1.23)
-1
>>> # Da stringa a decimale.
...
>>> float("1.23")
1.23
>>> "1.23"
'1.23'
>>> float("123")
123.0
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 di quanto detto:
>>> repr(1) '1' >>> repr(234.14) '234.14' >>> repr([4,42,10]) '[4, 42, 10]'
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. La funzione eval prende una stringa
e ritorna i dati che Python rileva. Per esempio:
>>> 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'>
eval dovete controllare il valore che
ritorna per assicurarvi che sia quello che vi aspettate.
Un'altra funzione utile in string è split. Questo è un esempio:
>>> 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']
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).
# 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")
L'output è:
2 23445 -23445 14234 12345 -3512