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

时间:2016-01-25 13:52:50

标签: python decimal base any

我因为一个问题考试不及格。任务是:

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

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

2→10
3→10
...
22-→10

我不知道这怎么可能。我在考试后问我的教授该怎么做,他说:"只需要x的力量,乘以,然后就是。所有这些规则都有相同的规则。"

我可能会误解他所说的,因为我处于考试后的意识状态。你们有任何想法如何解决它?

我看到堆栈溢出已经存在类似的问题,但是没有一个像我教授所说的那样解决问题。此外,我们在4个月前开始学习Python,但我们还没有学到回复中实现的一些选项。

""" IN
str / int,任何基数[2-22]
   OUT
decimal int或float"""

4 个答案:

答案 0 :(得分:4)

我刚刚编写了答案,但速度太慢了。此代码完全遵循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 :(得分:2)

基本阶段是这样的:

  1. 了解你所处的基础(对我的描述,这是以var给你的)
  2. 对于输入数字中的每个字符,您将其乘以基数与位置的幂。所以“654”,基数17 - > “6 * 17 ^ 2 + 5 * 17 ^ 1 + 4 * 17 ^ 0”
  3. 总和就是你的答案。

答案 2 :(得分:2)

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

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

示例:

将数字3334转换为基数5

>>> int('3334',5)

469

将号码3334转换为基数9

>>>int('3334', 9)

2461

将上述内容转换为十六进制数字

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

'0x99d'

答案 3 :(得分:0)

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