鱼C论坛

 找回密码
 立即注册
查看: 3318|回复: 3

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

[复制链接]
发表于 2020-10-21 20:33:31 | 显示全部楼层 |阅读模式
6鱼币
本帖最后由 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



转换成列表,翻转,结果不变

转换成列表,翻转,结果不变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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([str(i) for i in to_bin(9, bin_list)])] # 列表推导式
print('0b' + result_list.pop())

# 或用for循环更易理解:
s = ''
bl = []
for i in to_bin(9, bl):
    s += str(i)
print('0b'+str(s))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 00:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表