Python 如何仅在执行while语句中的所有子语句后才中断while语句
我有这段代码,我想在Python 如何仅在执行while语句中的所有子语句后才中断while语句,python,loops,time,while-loop,break,Python,Loops,Time,While Loop,Break,我有这段代码,我想在if、elif和elif都在其中逐一执行之后,才能突破它。但是如果我在elif之后有一个break语句,如图所示,那么while循环在执行if之后会中断。 我怎么做 time_end = time.time() + 3 tm_end = time.time() + 6 t_end = time.time() + 13 while time.time() <= t_end: if time.time() <= time_end: chang
if、elif和elif
都在其中逐一执行之后,才能突破它。但是如果我在elif
之后有一个break语句,如图所示,那么while循环在执行if
之后会中断。
我怎么做
time_end = time.time() + 3
tm_end = time.time() + 6
t_end = time.time() + 13
while time.time() <= t_end:
if time.time() <= time_end:
change_state(7)
elif time.time() <= tm_end:
change_state(2)
elif time.time() <= t_end:
change_state(8)
break
time\u end=time.time()+3
tm_end=time.time()+6
t_end=time.time()+13
而time.time()可能的解决方案之一:
time_end = time.time() + 3
tm_end = time.time() + 6
t_end = time.time() + 13
flag = [0, 0, 0]
while time.time() <= t_end:
if time.time() <= time_end:
change_state(7)
flag[0] = 1
elif time.time() <= tm_end:
change_state(2)
flag[1] = 1
elif time.time() <= t_end:
change_state(8)
flag[2] = 1
if sum(flag) == 3:
break
time\u end=time.time()+3
tm_end=time.time()+6
t_end=time.time()+13
flag=[0,0,0]
而time.time()可能的解决方案之一:
time_end = time.time() + 3
tm_end = time.time() + 6
t_end = time.time() + 13
flag = [0, 0, 0]
while time.time() <= t_end:
if time.time() <= time_end:
change_state(7)
flag[0] = 1
elif time.time() <= tm_end:
change_state(2)
flag[1] = 1
elif time.time() <= t_end:
change_state(8)
flag[2] = 1
if sum(flag) == 3:
break
time\u end=time.time()+3
tm_end=time.time()+6
t_end=time.time()+13
flag=[0,0,0]
而time.time()我认为你只需要缩进你的休息时间,就像这样:
time_end = time.time() + 3
tm_end = time.time() + 6
t_end = time.time() + 13
while time.time() <= t_end:
if time.time() <= time_end:
change_state(7)
elif time.time() <= tm_end:
change_state(2)
elif time.time() <= t_end:
change_state(8)
elif time.time() == t_end
break # break when the end of time.time() is reached
time\u end=time.time()+3
tm_end=time.time()+6
t_end=time.time()+13
而time.time()我认为你只需要缩进你的休息时间,就像这样:
time_end = time.time() + 3
tm_end = time.time() + 6
t_end = time.time() + 13
while time.time() <= t_end:
if time.time() <= time_end:
change_state(7)
elif time.time() <= tm_end:
change_state(2)
elif time.time() <= t_end:
change_state(8)
elif time.time() == t_end
break # break when the end of time.time() is reached
time\u end=time.time()+3
tm_end=time.time()+6
t_end=time.time()+13
而time.time()您可能想要这个。请注意,比较符号是颠倒的
counter = 0
while counter != 3:
t = time.time()
if counter == 0 and t >= time_end:
change_state(7)
counter = 1
if counter == 1 and t >= tm_end:
change_state(2)
counter = 2
if counter == 2 and t >= t_end:
change_state(8)
counter = 3
写这篇文章的更简单方法是:
transitions = [time_end, tm_end, t_end]
states = [7, 2, 8]
counter = 0
while counter != 3:
t = time.time()
if t >= transitions[counter]:
change_state(states[counter])
counter += 1
将睡眠(POLL\u RATE)
放入循环中也可能是一个好主意,以防止占用所有CPU繁忙等待时间。您可能希望这样做。请注意,比较符号是颠倒的
counter = 0
while counter != 3:
t = time.time()
if counter == 0 and t >= time_end:
change_state(7)
counter = 1
if counter == 1 and t >= tm_end:
change_state(2)
counter = 2
if counter == 2 and t >= t_end:
change_state(8)
counter = 3
写这篇文章的更简单方法是:
transitions = [time_end, tm_end, t_end]
states = [7, 2, 8]
counter = 0
while counter != 3:
t = time.time()
if t >= transitions[counter]:
change_state(states[counter])
counter += 1
将sleep(POLL\u RATE)
放入循环中也可能是一个好主意,以防止占用所有CPU繁忙的等待时间。您可以使用for
循环在时间增量上迭代,与相应的状态配对,然后使用while
循环不断更改状态,直到时间增量过期:
start = time.time()
for delta, state in (3, 7), (6, 2), (13, 8):
while time.time() - start <= delta:
change_state(state)
start=time.time()
对于delta,在(3,7)、(6,2)、(13,8)中陈述:
while time.time()-start您可以使用for
循环来迭代时间增量,与相应的状态配对,然后使用while
循环来不断更改状态,直到时间增量过期:
start = time.time()
for delta, state in (3, 7), (6, 2), (13, 8):
while time.time() - start <= delta:
change_state(state)
start=time.time()
对于delta,在(3,7)、(6,2)、(13,8)中陈述:
while time.time()-start您可以使用继续
@pppig尝试继续。不起作用。因为它已经在另一个里面了loop@MateenUlhaq但它也不起作用。triedI投票重新打开,因为我没有发现问题不清楚。您希望执行多少次change\u state
?三次?正如当前编写的那样,change\u state
将运行大量次。您可以使用continue
@pppig-trued-continue。不起作用。因为它已经在另一个里面了loop@MateenUlhaq但它也不起作用。triedI投票重新打开,因为我没有发现问题不清楚。您希望执行多少次change\u state
?三次?正如目前所写的,change\u state
将运行大量次。这在功能上与OP的示例(减去中断)不同吗?@MateenUlhaq抱歉,但我没有得到谁是原始海报。好的!功能上的不同之处在于,我的代码只有在所有if
/elif
语句至少执行一次时才会停止执行,而原始海报的代码不会执行。这也不太可能。这在功能上与OP的示例(减去中断)不同吗?@MateenUlhaq抱歉,但我没有得到谁是原创海报。好吧!功能上的区别在于,只有当所有if
/elif
语句至少执行一次时,我的代码才会停止执行,虽然原始海报的代码不正确。这也没什么好运气。这应该与原始帖子做完全相同的事情。@MateenUlhaq原始帖子的代码在第一个“if”语句后中断,该代码将在最后一个“elif”语句后中断,所以它不会做完全相同的事情。@Clarius333这只是在进入最后一个循环后立即中断,并且不会在要求的时间内执行最后一个循环interval@siddharth在这种情况下,在elif time.time()==t_end退出怎么样?如果包含,此循环将在109376次迭代后停止。这应该与原始post执行完全相同的操作。@MateenUlhaq原始post中的代码在第一个“If”语句后中断,此代码将在最后一个“elif”语句后中断,所以它不会做完全相同的事情。@Clarius333这只是在进入最后一个循环后立即中断,并且不会在要求的时间内执行最后一个循环interval@siddharth在这种情况下,在elif time.time()==t_end退出怎么样?如果包含,该循环将在109376次迭代后停止。