首页 > 解决方案 > 一个接收一串数字并返回整数而不使用内置 int() 函数的函数

问题描述

我需要创建一个接收字符串的函数,例如'142',并将其作为整数返回,而不使用 int() 函数。我完全不确定从哪里开始,提供给我们的“提示”是使用一个列表,例如

digits = list('0123456789')

编辑:我们还没有学过 chr、ord、eval() 或 ast.literal_eval?我们还没有学习什么是字符串和整数文字,也没有学习字典。也不鼓励使用 for 循环和 'in'。

有人对如何解决这个问题有任何想法吗?

标签: pythonpython-3.x

解决方案


'5768'你可以得到8 * 1 + 6 * 10 + 7 * 100 + 5 * 1000。您可以使用循环来访问字符串的字符,并且您必须跟踪乘数。

index可用于查找当前字符在列表中的位置,然后您就有了正确的整数值进行乘法运算。

digits = list('0123456789')
value = 0
exp = 0
for c in reversed('5768'):
    print(f'c={c} exp={exp}')
    i = digits.index(c)
    value += i * 10 ** exp
    exp += 1
print(value)

在问题中获得更多约束后,可以将此代码调整为以下内容。

digits = list('0123456789')
number = '5768'
value = 0
character_position = 0
while character_position < len(number):
    i = digits.index(number[character_position])
    value += i * 10 ** (len(number) - character_position - 1)
    character_position += 1
print(value)

单线解决方案:

print(sum('0123456789'.index(c) * 10 ** exp for exp, c in enumerate(reversed('5768'))))

推荐阅读