首页 > 解决方案 > 循环正在从循环外获取数据

问题描述

完整代码在这里:https ://repl.it/repls/UnevenLovingDecagons

带有colony_size =(randrange(50,150))的第29行在循环之外

然后在第 42 行循环开始。 Colony_size也在第 45 行。我希望Colony_size只受第 29 行的影响一次。在第二轮循环中,我希望 Colony_size 仅受循环内部发生的事情的影响。我该怎么做?

部分代码如下:

colony_size=(randrange(50,150))

上面的那个还在循环之外 colony_size=(colony_size+immigrants)-die 这个在里面 enter code here enter code here enter code here

标签: pythonloops

解决方案


您正在查看的概念是scope。循环在 python 中没有自己的范围,为什么在这个问题中被问到:Scoping in Python 'for' loops

执行以下代码后:

x = 1
i = 1
for i in (2,3,4,5):
    x = i

x 和 i 都将包含 5。如果在任何其他类型的循环中设置或更改它们,情况也是如此。

有几种方法可以控制范围。最常见的是您没有在代码中使用的函数。它们的变量包含在它们自己的范围内,您必须显式地将变量传入和传出它们(使用 return 关键字)。您也可以考虑comprehensions,尽管它们的变量在早期版本的 python 中的包含方式不同。

更具体地说,在您的代码中..您可以考虑将while True循环中的所有内容放入一个函数中..(以 my_function 为例)

while True:
     my_function(colony_size)

或类似的东西。然后它会在下次运行时使用原始的colony_size(因为你没有返回它)

当然,也许这里更简单的选择是只使用不同的变量名。


推荐阅读