redaiconglin 发表于 2021-2-9 16:58:23

关于PYTHON中使用递归十进制转换二进制问题

def Dec2Bin(dec):
    result = ''
   
    if dec:
      result = Dec2Bin(dec//2)    这个位置result的值应该是多少是不是31?如果是31那接下去return result + str(dec%2)返回的值是多少没搞清楚运行的顺序。
      return result + str(dec%2)   
    else:
      return result

print(Dec2Bin(62))
老师,这段代码中我有个地方没有搞明白,能不能帮我理一下这段代码运行的顺序,每一步得出的值是多少。感谢老师

逃兵 发表于 2021-2-9 17:07:52

def Dec2Bin(dec):
    result = ''
   
    if dec:
      result = Dec2Bin(dec//2)
      print('result = Dec2Bin(%s//2)'%dec)
      print(result + str(dec%2))
      return result + str(dec%2)

    else:
      return result

print(Dec2Bin(62))

result = Dec2Bin(1//2)
1
result = Dec2Bin(3//2)
11
result = Dec2Bin(7//2)
111
result = Dec2Bin(15//2)
1111
result = Dec2Bin(31//2)
11111
result = Dec2Bin(62//2)
111110
111110
>>>

Peteryo01223 发表于 2021-2-9 17:27:33

本帖最后由 Peteryo01223 于 2021-2-9 18:46 编辑

首先楼主要搞懂,python里的规定;//是地板除法,%是求余数,哈,然后就容易看懂了。
print(Dec2Bin(62)) # 这一句,意味着打印函数,变量值为62

第一轮:
   if dec:
      result = Dec2Bin(dec//2)   # 这个位置result的值是,62//2,即:31
      return result + str(dec%2)   # 这个位置 result 为 空置 + 62%2,即:0

第二轮:
if dec:
      result = Dec2Bin(dec//2)   # 这个位置result的值是,31//2,即:15
      return result + str(dec%2)   # 这个位置 result 为 0 + 31%2,即:10

第三轮:
if dec:
      result = Dec2Bin(dec//2)   # 这个位置result的值是,15//2,即:7
      return result + str(dec%2)   # 这个位置 result 为 10 + 15%2,即:110

第四轮:
if dec:
      result = Dec2Bin(dec//2)   # 这个位置result的值是,7//2,即:3
      return result + str(dec%2)   # 这个位置 result 为 110 + 7%2,即:1110

第五轮:
if dec:
      result = Dec2Bin(dec//2)   # 这个位置result的值是,3//2,即:1
      return result + str(dec%2)   # 这个位置 result 为 1110 + 3%2,即:11110

第五轮:
if dec:
      result = Dec2Bin(dec//2)   # 这个位置result的值是,1//2,即:0
      return result + str(dec%2)   # 这个位置 result 为 11110 + 1%2,即:111110

第六轮:
if dec: # 为假,程序跳过此步骤

redaiconglin 发表于 2021-2-9 17:33:58

逃兵 发表于 2021-2-9 17:07


def Dec2Bin(dec):
    result = ''
   
    if dec:
      result = Dec2Bin(dec//2) 这一步不是应该等于62//2吗为什么是1//2
      print('result = Dec2Bin(%s//2)'%dec)
      print(result + str(dec%2))
      return result + str(dec%2)

    else:
      return result

print(Dec2Bin(62))
这个里面

redaiconglin 发表于 2021-2-9 18:35:47

Peteryo01223 发表于 2021-2-9 17:27


感谢老师

Peteryo01223 发表于 2021-2-9 18:42:31

redaiconglin 发表于 2021-2-9 17:33
def Dec2Bin(dec):
    result = ''
   


看你的情况,我觉得是对二进制与十进制的换算不熟悉,其实并不是因为不懂python。两者混在一起,确实问也问不出,答也不好答。

redaiconglin 发表于 2021-2-10 09:06:47

Peteryo01223 发表于 2021-2-9 18:42
看你的情况,我觉得是对二进制与十进制的换算不熟悉,其实并不是因为不懂python。两者混在一起,确实问也 ...

老师说的很清楚我明白了。之前是因为不明白运算的顺序。搞不清楚第一步运算出来为什么是1.然后是11这样
页: [1]
查看完整版本: 关于PYTHON中使用递归十进制转换二进制问题