How to convert string to integer without using library functions in Python?

Question:

I am trying to convert

a = "546"

to

a = 546

without using any library functions.

Asked By: Dennis M.

||

Answers:

You can keep a dictionary that stores the string and integer values of a numeric key, and then iterate over the string. While iterating over the string, you can use enumerate to keep track of the index and then raise 10 to that power minus 1 and then multiply by the corresponding key from the dictionary:

a = "546"
length = 0
for i in a:
   length += 1
d = {'1': 1, '0': 0, '3': 3, '2': 2, '5': 5, '4': 4, '7': 7, '6': 6, '9': 9, '8': 8}
count = 0
counter = 0
for i in a:
   count += (10**(length-counter-1)*d[i])
   counter += 1
print(count)

Output:

546
Answered By: Ajax1234

The trick is that 546 = 500 + 40 + 6, or 5*10^2 + 4*10^1 + 6*10^0.

Note how the exponent is just the index (in reverse). Using that, you can generalize this approach into a function:

def strToInt(number):
    total = 0                             # this is where we accumulate the result
    pwr = len(number) - 1                 # start the exponent off as 2
    for digit in number:                  # digit is the str "5", "4", and "6"
        digitVal = ord(digit) - ord('0')  # using the ascii table, digitVal is the int value of 5,4, and 6.
        total += digitVal * (10 ** pwr)   # add 500, then 40, then 6
        pwr -= 1                          # make sure to drop the exponent down by one each time
    return total

And you can use it like so:

>>> strToInt("546")
546
Answered By: Nate Jenson

The “purest” I can think of:

>>> a = "546"
>>> result = 0
>>> for digit in a:
        result *= 10
        for d in '0123456789':
            result += digit > d

>>> result
546

Or using @Ajax1234’s dictionary idea if that’s allowed:

>>> a = "546"
>>> value = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}
>>> result = 0
>>> for digit in a:
        result = 10 * result + value[digit]

>>> result
546
Answered By: Stefan Pochmann

You can loop through the string and perform the operation on each character using ord.

example:

a="546"
num=0
for i in a:
     num = num * 10 + ord(i) - ord('0')
Answered By: faizan baig
astr = "1234"
num = 0
for index,val in enumerate(astr[::-1]):
    res = (ord(val) - ord('0')) * (10 ** index)
    num += (res)
Answered By: Deep
def stringToInt(s):
    result = 0
    value = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    for digit in s:
        result = 10 * result + value[digit]

    return result
Answered By: Shyambeer Singh
def int(a):
ty = a.__class__.__name__
out = 0
di = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4,
      '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
if ty not in ("str", "int", "float", "bytes"):
    raise TypeError("unsupported format")
if a.__class__ == float:
    return a.__floor__()
elif a.__class__ == int:
    return a
else:
    ind = 0
    for val in a[::-1]:
        if val not in di:
            raise ValueError("invalid input")
        out += di[val]*(10**ind)
        ind += 1
        #print(out, di[val])
    return out
print(int("55"))
55
a=input()
r=0
for i in a:
  r=r*10+(ord(i)-ord("0"))
print(r)
print(type(r))
Answered By: Kirti
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.