1

10 進数を 16 進数に変換するプログラムを作成しました。これは、Python の hex() 関数に相当します。プログラムは「2559」まで正しい値を出力します。より大きな数値の 16 進数の正しい値を取得する方法。コードは 2600 の 10 進数値から正しい 16 進数表現を与えることができません。これが私のコードです:

          #########################################
              #Decimal to Hexadecimal Conversion    #
          #########################################


def DectoHex(n):

    if n <= 16:
        return n

    elif n>16:          

        if n%16 == 10:
            x = 'A'
        elif n%16 == 11:
            x = 'B'
        elif n%16 == 12:
            x = 'C'
        elif n%16 == 13:
            x = 'D'
        elif n%16 == 14:
            x ='E'
        elif n%16 == 15:
            x = 'F'
        else:
            x = n%16            
        print x     
        n = n/16        
        print n

        if n == 10:
            n = 'A'
        elif n == 11:
            n = 'B'
        elif n == 12:
            n = 'C'
        elif n == 13:
            n = 'D'
        elif n == 14:
            n ='E'
        elif n == 15:
            n = 'F'

        elif n>=16:

            if n%16 == 10:
                n = str(n/16) + 'A'
            elif n%16 == 11:
                n = str(n/16) + 'B'
            elif n%16 == 12:
                n = str(n/16) + 'C'
            elif n%16 == 13:
                n = str(n/16) + 'D'
            elif n%16 == 14:
                n = str(n/16) + 'E'
            elif n%16 == 15:
                n = str(n/16) + 'F'
            else:
                n = str(n/16) + str(n%16)
            print n 
        return str(n) + str(x)


print "Would you like to continue:"
print "Enter 'Y' to continue, 'N' to quit"
Str = str (raw_input("> "))

while True:

        if Str == 'Y':
            print "Enter a decimal number:"
            dec = int (raw_input("> "))

            Hex = DectoHex(dec)

            print "The number in base 16 is:", Hex

            print "Enter 'Y' to continue, 'N' to quit"
            Str = str (raw_input("> "))

        elif Str == 'N':
            print "Good Bye!"
            break
        else:
            print "Plesae Enter 'Y' or 'N'"
            Str = str (raw_input("> "))
4

2 に答える 2

0

実験以外のコードを作成する場合は、Pythonのhex()(docs.python.org/library/functions.html#hex)を使用する必要があります。そうは言っても、私はあなたがあなた自身の実装を修正するのを手伝います。

小数点を基数16文字に変換するために大文字と小文字を使用しており、これを有限回数実行しているため、コードが限界まで機能する理由が説明されています。次のような別の関数で10進数から16進数への変換を定義することをお勧めします。

def toHex(n):
    if n % 16 == 10:
        x = 'A'
    elif n % 16 == 11:
        x = 'B'
    elif n % 16 == 12:
        x = 'C'
    elif n % 16 == 13:
        x = 'D'
    elif n % 16 == 14:
        x = 'E'
    elif n % 16 == 15:
        x = 'F'
    else:
        x = n % 16            
    return x

n%16が一時変数に格納されている可能性があることに注意してください。

同じことを行うもっと短い方法は、インデックスに基づいて文字列から文字を直接取得することです。

DEC_TO_HEX_SINGLE_DIGIT = "0123456789ABCDEF"
def toHex(n): # 0 < n < 16
    return DEC_TO_HEX_SINGLE_DIGIT[n]

DectoHex関数では、有限回で16進数を追加しています。16進文字列を作成するには、再帰またはループを使用する必要があります。再帰の例は次のとおりです。

def DectoHex(n):
    if n < 16:
        return toHex(n)
    mod = n % 16
    n /= 16
    return DectoHex(n) + str(toHex(mod))
于 2012-08-01T09:05:43.080 に答える
-1

int関数に base キーワード引数を使用しないのはなぜですか?

def decToHex(n):
    return int(n,base=16)

あるいは、hex () 関数も探していることを実行します。

于 2012-11-05T20:05:35.870 に答える