首页 > 解决方案 > 显示从十进制到二进制转换的 Python 代码

问题描述

此 python 代码的目的是将十进制数转换为二进制数。我知道我可以在代码中使用 int() 函数,但我无法确定代码中发生的过程。

def decimal_to_binary(n):
   if(n > 1):
       decimal_to_binary(n//2)

   print(n % 2 , end='')

print(decimal_to_binary(18))
# The output for it is : 10010None

据说当程序进入if条件时,它会先解释if语句中的代码,那么它如何print(n % 2 , end='')同时执行。据我说,我认为这print(n % 2 , end='')只会打印一个值(0或1)。对我来说,似乎递归和if语句之后的print语句同时被解释。其次,为什么None也打印输出?

标签: pythonfunctionbinary

解决方案


问题是“它做了你告诉它做的事情”。
您的函数会打印,然后返回 None 值。
然后打印函数的返回值(无)。
您的函数从不打印换行符并没有帮助。

您期望该函数完成打印数字,然后为换行执行单独的打印。为此,您可以使用辅助函数单独处理递归:

def print_decimal_to_binary(n):
    dec_to_bin_recursive(n)
    print()

def dec_to_bin_recursive(n):
    if(n > 1):
        dec_to_bin_recursive(n//2)
    print(n % 2 , end='')

print_decimal_to_binary(18)

当然,您还期望该函数返回一个值,否则您不会将它包含在 print 语句中。您期望这是有充分理由的,因为应该这样做,以便您也可以进行自动化测试。如果有人想打印一个字符串,那是一项单独且微不足道的任务。

def decimal_to_binary_string(n):
    if not n:
        return ''
    return decimal_to_binary_string(n//2) + str(n%2)

print (decimal_to_binary_string(18))

返回一个值很重要,这样您就可以编写单元测试。我们不想运行它并检查二进制表示。我们希望计算机为我们做到这一点。在 pythong 中查找单元测试。这是一个严重的过度简化:

assert('10010' == decimal_to_binary_string(18))

当然,这很傻,因为这个任务已经在 python 中实现了,请参阅在 python 中将十进制转换为二进制

print(bin(18)[2:])
print('{0:b}'.format(18))

推荐阅读