题目
代码实现
逐位相乘: AB12(16)= A*163 + B*162 + 1*161 + 2*160
代码
import math
def hex_to_dec():
hex= [ord(n) - 55 if n in list("ABCDEF") else ord(n) - 48 for n in input('Input a hex number: ').upper()]
dec = [hex[-i - 1] * math.pow(16, i) for i in range(len(hex))]
return sum(dec)
调用
print(hex_to_dec())
输出结果``
解释
#首先从键盘出获得hex的字符串,将里面的字母大写
input('Input a hex number: ').upper()
#例如我们输入"ab12"
#得到"AB12"
#然后从字符串"AB12",使用列表推导与condition-if-else,
#对字符串中的每个字符的ascii码转为相应的数字
ord(n) - 55 if n in list("ABCDEF") else ord(n) - 48 for n in ...
#得到[10,11,1,2]
#第二行从列表的右侧开始,乘上16^i,i=(0,1,2,3...)
dec = [hex[-i - 1] * math.pow(16, i) for i in range(len(hex))]
#得到[10x16^3,11x16^2,1x16^1,2x16^0]
return sum(dec)
#返回10x16^3+11x16^2+1x16^1+2x16^0
PS:Python的魅力就是在于其精简的代码,而且不必要的循环可以用列表推导代替,虽然可读性未必很好,但是这个例子是为了让自己更加熟悉列表推导的重要作用,感受Python语言的强大~