Tom*_*cik -3 python decimal base any
因为一道题,我考试不及格。任务是:
“设计一个程序,将任何数字从任何系统转换为十进制。
我们限制在 2 到 22 范围内的系统。”
所以我来了。我知道二进制 [2]、八进制 [8]、十进制 [10] 和十六进制 [16] 系统。每个转换系统有1分,所以它必须是一个转换器:
2->10
3->10
...
22->10
我不知道这怎么可能。考试后我问我的教授怎么做,他说:“只是 x 的 y 次方,乘以,就是这样。所有这些都有相同的规则。”
他说的话我可能是错的,因为我处于考试后的意识状态。你们知道如何解决它吗?
我看到在stackoverflow上已经有一些类似的问题,但没有一个不能像我教授所说的那样解决问题。另外,我们大约在 4 个月前开始学习 Python,我们还没有学习回复中实现的一些选项。
"""IN
str/int, any base[2-22]
OUT
十进制整数或浮点数"""
所述int()内置的任何数量的任何基本的功能支持的转换。它需要在基数内传递正确的数字,否则会抛出一个ValueError.
语法:int('string', base)转换为十进制
例子:
将数字 3334 转换为基数 5
>>> int('3334',5)
469
Run Code Online (Sandbox Code Playgroud)
将数字 3334 转换为基数 9
>>>int('3334', 9)
2461
Run Code Online (Sandbox Code Playgroud)
上面的转换为十六进制数
>>>hex(int('3334', 9))
'0x99d'
Run Code Online (Sandbox Code Playgroud)
我刚刚对答案进行了编码,但速度太慢了。此代码完全遵循 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
Run Code Online (Sandbox Code Playgroud)