Python Lambda:将给定的带基数的数字转换为十进制
在数学中,将以5为基数的数字Python Lambda:将给定的带基数的数字转换为十进制,python,python-2.7,lambda,Python,Python 2.7,Lambda,在数学中,将以5为基数的数字n转换为以10为基数的数字是14。我知道如何得到14与以下工作 24base5 = 2*5^1 + 4*5^0 = 14 我想在一个单行程序中使用lambda实现这一点。然而,我不知道如何减少权力。当前不工作的编码如下所示: n = 24 x = 5 print map(lambda n : n * x ** 1, n) 我确实知道如何使x**1随着循环而减小 编辑:我想知道如何将数字也转换为基数16您可以使用int将数字从基数10解析为另一个基数
n
转换为以10为基数的数字是14。我知道如何得到14与以下工作
24base5 = 2*5^1 + 4*5^0
= 14
我想在一个单行程序中使用lambda实现这一点。然而,我不知道如何减少权力。当前不工作的编码如下所示:
n = 24
x = 5
print map(lambda n : n * x ** 1, n)
我确实知道如何使x**1
随着循环而减小
编辑:我想知道如何将数字也转换为基数16您可以使用
int
将数字从基数10解析为另一个基数:
>>> int('24', 5)
14
# or as a lambda function:
>>> c = lambda n, b: int(str(n), b)
>>> c(24, 5)
14
# convert to hex
>>> hex(c(24,5))[2:]
'e'
您可以使用
int
将数字从基数10解析到另一个基数:
>>> int('24', 5)
14
# or as a lambda function:
>>> c = lambda n, b: int(str(n), b)
>>> c(24, 5)
14
# convert to hex
>>> hex(c(24,5))[2:]
'e'
如果您想自己实现它而不是使用
int
,那么您可以在lambda
中使用sum
函数和for
循环(请注意for
循环从头到尾遍历num
的字符串表示):
如果您想自己实现它而不是使用
int
,那么您可以在lambda
中使用sum
函数和for
循环(请注意for
循环从头到尾遍历num
的字符串表示):
@StefanPochmann,你说得很对。但是,我们可以同时使用它,因为有
str(n)
。但是对于这个任务来说,使用纯int参数的版本更好。谢谢。我还可以知道如何在不使用hex()@Kode.Error404的情况下更改您转换为十六进制的答案吗?您想避免使用hex()
?为什么?有了它,你可以嵌套它们:hex(c(24,5))
。我正在尝试将24进制5转换为16进制,因此我尝试将其转换为10进制,然后转换为16进制。hex似乎不起作用。我问如何转换是因为我想学习如何转换成10进制,但现在我用这个打印十六进制(int(str(n),x))[2://code>@StefanPochmann,你说得很对。但是,我们可以同时使用它,因为有str(n)
。但是对于这个任务来说,使用纯int参数的版本更好。谢谢。我还可以知道如何在不使用hex()@Kode.Error404的情况下更改您转换为十六进制的答案吗?您想避免使用hex()
?为什么?有了它,你可以嵌套它们:hex(c(24,5))
。我正在尝试将24进制5转换为16进制,因此我尝试将其转换为10进制,然后转换为16进制。hex似乎不起作用。我问如何转换是因为我想知道如何转换成10进制,但现在我发现它是通过这个打印十六进制(int(str(n),x))[2:
我可以知道为什么这个打印lambda num,base:sum(int(digital)*base**索引,枚举中的数字(str(num)[:-1])
打印一个地址?@Kode.Error404因为您打印的是函数的内存地址,而不是调用它的结果。有没有一种方法可以直接打印而不必像以前那样调用它?您可以用括号括住整个lambda
定义,然后调用它:打印(lambda num,base:sum(int(digital))*base**index for index,digital in enumerate(str(num)[::-1]))(24,5)
我可以知道为什么打印lambda num,base:sum(int(digital)*base**index for index,digital in enumerate(str(num)[:-1])
打印一个地址?@Kode.Error404因为您打印的是函数的内存地址,而不是调用它的结果。有没有一种方法可以直接打印而不必像以前那样调用它?您可以用括号括住整个lambda
定义,然后调用它:打印(lambda num,base:sum(int(digital))*基本**索引,枚举中的数字(str(num)[:-1]))(24,5)