所以我有一项任务,我需要使用以下内容将inf
多次乘以10来返回x
:
for i in range(...)
所以我的代码的主要部分是:
def g(x):
x = 10.*x
for i in range(308):
return x
如果我输入
>>> g(3.)
>>> 30.0
我希望它能将它迭代308次到我得到inf
的程度。我可以使用一行使用for i in range(..)
中的数字来迭代多次的等式吗?例如:
def g(x):
x = 2.*x
for i in range(3):
# the mystery line I need for it to work
return x
>>> g(4.)
>>> 16.0
但它并没有给我这个。而是返回8.0
我实现它的另一种实际工作方式是使用print。但我不认为它在使用return inf
的作业中使用印刷语句是有效的。
答案 0 :(得分:0)
它没有像你期望的那样迭代的原因是因为return
语句。 return
退出您正在运行的任何过程/函数,并返回给定的值。下面是您的第一个函数的演练,假设它在4
中使用g(4.)
的值调用。
# the start of the function
# x = 10
# this line sets x = 100. I think you can see why.
x = 10. * x
# this sets i = 0 and begins to loop
for i in range(308):
# this IMMEDIATELY returns from the function with the value
# of x. At this point, x = 100. It does not continue looping!
# Without this line, i would be set to 1, 2, 3, ..., 307 as
# you loop through the range. This is why it worked with print.
return x
你想要什么而不是这个会积累重复乘法的价值。假设您希望每次迭代都运行,那么您根本不想在循环中返回任何内容。我不会给你确切的答案,因为这是作业,但我会给你一个提示。您可能不希望缩进return
,因为它是您提供的第二位代码。你可能想要更像这样的东西:
def g(x):
x = 2 * x
for i in range(3):
# { your code here }
# You want to accumulate the value!
return x
答案 1 :(得分:0)
我认为你有正确的部分,只是没有正确安排。尝试这样的事情:
def g(x):
for i in range(308):
x = 10.*x # because we've moved this line into the loop, it gets run 308 times
return x # since we've unindented this line, it runs only once (after the loop ends)
要重复的部分需要在带有for
语句的行之后缩进。你不想重复的东西(比如return
,只能发生一次),不应该在循环中。