大佬们!我用递归写十进制转二进制发现几个问题,求解答!
代码如下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:}) 1,因为列表的大部分方法都没有返回值,所以你最后那个answer.reverse()是不正确的,
而你的代码最后会返回这个,一层又一层,最后还是None。
2,因为你没有在代码中改变x,你只有x//2,但没有赋值给x。
而且,你需要global x才可以改变x。
(列表,元组等数据结构不需要global)
3,和第二题一样,数据结构没有全局,局部这一说,
哪里都能访问这个(除非定义在函数里面)。
4,是的
5,我想要最佳,不想要鱼币{:10_256:} 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) 如何发布悬赏:https://fishc.com.cn/thread-168307-1-1.html qiuyouzhi 发表于 2020-5-9 16:07
1,因为列表的大部分方法都没有返回值,所以你最后那个answer.reverse()是不正确的,
而你的代码最后会返 ...
悬赏的最佳是不是不算最佳{:10_245:} 老八秘制 发表于 2020-5-9 16:34
悬赏的最佳是不是不算最佳
回答悬赏没有技术值{:10_266:} qiuyouzhi 发表于 2020-5-9 16:36
回答悬赏没有技术值
技术值比鱼币值钱{:10_266:} 老八秘制 发表于 2020-5-9 20:50
技术值比鱼币值钱
肯定的{:10_256:} qiuyouzhi 发表于 2020-5-9 20:52
肯定的
技术值能领勋章,鱼币不能(除了最后一个鱼币买的,还不是永久的){:10_266:} 老八秘制 发表于 2020-5-9 20:53
技术值能领勋章,鱼币不能(除了最后一个鱼币买的,还不是永久的)
那个勋章要是永久就好了
我准备买一个(我可以买俩{:10_279:})
页:
[1]