python - 显示从十进制到二进制转换的 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也打印输出?
解决方案
问题是“它做了你告诉它做的事情”。
您的函数会打印,然后返回 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))
推荐阅读
- python - python - setsockopt IP_TOS 被忽略
- hive - Hive:从文本文件创建表。处理特殊字符
- javascript - ExecJS::RuntimeError: SyntaxError: Unexpected token: punc ()) from get@(execjs):3538:630
- reactjs - 将子组件的状态传递给父组件?
- cmake - 如何使用 CMake
- html - 使用水平滚动使绝对定位的 div 适合内容宽度并溢出父级
- sql - SQL - 根据条件和优先级返回唯一行
- sql-server - SQL-Server - 使用内连接更新,输出也使用内连接
- python - 在 Pandas 中调用 resample() 时出现 TypeError
- java - 模拟选举的蒙特卡罗模拟