Python中的基本转换器

2024-09-30 18:35:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个程序,用Python将任何base转换为base10。程序代码如下所示。在

print("Enter the number you want to convert to base 10: ")
number = input()
"""length of the digit entered"""
length = len(number)
print("Enter the base of the number: ")
base = input()

for i in range(len(number)):
    length = length - 1
    """Computes the sum for each digit"""
    s = number[i] * (int(base) ^ length) 
    s += s
print(s)

问题是我输入的任何数字的答案总是1111。欢迎就如何解决这个问题提出任何建议。在


Tags: oftheto程序numberforinputbase
2条回答

要找到任何数字的值,您不仅需要知道它的位置和基数,还需要知道可能数字的集合和顺序。在准则中:

s = number[i] * (int(base) ^ length) 

我看不到从数字number[i]的字符表示到数值的转换。后面的那一行更奇怪,因为您只需加倍s,而不是收集一个值的总和。在

(另请注意,Python的int类型已经处理了从2到36的基数。)

只是因为这个练习很有趣,这里有一个稍微不同的方法:

^{pr2}$

^bitwise XOR operator,不是幂运算符。在Python中,power operator is ^{}

s = number[i] * (int(base) ** length)

还有其他错误;s += s只是s *= 2,你在那里把数字翻了一番。您可能需要从s = 0开始,然后将循环求和为:

^{pr2}$

但是您还没有将number[i]转换为实际的数值。在

您需要从“数字”到数值的映射:

digits = {c: i for i, c in enumerate('0123456789abcdefghijklmnopqrstuvwxyz')}

这将创建一个从字符串数字到数值的字典映射,因此'7'映射到7,而{}映射到15,等等,这样就可以得到一个一直到基36的映射。在

现在可以使用digits将字符串数字映射为数值:

s = 0
base = int(base)
for i, digit in enumerate(reversed(number.lower())):
    s += digits[digit] * (base ** i) 

我在这里颠倒了对数字的处理;从小到大更容易。enumerate()为我们提供了一个索引计数,您可以直接在number上循环以生成字符,而不是使用range()和索引到{}。我把number小写,这样a和{}都是{}的意思。在

然后可以将其转换为函数中的一个线性函数:

digits = {c: i for i, c in enumerate('0123456789abcdefghijklmnopqrstuvwxyz')}

def parse_number(number, base):
    return sum(digits[digit] * (base ** i)
               for i, digit in enumerate(reversed(number.lower())))

print(parse_number(number, int(base)))

相关问题 更多 >