我最初对此代码有疑问,因为我错过了' n ='在最后一行代码中,因此陷入了无限循环。
此时,虽然我明白需要纠正的是什么,但我不明白为什么。为什么不能' collatz(n)'是否足以调用该函数并使用n作为其变量?如果有人能用简单的术语解释这个(初学者),我真的很感激。
def collatz(number):
if number % 2 == 0:
print (number // 2)
return number // 2
elif number % 2 == 1:
print (3 * number + 1)
return 3 * number + 1
print ('Please enter a number.')
n = int(input())
while n != 1:
n = collatz(n)
答案 0 :(得分:1)
在Python中,函数接受一个或多个参数,返回单个值或对象。大多数情况下,他们不修改他们的参数(实际上你的collatz
函数不会尝试修改它的参数。)
例如,此函数接受变量x,并返回x ** 2。
def f(x):
return x**2
此函数不会修改x,并且返回值不会自动分配给x。自动赋值给x通常是无益的,如果你的函数接受了多个参数 - 哪一个应该得到返回结果,那就不清楚该怎么办?
您可以通过各种方式调用此函数,但如果您想对结果执行某些操作,则必须将其存储到变量中或立即使用它:
y = 2
z = f(y)
z = f(2)
y = 2
print(f(y))
请注意,如果您将函数f
视为将其参数转换为其他参数并将其返回的对象,则所有这些都是有意义的,但如果您希望f
为f(2)
,则所有这些都没有意义修改其参数(然后CREATE TABLE dbo.randomitems (namesused nvarchar(50))
CREATE TABLE dbo.randomlist (namesused nvarchar(50))
CREATE TABLE dbo.randoms (Names nvarchar(50))
insert into dbo.Randoms (Names) values ('a'), ('u'), ('p'), ('g'),
('j'), ('k'), ('l'), ('t')
必须以某种方式在后续引用期间将数字2转换为平均值4)。
对于它的价值,即使你用函数内部的新值替换其中一个参数,也不会改变函数外部相应变量的值。这是因为函数内的变量只指向对应的值或对象。如果为变量赋值,则函数中的局部变量现在将指向新值,但函数外部的原始变量仍指向旧值。另一方面,您有时可以修改基础值或对象,而不是创建新对象并将局部变量指向它。例如,将项添加到列表或字典将修改基础对象,并且将在您的函数外部显示 。
但是你的collatz函数没有这些 - 它只是计算一个新值并返回它。如果要对该值执行任何操作,则必须显式存储函数调用的结果。它不会自动存储在参数变量中。
答案 1 :(得分:0)
将变量作为参数传递给函数时,变量的副本将发送到函数而不是变量本身。 所以在你的情况下,n_copy(例如)被发送到你的函数而不是n。 现在当你在函数中修改它时它仍然在函数的范围内(只能由函数访问)而不是主程序。 因此,当函数结束时,n没有任何反应,因为修改了n的副本。
现在我们来看看返回功能。由于上述问题,存在返回功能。这将从函数返回一个值到主程序。 在函数中修改n时,需要将修改后的值返回到主程序。 一旦你将它返回到主程序,它必须存储在一个变量中,在你的情况下它是n。
当你开始学习Python时,你应该阅读有关命名空间和范围的内容。 这是谷歌搜索的第一个链接 https://matthew-brett.github.io/teaching/global_scope.html