我正在制作一个小程序,将二进制数转换为十六进制数。为此,我首先将给定数据拆分为4位块,如您所见。
def binary_to_hex(n):
if len(n)%4 != 0:
n = "0"+n
return binary_to_hex(n)
return n
现在这个例子没有任何障碍,返回了四位的块。
但是,当我省略return
子句中的第一个if
语句时,只会添加一个0
。如果n
不能被4整除,那就是。
我猜它与变量范围有关。 Similar problems在这种情况下似乎不适用。 你能解释一下发生了什么以及如何在不使用第一个return语句的情况下进行。
此外,这种类型的函数的名称是什么,在满足给定要求之前调用本身?
答案 0 :(得分:1)
以下是我们正在讨论的代码:
def binary_to_hex(n):
if len(n)%4 != 0:
n = "0"+n
binary_to_hex(n) # no `return'
return n
此处,binary_to_hex(n)
调用函数并忽略结果。由于调用没有可观察到的副作用(即,它不会执行调用者可以观察到的任何内容),因此它实际上是无操作,并且代码等同于:
def binary_to_hex(n):
if len(n)%4 != 0:
n = "0"+n
return n
这解释了您所看到的行为。
[H]可以不使用第一个返回语句[?]
尝试使用循环或字符串重复运算符(*
)。
答案 1 :(得分:0)
正如已在评论中所述,调用自身的函数称为递归函数。
如果您想在没有递归的情况下实现此功能,请将if
替换为while
:
def add_leading_zeros_to_make_length_of_string_a_multiple_of_four(n):
while len(n)%4 != 0:
n = "0"+n
return n