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