我因为一个问题而考试失败。任务是:
"设计一个程序,将任何系统的任何数字转换为十进制。
我们仅限于 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
基本阶段是这样的:
- 了解你在什么基地(据我所知,这是给你的 var)
- 对于输入数字中的每个字符,将其乘以基数到位置的幂。 所以"654",基数 17 -> "6*17^2 + 5*17^1 + 4*17^0"
- 总和就是你的答案。
如果 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