Python不使用int()函数把字符串转换为数字
2018年05月21日 14:18:45 边缘ob边缘ob 阅读数:1035
https://blog.csdn.net/qq_33192555/article/details/80391554
方法一:利用str函数
既然不能用int函数,那我们就反其道而行,用str函数找出每一位字符表示的数字大写。
def atoi(s):
s = s[::-1]
num = 0
for i, v in enumerate(s):
for j in range(0, 10):
if v == str(j):
num += j * (10 ** i)
return num
方法二:利用ord函数
利用ord求出每一位字符的ASCII码再减去字符0的ASCII码求出每位表示的数字大写。
def atoi(s):
s = s[::-1]
num = 0
for i, v in enumerate(s):
offset = ord(v) - ord('0')
num += offset * (10 ** i)
return num
方法三:利用eval函数
eval的功能是将字符串str当成有效的表达式来求值并返回计算结果。我们利用这特点可以利用每位字符构造成和1相乘的表达式,再用eval算出该表达式的返回值就表示数字大写。
def atoi(s):
s = s[::-1]
num = 0
for i, v in enumerate(s):
t = '%s * 1' % v
n = eval(t)
num += n * (10 ** i)
return num
例题如下:
编写一个函数,实现:将字符串'12345'转换为[1, 2, 3, 4, 5], 再将列表值转换为整数12345,不使用内置的int(), str()函数。
# string conbersion intager lst = []
def Conversion(s):
s = s[::-1]
num = 0
for i, v in enumerate(s):
offset = ord(v) - ord('0')
num += offset * (10 ** i)
lst.append(offset) # lst conbersion intager
number=0
for k, v in enumerate(lst):
number += v * (10**k) lst.reverse()
print("string conbersion intager: \n ",lst,"\nlst conbersion intager: \n ",number) Conversion("12345")