Python:十六进制转换代码函数中的语义错误

时间:2017-10-05 18:19:04

标签: python function

我已经为我的4十六进制十六进制到十进制转换器编写了一个函数,虽然它有效但是有一个我无法弄清楚的语义错误。你能告诉我这个错误是什么吗?

def convert16_10(hexa):
    den = 0
    for i in range(4):
        if hexa[i] == "A":
            den += (16 ** 3-i) * 10
        elif hexa[i] == "B":
            den += (16 ** 3-i) *11
        elif hexa[i] == "C":
            den += (16 ** 3-i) * 12
        elif hexa[i] == "D":
            den += (16 ** 3-i) * 13
        elif hexa[i] == "E":
            den += (16 ** 3-i) * 14
        elif hexa[i] == "F":
            den += (16 ** 3-i) * 15
        elif hexa[i] not in "ABCDEF":
            den += (16 ** 3-i) * i
    return den

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码进行简单转换:

i = int(hexa, 16)

答案 1 :(得分:0)

  • 你应该在(16 ** 3-i)的权力中使用括号。应该是(16 ** (3-i))
  • 您应该将数字转换为整数而不是* i中的索引。应该是* int(hexa[i])

解决方案:

def convert16_10(hexa):
    den = 0
    for i in range(4):
        if hexa[i] == "A":
            den += (16 ** (3-i)) * 10
        elif hexa[i] == "B":
            den += (16 ** (3-i)) *11
        elif hexa[i] == "C":
            den += (16 ** (3-i)) * 12
        elif hexa[i] == "D":
            den += (16 ** (3-i)) * 13
        elif hexa[i] == "E":
            den += (16 ** (3-i)) * 14
        elif hexa[i] == "F":
            den += (16 ** (3-i)) * 15
        elif hexa[i] not in "ABCDEF":
            den += (16 ** (3-i)) * int(hexa[i])
    return den

print(convert16_10("007F")) # => 127