Python - 任何基数到十进制 (other2dec)

Python - any base to decimal (other2dec)

我因为一道题没及格。任务是:

"设计一个程序,将任何系统中的任何数字转换为十进制。
我们限制在 2 到 22 范围内的系统。"

原来如此。我知道二进制[2]、八进制[8]、十进制[10] 和十六进制[16] 系统。每个转换系统有1点,所以它必须是一个转换器:

2->10
3->10
...
22->10

我不知道这怎么可能。考试后我问我的教授怎么做,他说:"Just x to the power of y, multiply, and there it is. There's the same rule for all of them."

我可能是他说的有误,因为我处于post-考试意识状态。你们知道如何解决吗?

我看到 Whosebug 上已经有一些类似的问题,但是其中 none 并没有像我教授所说的那样解决问题。另外,我们开始学习 Python ~4 个月前,我们还没有学习回复中实现的一些选项。

"""输入
str/int,任意碱基[2-22]

十进制 int 或 float"""

基本阶段是这样的:

  1. 了解你所在的基地(根据我的理解,这是给你的 var)
  2. 对于输入数字中的每个字符,您将其乘以基数的位置次方。所以 "654",base 17 -> "6*17^2 + 5*17^1 + 4*17^0"
  3. 总和就是你的答案。

我刚刚编码了答案,但速度太慢了。此代码完全遵循 daTokenizers 解决方案

def converter(number, base):
    #split number in figures
    figures = [int(i,base) for i in str(number)]
    #invert oder of figures (lowest count first)
    figures = figures[::-1]
    result = 0
    #loop over all figures
    for i in range(len(figures)):
        #add the contirbution of the i-th figure
        result += figures[i]*base**i
    return result

converter(10,22)
>>> 22

converter(52,16)
>>> 82

如果 n 是数字,要从基数 'other' 转换为十进制,试试这个:

>>> other2dec = lambda n, other:  sum([(int(v) * other**i) for i, v in enumerate(list(str(n))[::-1])])
>>> other2dec(71,8)
57
>>> other2dec(1011,2)
11

int()内置函数支持将任意数字转换为任意基数。它需要在基数中传递正确的数字,否则抛出 ValueError.

语法:int('string', base) 转换为十进制

示例:

将数字 3334 转换为基数 5

>>> int('3334',5)

469

将数字 3334 转换为基数 9

>>>int('3334', 9)

2461

将以上转换为十六进制数

>>>hex(int('3334', 9))

'0x99d'