即使条件为假,循环也会在内部保留 运行 代码

Loop keeps running code inside even when condition is false

import datetime
from pydub.playback import play
currentDate = datetime.datetime.now()
times = [12, 19, 23] 
minutes = [53, 52, 51]
while True:
        for i in times:
            for j in minutes:
                if(currentDate.hour == i and currentDate.minute == j):
                    # print(os.getcwd())
                    index = minutes.index(j)+1;
                    print(index)
                    announce = AudioSegment.from_mp3(
                        f'{os.getcwd()}\audios\announcement_{index}.mp3')
                    play(announce)

即使 if 块内的条件不为真,此代码仍会继续播放“通告”。任何人都可以告诉我我在这里应用的错误逻辑是什么。任何类型的帮助都会非常有帮助

“时间和分钟都是列表”

所以问题是您没有更新 CurrentDate 变量。 如果您在条件为真时 运行 程序,这将导致无限循环。

所以要解决这个问题,您只需更新该变量即可:

times = [12, 19, 23] 
minutes = [53, 52, 51]
while True:
    # Updating the date every frame
    currentDate = datetime.datetime.now()
            for i in times:
                for j in minutes:
                    if(currentDate.hour == i and currentDate.minute == j):
                        # print(os.getcwd())
                        index = minutes.index(j)+1;
                        print(index)
                    announce = AudioSegment.from_mp3(
                        f'{os.getcwd()}\audios\announcement_{index}.mp3')
                    play(announce)

因为有一个while True。这意味着除非你 break 它,否则它将无限循环。我不知道你为什么想要一个无限循环,但这应该可以解决问题:

import datetime
from pydub.playback import play
currentDate = datetime.datetime.now()
times = [12, 19, 23] 
minutes = [53, 52, 51]

# no while loop here
for i in times:
    for j in minutes:
        if(currentDate.hour == i and currentDate.minute == j):
            # print(os.getcwd())
            index = minutes.index(j)+1;
            print(index)
            announce = AudioSegment.from_mp3(
                f'{os.getcwd()}\audios\announcement_{index}.mp3')
            play(announce)