编写字符串转ASCII十六进制数字求和函数遇转码难题求助
解决hex_hash函数的实现问题
我来帮你搞定这个函数!你在ASCII转十六进制环节卡壳的问题,主要是没找对每个字符的正确处理方式,咱们一步步拆解实现:
完整实现代码
先给你可以直接用的版本,两种写法任你选:
常规循环写法
def hex_hash(code): total = 0 for char in code: # 把单个字符转成ASCII码的十六进制字符串(去掉默认的0x前缀) hex_repr = hex(ord(char))[2:] # 遍历十六进制字符串里的每个字符 for hex_char in hex_repr: # 只保留数字字符,转成整数后累加 if hex_char.isdigit(): total += int(hex_char) return total
简洁生成器写法
def hex_hash(code): return sum( int(hex_char) for char in code for hex_char in hex(ord(char))[2:] if hex_char.isdigit() )
关键步骤解释
字符转ASCII十六进制:
单个字符的ASCII码用ord(char)获取,再用hex()转成十六进制字符串,但hex()会返回带0x前缀的结果(比如hex(ord('A'))返回'0x41'),所以我们用[2:]去掉前缀,得到纯十六进制字符。过滤字母并求和:
遍历每个十六进制字符串的字符,用isdigit()判断是否是数字(忽略A-F/a-f这些十六进制字母),把符合条件的字符转成整数后累加求和。
纠正你之前的尝试误区
code.encode('hex'):Python3已经移除了这个方法,要转整个字符串的十六进制得用code.encode().hex(),但这种方式是把整个字符串转成连续的十六进制,和逐个字符处理效果一致,但逐个处理更直观。code.hex():这个方法是字节串的方法,字符串要先转成字节(比如code.encode().hex())才能用。hex(code):hex()函数接收的是整数,直接传字符串会报错,这就是你之前出错的核心原因。
测试示例
比如输入"ABC":
- A的ASCII十六进制是
41,数字和为4+1=5 - B的ASCII十六进制是
42,数字和为4+2=6 - C的ASCII十六进制是
43,数字和为4+3=7 - 总和是5+6+7=18,调用
hex_hash("ABC")会返回18,符合预期。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

