Python - 任何基数到十进制 (other2dec)
Python - any base to decimal (other2dec)
我因为一道题没及格。任务是:
"设计一个程序,将任何系统中的任何数字转换为十进制。
我们限制在 2 到 22 范围内的系统。"
原来如此。我知道二进制[2]、八进制[8]、十进制[10] 和十六进制[16] 系统。每个转换系统有1点,所以它必须是一个转换器:
2->10
3->10
...
22->10
我不知道这怎么可能。考试后我问我的教授怎么做,他说:"Just x to the power of y, multiply, and there it is. There's the same rule for all of them."
我可能是他说的有误,因为我处于post-考试意识状态。你们知道如何解决吗?
我看到 Whosebug 上已经有一些类似的问题,但是其中 none 并没有像我教授所说的那样解决问题。另外,我们开始学习 Python ~4 个月前,我们还没有学习回复中实现的一些选项。
"""输入
str/int,任意碱基[2-22]
出
十进制 int 或 float"""
基本阶段是这样的:
- 了解你所在的基地(根据我的理解,这是给你的 var)
- 对于输入数字中的每个字符,您将其乘以基数的位置次方。所以 "654",base 17 -> "6*17^2 + 5*17^1 + 4*17^0"
- 总和就是你的答案。
我刚刚编码了答案,但速度太慢了。此代码完全遵循 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
如果 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
int()
内置函数支持将任意数字转换为任意基数。它需要在基数中传递正确的数字,否则抛出 ValueError
.
语法:int('string', base)
转换为十进制
示例:
将数字 3334 转换为基数 5
>>> int('3334',5)
469
将数字 3334 转换为基数 9
>>>int('3334', 9)
2461
将以上转换为十六进制数
>>>hex(int('3334', 9))
'0x99d'
我因为一道题没及格。任务是:
"设计一个程序,将任何系统中的任何数字转换为十进制。
我们限制在 2 到 22 范围内的系统。"
原来如此。我知道二进制[2]、八进制[8]、十进制[10] 和十六进制[16] 系统。每个转换系统有1点,所以它必须是一个转换器:
2->10
3->10
...
22->10
我不知道这怎么可能。考试后我问我的教授怎么做,他说:"Just x to the power of y, multiply, and there it is. There's the same rule for all of them."
我可能是他说的有误,因为我处于post-考试意识状态。你们知道如何解决吗?
我看到 Whosebug 上已经有一些类似的问题,但是其中 none 并没有像我教授所说的那样解决问题。另外,我们开始学习 Python ~4 个月前,我们还没有学习回复中实现的一些选项。
"""输入
str/int,任意碱基[2-22]
出
十进制 int 或 float"""
基本阶段是这样的:
- 了解你所在的基地(根据我的理解,这是给你的 var)
- 对于输入数字中的每个字符,您将其乘以基数的位置次方。所以 "654",base 17 -> "6*17^2 + 5*17^1 + 4*17^0"
- 总和就是你的答案。
我刚刚编码了答案,但速度太慢了。此代码完全遵循 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
如果 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
int()
内置函数支持将任意数字转换为任意基数。它需要在基数中传递正确的数字,否则抛出 ValueError
.
语法:int('string', base)
转换为十进制
示例:
将数字 3334 转换为基数 5
>>> int('3334',5)
469
将数字 3334 转换为基数 9
>>>int('3334', 9)
2461
将以上转换为十六进制数
>>>hex(int('3334', 9))
'0x99d'