Python:在范围(..)迭代中乘以'

时间:2016-09-23 00:35:43

标签: python python-3.x

所以我有一项任务,我需要使用以下内容将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的作业中使用印刷语句是有效的。

2 个答案:

答案 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,只能发生一次),不应该在循环中。