各位老师这段代码报错格式化字符串没有足够的参数如何解决
def dec28in(dec):result = ''
if dec:
result = dec28in(dec//2)
print('%s = dec28in(%s//2)'%(result,dec))
print('%s + str((%d)%2)'%(result,dec)) 问题出在这段代码需要怎么改
return result + str(dec%2)
else:
return result
print(dec28in(62))
另外这段代码如果正常输出result为什么是1.按照顺序应该是62%2第一个输出的应该是0才对啊。一直没有搞明白。谢谢老师能解决一下我的疑惑。感谢了
= dec28in(1//2)
1 = dec28in(3//2)
11 = dec28in(7//2)
111 = dec28in(15//2)
1111 = dec28in(31//2)
11111 = dec28in(62//2)
111110 第一个输出的为什么是0 呢 少打个百分号
def dec28in(dec):
result = ''
if dec:
result = dec28in(dec//2)
print('%s = dec28in(%s//2)'%(result,dec))
print('%s + str((%d)%%2)'%(result,dec))
return result + str(dec%2)
else:
return result
print(dec28in(62))
解析
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-11 17:40
少打个百分号
= dec28in(1//2)
+ str((1)%2)
1 = dec28in(3//2)
1 + str((3)%2)
11 = dec28in(7//2)
11 + str((7)%2)
111 = dec28in(15//2)
111 + str((15)%2)
1111 = dec28in(31//2)
1111 + str((31)%2)
11111 = dec28in(62//2)
11111 + str((62)%2)
111110
老师运算得出的结果第一个输出dec不是应该是62吗 = dec28in(1//2)为什么是倒过来的第一个是1,反而最后显示的是62主要是这个地方我没有明白。感谢老师能帮我讲解一下吗谢谢了。 redaiconglin 发表于 2021-2-11 23:32
= dec28in(1//2)
+ str((1)%2)
1 = dec28in(3//2)
你还记得汉诺塔吗?
不论我们的参数是多少,移动的都会是第一个塔(X柱的最顶层)
递归实际上就是返回之前的某一步操作进行运算
这里也比喻为汉诺塔的话,第一个1相当于汉诺塔的顶层,之后层层返回到最后
你修改一下print的位置就能看到程序是怎么运行的
def dec28in(dec):
result = ''
if dec:
print('return dec28in(%s//2) + str(%s%%2)'%(dec,dec))
result = dec28in(dec//2)
return result + str(dec%2)
else:
return result
逃兵 发表于 2021-2-12 12:05
你还记得汉诺塔吗?
不论我们的参数是多少,移动的都会是第一个塔(X柱的最顶层)
好的谢谢老师
页:
[1]