未被驯化的甲鱼 发表于 2020-5-9 15:59:54

大佬们!我用递归写十进制转二进制发现几个问题,求解答!

代码如下
import sys
sys.setrecursionlimit(1000000)    #递归一百万层

def f(x):
    global answer                        #answer是一个数组,用来存放算出来的二进制数。这里global加不加都行,不明白为什么
    if x//2 != 0:                                #将x整除2,得到结果两种可能,要么1要么0。再根据1或0去判断要不要继续除下去,记录余数并函数循环调用
      t = x%2
      answer.append(t)
      return f(x//2)
    else:
      answer.append(1)
      return answer.reverse()

x = 7                                        #尝试把7转化为二进制数
answer = []

print(f(x))
print(answer)
print(x)

输出结果
=======
None

7


---------------
虽然输出【1,1,1】答案对了,但是我不明白的是:
为什么print(f(x)),输出是 None?
为什么print(answer)能直接输出函数f(x)里改变后的量【1,1,1】而不是【】,和它一样被设置的 x =7 ,print(x)后却还是7?
我设置的answer=[]和x=7在这段程序里算什么?是全局变量吗?如果是,那么f(x)运行时改变的answer只能存在函数里,我在函数f(x)外print输出应该还是answer=[]和x=7吧?
关于global,它的作用是不是使一个局部变量X发生变化时,全局变量X也跟着它一起变?

------------------------
我的问题有点多,有点不太好意思,若能解答我衷心感谢(没多少鱼币了,也不知道哪里发起悬赏{:10_282:})

qiuyouzhi 发表于 2020-5-9 16:07:18

1,因为列表的大部分方法都没有返回值,所以你最后那个answer.reverse()是不正确的,
而你的代码最后会返回这个,一层又一层,最后还是None。
2,因为你没有在代码中改变x,你只有x//2,但没有赋值给x。
而且,你需要global x才可以改变x。
(列表,元组等数据结构不需要global)
3,和第二题一样,数据结构没有全局,局部这一说,
哪里都能访问这个(除非定义在函数里面)。
4,是的
5,我想要最佳,不想要鱼币{:10_256:}

未被驯化的甲鱼 发表于 2020-5-9 16:33:39

qiuyouzhi 发表于 2020-5-9 16:07
1,因为列表的大部分方法都没有返回值,所以你最后那个answer.reverse()是不正确的,
而你的代码最后会返 ...

明白了,谢谢大佬!我改了一下现在可以直接打印f(x)了
import sys
sys.setrecursionlimit(1000000)

def f(x):
    if x//2 != 0:
      t = x%2
      answer.append(t)
      return f(x//2)
    else:
      answer.append(1)
      answer.reverse()      #这个没有返回值,所以不能把它交给return输出
      return answer

x = 46
answer = []
print(f(x))
print(answer)
print(x)

老八秘制 发表于 2020-5-9 16:34:04

如何发布悬赏:https://fishc.com.cn/thread-168307-1-1.html

老八秘制 发表于 2020-5-9 16:34:50

qiuyouzhi 发表于 2020-5-9 16:07
1,因为列表的大部分方法都没有返回值,所以你最后那个answer.reverse()是不正确的,
而你的代码最后会返 ...

悬赏的最佳是不是不算最佳{:10_245:}

qiuyouzhi 发表于 2020-5-9 16:36:55

老八秘制 发表于 2020-5-9 16:34
悬赏的最佳是不是不算最佳

回答悬赏没有技术值{:10_266:}

老八秘制 发表于 2020-5-9 20:50:11

qiuyouzhi 发表于 2020-5-9 16:36
回答悬赏没有技术值

技术值比鱼币值钱{:10_266:}

qiuyouzhi 发表于 2020-5-9 20:52:50

老八秘制 发表于 2020-5-9 20:50
技术值比鱼币值钱

肯定的{:10_256:}

老八秘制 发表于 2020-5-9 20:53:59

qiuyouzhi 发表于 2020-5-9 20:52
肯定的

技术值能领勋章,鱼币不能(除了最后一个鱼币买的,还不是永久的){:10_266:}

qiuyouzhi 发表于 2020-5-9 20:55:22

老八秘制 发表于 2020-5-9 20:53
技术值能领勋章,鱼币不能(除了最后一个鱼币买的,还不是永久的)

那个勋章要是永久就好了
我准备买一个(我可以买俩{:10_279:})
页: [1]
查看完整版本: 大佬们!我用递归写十进制转二进制发现几个问题,求解答!