面试题:python中不使用int将字符串型数字转为整形

一道面试题
s = '520'
如何不用int()将s转为整形?

阅读 4.3k
4 个回答
from functools import reduce

s='520'
num_map = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

def char2num(k):
    return num_map[k]
    
def fn(x, y):
    return x * 10 + y
    
print(reduce(fn, map(char2num, s))) # 520

s='520'

sum =0
for a in s: 
    sum = sum*10 + (ord(a)-ord('0'))
print(sum)    
520

这仅是展示个思路,没人会把这个代码放入产品,严格一点的可看这里

这样如何

s = '520'
n = round(float(s))

应该来说,纯数字的字符串转换整型本身是很简单。

其实在面试中,这个问题的重点是,考虑非纯数字的字符串;当然,这一点要和面试官通过交流确认。

  • 比如是否含有负数(-:负号)
  • 比如末尾带有非数字的字符串,要不要实现字符串“尽可能”转为整数。

但是就数字字符串转换为整型本身而言,

  1. 了解 chrord 函数的使用,因为这将其带入最根本的 ASCII 编码,和其它语言一致。
  2. 然后就是个十百千万的数学位运算;

纯数字的字符串转化为整型,这么写也就够了(和一个其中答案相同):

def atoi(s):
    ret = 0
    for c in s:
        ret = (ret * 10) + (ord(c) - ord('0'))
    return ret
推荐问题