【发布时间】:2013-11-27 02:12:54
【问题描述】:
我正在尝试编写一个具有两个输入和一个输出的类。该类每秒调用 10 次。其中一个输入是一个不随时间变化的列表,而另一个输入是随时间变化的。
这个类的输出是输入列表的成员。 该类应如下所示。
import lib601.sm as sm
counter = 0
class FollowFigure(sm.SM):
def __init__(self, waypointsList):
self.waypoints = waypointsList
def getNextValues(self, state, inp):
global counter
sensors = inp
current_point = sensors.odometry.point()
if counter == 0:
while not(self.waypoints[0].isNear(current_point, 0.01)):
return (state, self.waypoints[0])
counter += 1
if counter == 1:
while not(self.waypoints[1].isNear(current_point, 0.01)):
return (state, self.waypoints[1])
counter += 1
if counter == 2:
while not(self.waypoints[2].isNear(current_point, 0.01)):
return (state, self.waypoints[2])
counter += 1
if counter == 3:
while not(self.waypoints[3].isNear(current_point, 0.01)):
return (state, self.waypoints[3])
因此该类必须检查一个随时间变化的条件,如果该条件不满足,则返回 inp[0] 并等待它满足并且不检查其他条件。如果满足 inp1[0] 的条件,则转到下一个 while,并且在此类的下一次调用中,不要检查前一个 while。在过去的 5 个小时里,我一直在思考这个问题,但无法弄清楚如何解决它。它不应该那么难。可能我注意力不够集中。
我尝试为此编写一个 for 循环,但由于在某些情况下此类每秒调用 10 次,因此它没有应有的输出,因为每次调用迭代都会重置。顺便说一句,这个类应该适用于任何有限长度的 inp1。
编辑:上面的代码适用于具有 4 个元素的输入列表。
【问题讨论】:
-
你需要回去重写你的整个方法来实现你的目标。你的代码是我见过的最糟糕的。您永远不会以程序化的方式调用一段时间。当您可以创建一个函数来执行一次时,不确定为什么要重复返回相同的值。底线是,你需要重写。
-
保留已通过条件的项目的列表,然后在每次迭代时检查原始
inp1中不在“已检查”列表中的项目。 -
我真的不明白为什么
while?如果条件不满足,程序将无限循环。 -
@RichardGrant 如果我知道如何编写该函数,我会编写它。
-
请注意,所有这些
while语句实际上都是if语句,因为里面有return语句。所以它总是会在最多一次迭代中打破循环(如果while循环中的条件不满足,可以为0)。
标签: python iteration conditional