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

2024-05-29 07:04:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要写一个函数,把十六进制转换成十进制,我知道怎么做,但我困在第一位。到目前为止,我接受用户输入并以十六进制返回它,但这只在我一次输入一个东西时有效。代码是:

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())

如果我输入,例如,C,它返回12,但是如果我输入8C,它就不工作。我不明白这是为什么。


Tags: 函数代码用户inputrawreturnifdef
2条回答

您可以使用int来简化这个过程。功能:

def hex_to_dex(strng_of_hex):
    return int(strng_of_hex, 16)

示例:

>>> int("0xff", 16)
255

如果int有一个0x前额,它将忽略字符串中的0x。因此,以下方法也将起作用:

>>> int("a", 16)
10

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

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

如果你想派警卫进去:

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()))])

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

  1. str.find
  2. enumerate
  3. reversed->;反转字符串
  4. sum

至于[...],它是一个列表理解,您可以在上面找到大量的资源。

目前,您正在将用户输入的整个字符串传递给十六进制函数。因此,它适用于“C”,但不适用于“8C”。你没有检查if语句中的'8C'。 因此,十六进制函数返回值为None。 为了防止这种情况发生,您需要将用户输入的字符串一次传递给十六进制函数一个字符。

假设:

values = raw_input().upper()

使用问题中定义的hex()函数。 你可以:

print([hex(v) for v in values])

或者如果你不想要名单:

print(' '.join([str(hex(v)) for v in values]))

这将使用您定义的函数,但将其应用于用户输入的所有字符。。。而不是第一个。

这个答案的工作原理是假设您对定义的hex()函数的当前功能和返回类型感到满意。

相关问题 更多 >

    热门问题