为什么这个结果没有翻转?或者输出结果怎么总后往前写。。
本帖最后由 qiu064987 于 2020-10-21 20:44 编辑0.def num(a):
if a // 2 == 0:
return(a%2)
else:
if (a%2) == 1:
print(1, end='')
else:
print(0, end='')
return num(a//2)
print(num(89))
输出结果为1001101(怎么输出从后往前输出)
1.
def num(a):
if a // 2 == 0:
return(a%2)
else:
if (a%2) == 1:
print(1, end='')
else:
print(0, end='')
return num(a//2)
d = num(89)
b = str(d)
c = list(b)
c.reverse()
for each in c:
print(each, end='')
输出结果仍为1001101(不变,哪里错了)
def num(a):
if a // 2 == 0:
return(a%2)
else:
if (a%2) == 1:
print(1, end='')
else:
print(0, end='')
return num(a//2)
d = num(89)
b = str(d)
c = list(b)
result = ''
result += str(c.pop())
print(result)
还是为1001101
本帖最后由 kylin121380 于 2020-10-21 21:24 编辑
def num(a, l):
if a // 2 == 0:
l.insert(0, a % 2)
return l
else:
if a % 2 == 1:
l.insert(0, 1)
else:
l.insert(0, 0)
return num(a//2, l)
l = []
print(num(89, l)) 本帖最后由 qiu064987 于 2020-11-2 13:20 编辑
def bln(x,list1):
if x == 1:
list1.insert(0,x%2)
return list1
else:
list1.insert(0,x%2)
return bln(x//2, list1)
list1 = []
str1 = ''
i = bln(89,list1)
z = list(reversed(i))
while z:
for each in z:
str1 = str1 + str(z.pop())
print('0b' + str1) 参考kylin121380的回答,我稍微补充一下,
另外,添加了自己的注释,应该可以明白了,
代码如下:
def to_bin(a, bin_list): # a是要转化的正整数,bin_list是用来迭代保存二进制转化的结果(从末位开始存储)
if a // 2 == 0: # a为0的情况
bin_list.insert(0, a % 2)
return bin_list # 因为a为0,直接返回(不需要迭代)
else:
if a % 2 == 1:
bin_list.insert(0, 1) # 余数为1,则在“左边”记为1(列表首位index=0, 插入1)
else:
bin_list.insert(0, 0) # 余数为0,则记为0(在列表首位插入0)
return to_bin(a//2, bin_list) # 对商进行迭代(以商为新的输入参数之一,已转化的末位二进制的新列表为输入参数之二)
# 输出结果:
print('------转化后的结果是:')
bin_list = [] # 先定义和清空
result_list = [''.join()] # 列表推导式
print('0b' + result_list.pop())
# 或用for循环更易理解:
s = ''
bl = []
for i in to_bin(9, bl):
s += str(i)
print('0b'+str(s))
页:
[1]