嘿,所以我很新的编程一般,我有一个裂缝在一个问题,我发现collatz函数。
经过一番试错,我写的代码如下。
def collatz(number):
if number % 2 == 0:
number = number//2
print(number)
return number
elif number%2 != 0:
number = 3*number + 1
print(number)
return number
n = int(input("plz enter the number:"))
while n != 1:
n = collatz(n)
输出:
plz enter the number:3
10
5
16
8
4
2
1
这段代码是可行的,但我不知道变量值是如何分配的,因为在运行这个程序后,我可以看到在shell中 "number = 3",但 "n = 1",为什么会这样?number "不应该也等于1吗?因为我在函数中返回的是number的值?
也只是为了澄清我的概念,在初始时刻,当我输入n = 3,在那一刻n = number = 3,那么这个返回的 "number "的值是否会自动成为新的n值,当我在while循环中调用它?只是想检查一下,因为我有点弱,当它涉及到做需要传递参数的东西。
编辑。
为什么这个例子和刚才回答的不一样?
def testfile(number):
number = number -1
print(number)
return number
n = int(input("enter:"))
while n != 2:
n = testfile(n)
输出。
enter:5
4
3
2
当输入为n=5时,为什么数字=3而不是下面解释的5?
你的程序是这样工作的。
你要求一个数字,并把它存储在变量 "collatz(number) "中。n
.
你打开一个循环,一直到 n
是 1
每次循环重复时,你都会调用你的函数并传递一个n的copy。n
不会改变。
复制被称为 number
. 你用你的小把戏来表演 number
,将其输出到屏幕上,而令人困惑的是:你返回了一个关于 数目 回到你的循环。那它去哪了?它直接回到 n
. 这将覆盖任何在 n
以前。