关于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))
老师,这段代码中我有个地方没有搞明白,能不能帮我理一下这段代码运行的顺序,每一步得出的值是多少。感谢老师 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 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: # 为假,程序跳过此步骤
逃兵 发表于 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))
这个里面 Peteryo01223 发表于 2021-2-9 17:27
感谢老师 redaiconglin 发表于 2021-2-9 17:33
def Dec2Bin(dec):
result = ''
看你的情况,我觉得是对二进制与十进制的换算不熟悉,其实并不是因为不懂python。两者混在一起,确实问也问不出,答也不好答。 Peteryo01223 发表于 2021-2-9 18:42
看你的情况,我觉得是对二进制与十进制的换算不熟悉,其实并不是因为不懂python。两者混在一起,确实问也 ...
老师说的很清楚我明白了。之前是因为不明白运算的顺序。搞不清楚第一步运算出来为什么是1.然后是11这样
页:
[1]