qiu064987 发表于 2020-10-21 20:33:31

为什么这个结果没有翻转?或者输出结果怎么总后往前写。。

本帖最后由 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:22:28

本帖最后由 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:18:05

本帖最后由 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)

阿奇_o 发表于 2020-11-2 15:07:58

参考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]
查看完整版本: 为什么这个结果没有翻转?或者输出结果怎么总后往前写。。