Python编程 16进制转换为10进制-三行代码实现

题目

在这里插入图片描述

代码实现

逐位相乘: 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语言的强大~

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值