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



我因为一个问题而考试失败。任务是:

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

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

10-2
->10-3
->。
10
->22日

我不知道这怎么可能。考试结束后,我问我的教授如何做到这一点,他说:"只要x到y的幂,乘以,它就在那里。他们所有人都有相同的规则。

我可能误解了他说的话,因为我处于考试后的意识状态。你们知道如何解决它吗?

我看到在stackoverflow上已经有几个这样的问题,但没有一个不能像我的教授所说的那样解决问题。另外,我们在~4个月前开始学习Python,我们还没有学习回复中实现的一些选项。

""在
ST/INT任何碱基[2-22]

十进制整数或浮点数""

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

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

例:

将数字 3334 转换为以 5 为底

>>> int('3334',5)
469

将数字 3334 转换为以 9 为基数

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

将上述转换为十六进制数

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

我只是编码了答案,但太慢了。此代码完全遵循 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

基本阶段是这样的:

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

如果 n 是数字,要从基数"其他"转换为十进制,请尝试以下操作:

>>> 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

相关内容

  • 没有找到相关文章

最新更新