如何在不使用Python中的int()的情况下将列表中的str转换为int

时间:2015-09-11 00:33:43

标签: python

问题非常简单。对不起,我对此很新。我不允许使用int()。

3 个答案:

答案 0 :(得分:1)

您正在寻找的算法是:

initialise number to 0
for each character in str
    multiply number by 10
    find number of character (ascii value, avaiable from ord(), - 48 is simplest) 
    add character number to number

当然,您应该检查字符串实际上是否所有数字。

答案 1 :(得分:1)

以下是如何为二进制(base2)数字执行此操作:

>>> bin(12)
'0b1100'
>>> sum([2**i * (ord(ch)-ord('0')) for i, ch in enumerate(reversed('1100'))])
12

答案 2 :(得分:1)

这是一种很好的Pythonic方式。

def str_to_int(s):
    if type(s) != str:
        raise TypeError("invalid type for str_to_int: {}".format(type(s)))
    if not s.isdigit():
        raise ValueError("invalid literal for str_to_int: '{}'".format(s))
    return sum((ord(char) - 48) * 10**(len(s) - n) for n, char in enumerate(s, start=1))

如果你不关心检查参数以确保它是一个字符串并且只包含数字,那么它可以减少到下面的一行:

str_to_int = lambda s: sum((ord(char) - 48) * 10**(len(s) - n) for n, char in enumerate(s, start=1))