Python – Convertire una stringa ad intero
Ci sono vari modi in python per convertire una stringa ad intero.
La maniera più ovvia:
>>> int('123456') 123456 >>> import string >>> string.atoi('123456') 123456 |
Se invece vogliamo fare di più dobbiamo scoprire la posizione di ogni singolo carattere all’interno della tabella ASCII:
>>> ord('1') 49 >>> ord('2') 50 |
Come si nota, i numeri e le lettere sono in un qualche modo, poste in ordine progressivo, è sufficiente utilizzare ‘0’ come base e sottrarlo al resto, in questo modo:
>>> ord('1')-ord('0') 1 |
Quindi se avessimo la stringa “1234”, potremmo ottenere ognuno dei numeri sottoforma di intero, con un ciclo:
>>> num_string = '1234' >>> num_list = [] >>> base = ord('0') >>> for num in num_string: ... num_list.append(ord(num) - base) ... >>> print num_list [1, 2, 3, 4] |
Ma come fare ad unire ogni componente del dizionario, per ottenere l’intero 1234?
Non vale sommarli, perchè otterremmo 1+2+3+4=10 mentre noi vogliamo 1234.
La soluzione, è di moltiplicare ogni componente per una potenza di 10, in base alla posizione. In questo modo:
num = '1234' nuovo_num = 0 base = ord('0') for i,n in enumerate(reversed(num)): nuovo_num += (ord(n) - base) * (10**i) print nuovo_num |
O se vogliamo restringerlo ad una sola linea, questo è quel che ne viene fuori:
>>> sum([(ord(n)-ord('0')) * (10 ** i) for i,n in enumerate(reversed('1234'))]) 1234 |
Commenti