Python 递归转换十进制为十六进制

0 投票
2 回答
2147 浏览
提问于 2025-04-16 16:21

你怎么通过递归或者循环的方法把十进制数转换成十六进制数呢?

我写了一个示例程序,但它并没有真正运行:

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

我该怎么让它正常工作呢?我知道有内置的函数可以用,但我想用这种方法来实现。

2 个回答

0

你程序不“工作”的主要原因是你错误地使用了函数和不可变对象。在Python中,数字对象是不可变的,这意味着你不能直接改变一个数字的值,你需要返回一个新的数字。当你调用ChangeHex(n)时,你实际上是把n的值(也就是这个数字对象)传给了函数——函数并不知道这个数字是和哪个变量关联的。因此,当你在函数内部改变像n这样的局部变量时,外面的变量是不会改变的。

你希望函数返回一个新的值,而不是试图改变传入的值(这实际上是做不到的)。你可以查一下返回语句,并使用ChangeHex(n)的返回值。提示:

result += ChangeHex(n)


return result

你可能想返回你正在打印的内容,但我不能确定。

同样的道理也适用于运算。由于数字是不可变的,对数字的运算不能改变这个数字,你需要把结果赋值给一个变量。比如n % 16本身不会做任何事情,你需要进行赋值,比如n = n % 16或者n %= 16

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()

撰写回答