python递归将十进制转换为十六进制

问题描述 投票:0回答:3

如何递归或迭代地将十进制更改为十六进制?

我写了一个示例程序,但实际上不起作用:

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

我怎样才能让它正常工作?我知道有一个内置函数,但我想这样做。

python recursion decimal hex
3个回答
0
投票
# 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()

0
投票

您的程序无法“运行”的主要原因是您滥用了函数和不可变对象。 Numbers 对象是不可变的,这意味着您无法更改 Python 中数字对象的值,您需要返回一个新数字。当您执行 ChangeHex(n) 时,您将

n
的值(即数字对象)传递给函数 - 它不知道有一个与该数字关联的变量。因此,当您更改像
n
这样的局部变量时,调用者中的变量不会更改。

您希望函数返回一个新值,而不是尝试更改传递的值(这实际上是不可能的)。查找 return 语句,并使用

ChangeHex(n)

的值。提示:


result += ChangeHex(n) return result

可能您想退回正在打印的内容,但我真的不能告诉。

这同样适用于操作。由于数字是不可变的,因此对数字的操作无法更改数字,您需要将数字分配给变量。

n % 16

不执行任何操作,您需要分配,例如

n = n % 16
n %= 16
    


0
投票
	
© www.soinside.com 2019 - 2024. All rights reserved.