面试题:python中不使用int将字符串型数字转为整形
一道面试题
s = '520'
如何不用int()将s转为整形?
回答:
from functools import reduces='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))
回答:
应该来说,纯数字的字符串转换整型本身是很简单。
其实在面试中,这个问题的重点是,考虑非纯数字的字符串;当然,这一点要和面试官通过交流确认。
- 比如是否含有负数(
-
:负号) - 比如末尾带有非数字的字符串,要不要实现字符串“尽可能”转为整数。
但是就数字字符串转换为整型本身而言,
- 了解
chr
和ord
函数的使用,因为这将其带入最根本的 ASCII 编码,和其它语言一致。 - 然后就是个十百千万的数学位运算;
纯数字的字符串转化为整型,这么写也就够了(和一个其中答案相同):
def atoi(s): ret = 0
for c in s:
ret = (ret * 10) + (ord(c) - ord('0'))
return ret
以上是 面试题:python中不使用int将字符串型数字转为整形 的全部内容, 来源链接: utcz.com/a/160420.html