0

演習として、数値を 16 進数値に変換しています。それを行うためのより専門的な方法はありますか?

def hexayacheviren(reqem):
    if reqem==10: 
        return "A"
    elif reqem==11: 
        return "B"
    elif reqem==12: 
        return "C"
    elif reqem==13: 
        return "D"
    elif reqem==14: 
        return "E"
    elif reqem==15: 
        return "F"
    else: 
        return reqem

def hexadecimal(n):
    cavab=[ ]
    i=0
    while (n>0):
        netice=n%16
        cavab.append(hexayacheviren(netice))
        i=i+1
        n=n//16
    string=''.join(str(e) for e in cavab)
    cvbstrng = string[::-1]
    print (cvbstrng)

hexadecimal(3200)
4

3 に答える 3

4

組み込み関数を使用します: hex. Pythonには電池が含まれています

>>> hex
<built-in function hex>
>>> hex(9)
'0x9'
>>> hex(21)
'0x15'
>>> hex(10101010101010101010101010101010101)
'0x1f204abeac202ce18095d40a57eb5L'
于 2013-03-16T11:44:57.010 に答える
1

を使用して最初の関数を簡単に作成しdict、エラー処理を少しスローすることもできます。たとえば、次のようになります。

def hexayacheviren(reqem):
    if not 0 <= reqem < 16:
        raise ValueError('Out of range')
    return {10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F'}.get(reqem, str(reqem))

値が 10、11、12... のいずれかである場合は、対応する文字を返します。それ以外の場合は、元の数値を文字列として返します。これにより、入力は常に int を取り、出力は常に文字列になるため、2 番目の関数を単純化できるようになります。

于 2013-03-16T12:11:28.697 に答える
0

これは、yield、ジェネレーター内包表記、三項演算子、文字列のインデックス作成、さまざまなビットいじりなど、Python のより興味深い機能のいくつかを使用した私のソリューションです。

#!/usr/bin/env python

def nibbles(n):
    m = max(4, (n.bit_length()+3) & -4)
    while m > 0:
        m -= 4
        yield (n >> m) & 0x0F

def _hexadecimal(n):
    return "".join("0123456789ABCDEF"[nib] for nib in nibbles(n))

def hexadecimal(n):
    return "-"+_hexadecimal(-n) if n < 0 else _hexadecimal(n)

if __name__ == "__main__":
    import sys
    u = [hexadecimal(i) for i in range(0x10010)]
    v = [hex(i)[2:].upper() for i in range(0x10010)]

    if u == v:
        print("tested ok")
        sys.exit(0)
    else:
        print("test failed!")
        sys.exit(1)
于 2013-03-16T19:35:37.860 に答える