Python 我如何构造这个while循环,以便它检查两个条件,并在必要时维护它
我这里有这个密码Python 我如何构造这个while循环,以便它检查两个条件,并在必要时维护它,python,python-3.x,Python,Python 3.x,我这里有这个密码 def step(self, joint_values): """ Step function which publishes actions and evaluates state/reward. Args: action: takes an action (Int) as input. Value from 0-6 Returns: State after executed action, reward a
def step(self, joint_values):
"""
Step function which publishes actions and evaluates state/reward.
Args:
action: takes an action (Int) as input. Value from 0-6
Returns:
State after executed action, reward after executed action and done,
which is a bool, True or False depending on if episode is done.
"""
self.iterator += 1
self._coll = self.observation_callback_collision()
coll_force = self._coll.wrench.force.x
if coll_force >= 150 or coll_force <= -150:
self.reset_robot2.call()
self.reward_coll = -0.5
self.collided += 1
print("#############Collision##############")
rospy.sleep(1)
#print("ACTION", joint_values)
else:
i = 0
while i<=1000:
self.traj.header.stamp = rospy.Time.now()
action = JointTrajectoryPoint()
action.positions = joint_values
#print("W", action.positions)
action.time_from_start = rospy.Duration(0.7)
self.traj.points = []
self.traj.points.append(action)
#rospy.sleep(4.5)
self.action_pub.publish(self.traj)
i +=0.1
def步长(自身、关节_值):
"""
Step函数,用于发布操作并评估状态/奖励。
Args:
操作:将操作(Int)作为输入。值从0到6
返回:
执行行动后的状态、执行行动后的奖励和完成,
哪个是布尔,对还是错取决于这一集是否完成。
"""
self.iterator+=1
self.\u coll=self.observation\u callback\u collision()
coll_力=自身。coll.扳手力。x
如果要检查循环中的多个条件时,coll_-force>=150或coll_-force,则可以使用累加标志指示循环是否应终止。还有其他选项,例如break
或将i
设置为超出范围的值,但为了可读性,最好使用标志:
is_running=True
当_正在运行时:
#在这里做一些事情,计算coll_力
i+=0.1
正在运行=正在运行且(coll_力>-150且coll_力<150)
我喜欢艾蒂安的答案。我会建议你按照他的建议来组织你的职能。或者,这里是对您的第一次尝试的一个修改,它应该完全按照您希望它做的来做
- 我添加了一个
reset\u one
状态,作为if
语句要满足的第二个条件。如果调用了一次If
,它将被设置为true,并且不允许调用If
捕获,只允许调用else
- 或者,如果允许一定量的重置,可以使用我注释掉的
reset\u count
变量
def步长(自身、关节_值):
self.iterator+=1
self.\u coll=self.observation\u callback\u collision()
coll_力=自身。coll.扳手力。x
#添加已重置布尔状态。
重置_一次=错误
#重置计数=0#可选。
当我打招呼的时候。你的解决方案有什么问题?问题是,当我运行它时,如果“if”条件为真,那么它会在if条件本身中不断循环,也就是说,机器人会重置几次,但我想要的只是在第二个代码中重置机器人一次,但在第一个if语句的结尾处break
。否则,如果10000次的话,它就会变成那样。
def step(self, joint_values):
self.iterator += 1
self._coll = self.observation_callback_collision()
coll_force = self._coll.wrench.force.x
while i<=1000:
if coll_force >= 150 or coll_force <= -150:
self.reset_robot2.call()
self.reward_coll = -0.5
self.collided += 1
print("#############Collision##############")
rospy.sleep(1)
else:
self.traj.header.stamp = rospy.Time.now()
action = JointTrajectoryPoint()
action.positions = joint_values
#print("W", action.positions)
action.time_from_start = rospy.Duration(0.7)
self.traj.points = []
self.traj.points.append(action)
self.action_pub.publish(self.traj)
i +=0.1