1

16 進数を 10 進数に変換する関数を作成する必要があり、その方法はわかっていますが、最初のビットで行き詰まっています。これまでのところ、ユーザー入力を取得して16進数で返していますが、これは一度に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())

たとえば、C と入力すると 12 が返されますが、8C と入力すると機能しません。これがなぜなのかわかりません。

4

2 に答える 2

5

を使用intすると、これをより簡単に行うことができます。関数:

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

例:

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

0xint の infrontがあるかどうかは関係ありません0x。文字列では無視されます。したがって、以下も機能します。

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

最初から生の 16 進コードについては、次のことを試してください。

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. 列挙する
  3. reversed -> 文字列を反転します

については[...]、そのリスト内包表記であり、その上に大量のリソースを見つけることができます。

于 2013-10-26T10:10:50.317 に答える
0

現在、ユーザーが入力した文字列全体を 16 進関数に渡しています。このため、「C」では機​​能しますが、「8C」では機​​能しません。if ステートメントで「8C」をチェックしていません。したがって、16 進関数は値を返しますNone。これを防ぐには、ユーザーが入力した文字列を一度に 1 文字ずつ 16 進関数に渡す必要があります。

仮定:

values = raw_input().upper()

hex()質問で定義されているように関数を使用します。あなたは出来る:

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

または、リストが必要ない場合:

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

これは、定義した関数を使用しますが、最初の文字だけでなく、ユーザーが入力したすべての文字に適用します。

この回答は、現在の機能と定義済み関数の戻り値の型に満足しているという前提で機能しhex()ます。

于 2013-10-26T10:15:23.150 に答える