您如何递归或迭代地将小数更改为十六进制?
我写了一个实际上不起作用的示例程序:
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
我如何让它正常工作?我知道有一个内置功能,但我想这样做。
答案 0 :(得分: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()
答案 1 :(得分:0)
你的程序没有“工作”的主要原因是你滥用了函数和不可变对象。 Numbers对象是不可变的,这意味着无法更改Python中数字对象的值,您需要返回一个新数字。当你正在进行ChangeHex(n)
时,你将n
(即数字对象)的值传递给函数 - 它不知道有一个与这个数字相关联的变量。因此,当您更改像n
这样的局部变量时,调用者中的变量不会更改。
你希望函数返回一个新值,而不是试图改变传递的值(这是不可能的)。查找return语句,并使用ChangeHex(n)
的值。提示:
result += ChangeHex(n)
return result
可能你想要归还你正在打印的内容,但我无法说出来。
这同样适用于操作。由于数字是不可变的,因此对数字的操作不能更改数字,您需要将数字分配给变量。 n % 16
不执行任何操作,您需要分配,例如n = n % 16
或n %= 16
。