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次迭代后停止。