我想写一个函数,使我能够将一个数字从某种进制转换为另一种选择的进制,从二进制一直到三十进制。为了做到这一点,我首先需要将我的初始数字(以字符串形式给出)转换为十进制数,以便于进行进一步的转换。
然而,我的函数似乎有一个错误。
我现在拥有的是:
def decimal(number, base1):
number_dec = 0
val = '0123456789abcdefghijklmnopqrstuvwxyz'
if base1 != 10:
for digit in number[::-1]:
factor = val.find(digit)
for exp in range(0, len(number)):
number_dec += factor * base1 **exp
else:
number_dec = number
return number_dec
如果我输入,例如:
decimal('4d2', 16)
该函数返回的是“5187”,而不是正确的“1234”。错误在哪里?
int
函数已经可以实现这个功能:int('4d2', 16)
返回1234
,int('4x3', 36)
返回6375
。(它只能工作到基数36,但是对于你的代码也是如此,如果“三十六进制”是你所需的极限,那么你就完成了。)而且,它可以处理大写字母和小写字母。 - abarnertbase1 != 10
,你的代码返回一个整数,但如果是10,则返回一个字符串。这可能不是你想要的结果,对吗? - abarnertbase1
是10
,你只需要执行number_dec = number
,然后返回该字符串。如果是其他任何值,则会在number_dec
中计算一个整数并返回它。 - abarnert