我因为一个问题考试不及格。任务是:
"设计一个程序,将任何系统中的任何数字转换为十进制。
我们限制在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"""
答案 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)
基本阶段是这样的:
答案 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