簡體   English   中英

python將十進制遞歸轉換為十六進制

[英]python recursively convert decimal to hex

您將如何遞歸或迭代地將十進制更改為十六進制?

我寫了一個示例程序,它實際上並不起作用:

def ChangeHex(n):
    if (n < 0):
        print(0)
    elif (n<=1):
        print(n)
    else:
        ChangeHex(n / 16)
        if (n == 15):
            print("F")
        if (n == 14):
            print("E")
        if (n == 13):
            print("D")
        if (n == 12):
            print("C")
        if (n == 11):
            print("B")
        if (n == 10):
            print("A")
        n % 16

我將如何使其正常工作? 我知道有一個內置函數,但是我想這樣做。

# Converts a decimal number to hexadecimal.
# Executes a zero-fill for up to six digits.
# This is used for correct conversion back
# to the instruction format. See zero_fill().
# @param  dec  Decimal representation of instruction
# @return  Zero-filled hexadecimal instruction.
def convert(dec):
# BEGIN convert()
    hex = "%X" % dec
    return zero_fill(hex, 6)
# END convert()

# Prepends zeros until the specified
# length is reached. Works recursively.
# @param  n  Number to fill
# @param  length  Length to reach
# @return  Zero-filled number
def zero_fill(n, length):
# BEGIN zero_fill()
    # Check if length requirement is met
    if len(n) != length:
        # Requirement not met, run function again with
        # n having one prepended zero.
        return zero_fill('0'+n, length)
    else:
        # Requirement met, return n.
        return n
# END zero_fill()

您的程序無法正常運行的主要原因是因為您濫用了函數和不可變的對象。 數字對象是不可變的,這意味着您無法在Python中更改數字對象的值,需要返回一個新數字。 當執行ChangeHex(n) ,您將n的值(即數字對象)傳遞給函數-它不知道存在與該數字關聯的變量。 因此,當您更改局部變量(例如n ,調用者中的變量不會改變。

您希望函數返回一個新值,而不是嘗試更改所傳遞的值(這實際上是不可能的)。 查找return語句,並使用ChangeHex(n)的值。 提示:

result += ChangeHex(n)


return result

可能您想退還您要打印的內容,但我實在無法確定。

操作同樣如此。 由於數字是不可變的,因此對數字的操作無法更改數字,您需要將數字分配給變量。 n % 16不執行任何操作,您需要分配,例如n = n % 16n %= 16

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM