未被驯化的甲鱼 发表于 2020-4-9 15:36:53

大佬们,为什么reverse()不能翻转纯数字的数组?

def j(x):
    zu = []
    t =1
    while(t != 0):
      t   = x // 2
      t1 = x % 2
      x   = t
      zu.append(t1)
      zu.reverse()
    print(zu)
这是一个十进制转二进制函数
假设j(6),则zu.append(t1)得出的结果是【0, 1, 1】
再用翻转zu.reverse(),结果就变成了。
难道翻转不应该得出【1,1,0】吗?
我换了一种方法,这样zu = zu[::-1],但结果也是【1,0,1】

为此我有以下疑问
为什么reverse()翻转结果是【1,0,1】?它是怎么得出来的?
为什么zu = zu[::-1]翻转结果也是【1,0,1】?它是怎么得出来的?

wp231957 发表于 2020-4-9 15:39:13

不应该写在循环之内

wp231957 发表于 2020-4-9 15:41:29

开始是0翻完是0
然后是01翻完是10然后是101
随便翻,咋翻都是101

hrp 发表于 2020-4-9 15:58:46

写在循环内就是每循环一次就翻转一次,代码逻辑不对

Omed 发表于 2020-4-9 16:09:23

本帖最后由 Omed 于 2020-4-9 16:14 编辑

正确方法:
>>> def j(x):
        zu = []
        t = 1
        while t != 0 :
                t = x//2
                t1 = x%2
                x = t
                zu.append(t1)
        zu.reverse()
        print(zu)

       
>>> j(6)


因为你在每一次循环都进行了一次翻转,第一次循环,zu = ,翻转后依然为0,第二次循环,zu=,翻转后为,第三次循环zu=,翻转后依然为

你自己的方法(只是加入了flag作为标志)
>>> def j(x):
        zu = []
        t = 1
        flag = 1
        while t != 0 :
                t = x//2
                t1 = x%2
                x = t
                zu.append(t1)
                print("第%d次循环,翻转前zu为:"%(flag)+str(zu))
                zu.reverse()
                print("第%d次循环,翻转后zu为:"%(flag)+str(zu))
                flag += 1
        print(zu)

       
>>> j(6)
第1次循环,翻转前zu为:
第1次循环,翻转后zu为:
第2次循环,翻转前zu为:
第2次循环,翻转后zu为:
第3次循环,翻转前zu为:
第3次循环,翻转后zu为:
页: [1]
查看完整版本: 大佬们,为什么reverse()不能翻转纯数字的数组?