P25作业十进制转二进制(用递归),我的代码哪有问题?
def bin(x):list = []
if x == 0:
list.append(0)
return list
else:
bin(x//2)
list.append(x % 2)
return list
x = int(input("请输入需要转换的数字:"))
print("转换二进制以后为:", bin(x))
这个题本来是让以字符串形式呈现,我一时没想到怎么用字符串,就用了列表。但每次跑出来的效果都是:
请输入需要转换的数字:15
转换二进制以后为:
>>>
============= RESTART: 十进制转换二进制.py =============
请输入需要转换的数字:10
转换二进制以后为:
就并不能实现递归。
但我觉得我和小甲鱼给的答案,除了字符串/列表以外没什么差别啊:
(以下是正确答案 能正常跑)
def Dec2Bin(dec):
result = ''
if dec:
result = Dec2Bin(dec//2)
return result + str(dec%2)
else:
return result
print(Dec2Bin(62))
求问一下到底哪有问题?
本帖最后由 昨非 于 2020-10-16 17:11 编辑
list = []
def bin(x):
if x != 0:
bin(x//2)
list.append(x % 2)
return list
x = int(input("请输入需要转换的数字:"))
print("转换二进制以后为:", bin(x))
这样就好了,只不过显示出来的是个列表,没有字符串好看
你这个的原因可能是每次调用bin()的时候列表被重新置为空列表了,写在函数外面,取余一位添加一位就好了 问题你已经自己说出来了,你用的是列表,打印出来的肯定就是列表啦
def bin(x):
# list = [] # 这里改成空字符串
list = ''
if x == 0:
# list.append(0)
list += str(0) # 这里添加进去
return list
else:
bin(x//2)
# list.append(x % 2)
list += str(x%2)
return list
x = int(input("请输入需要转换的数字:"))
print("转换二进制以后为:", bin(x))
因为你没有把递归的返回值利用起来,所以最终返回的其实一直都是输入的数字对2求余的结果,也就是只有0或1
你对比一下你的程序第8、9行和小甲鱼程序的第5、6行
页:
[1]