编写一个函数将十六进制转换为十进制

JaA*_*nTr 1 python python-2.7

我需要编写一个将十六进制转换为十进制的函数,我已经知道如何做到这一点,但我已经陷入了第一位.到目前为止,我正在接受用户输入并以十六进制形式返回,但这只有在我一次输入1个内容时才有效.代码是:

def hex(x):
    if x == "0":
        return 0
    elif x == "1":
        return 1
    elif x == "2":
        return 2
    elif x == "3":
        return 3
    elif x == "4":
        return 4    
    elif x == "5":
        return 5
    elif x == "6":
        return 6
    elif x == "7":
        return 7
    elif x == "8":
        return 8
    elif x == "9":
        return 9
    elif x == "A":
        return 10
    elif x == "B":
        return 11
    elif x == "C":
        return 12
    elif x == "D":
        return 13
    elif x == "E":
        return 14
    elif x == "F":
        return 15

print hex(raw_input().upper())
Run Code Online (Sandbox Code Playgroud)

如果我输入,例如,C然后它返回12,但如果我输入8C然后它不起作用.我无法弄清楚为什么会这样.

Gam*_*iac 5

您可以使用它int来使这更容易.功能:

def hex_to_dex(strng_of_hex):
    return int(strng_of_hex, 16)
Run Code Online (Sandbox Code Playgroud)

例:

>>> int("0xff", 16)
255
Run Code Online (Sandbox Code Playgroud)

如果你有一个0xint 的infront 并不重要,它会0x在字符串中忽略.所以,以下内容也适用:

>>> int("a", 16)
10
Run Code Online (Sandbox Code Playgroud)

对于从头开始的原始十六进制代码,请尝试以下操作:

def hex(s):
    _hexer = "0123456789ABCDEF"
    return sum([_hexer.find(var) * 16 ** i for i, var in enumerate(reversed(s.upper()))])
Run Code Online (Sandbox Code Playgroud)

如果你想要一些警卫:

def hex(s):
    _hexer = "0123456789ABCDEF"

    if not all([var in _hexer for var in s.upper()]):
        print "Invalid string"
        return None

    return sum([_hexer.find(var) * 16 ** i for i, var in enumerate(reversed(s.upper()))])
Run Code Online (Sandbox Code Playgroud)

我在这里使用了很多功能,但为了快速参考,这是一个附录:

  1. str.find
  2. 枚举
  3. 反转 - >反转字符串

至于[...]它的列表理解,你可以在其上找到大量的资源.