ошибка пайтон выполняет оба условия

Рейтинг: 0Ответов: 3Опубликовано: 15.02.2023

в моем скрипте выполняется сразу два условия под if но он должен либо включить ютуб когда говорю "включи youtube" либо новости когда говорю "включи новости"

заранее спасибо

вот скрипт

while True:
    # старт записи речи с последующим выводом распознанной речи
    # и удалением записанного в микрофон аудио
    voice_input = record_and_recognize_audio()
    os.remove("microphone-results.wav")
    print(voice_input)

    # отделение комманд от дополнительной информации (аргументов)
    voice_input = voice_input.split(" ")
    command = voice_input[0]


    if command.find("youtube",6,14) < 7:
         webbrowser.open("https://www.youtube.com/", new=2)      
    else:
        print("не понял")

    if command.find("новости",6,14) < 7:
         webbrowser.open("https://ria.ru/?ysclid=le5gjg2hvz944036307", new=2)      
    else:
        print("не понял")
           

Ответы

▲ 2Принят
voice_input = 'включи youtube'
_, command = voice_input.split()


if command == "youtube":
    print("https://www.youtube.com/")
elif command == "новости":
    print("https://ria.ru/?ysclid=le5gjg2hvz944036307")
else:
    print("не понял")

#2
voice_input = "включи новости"
if "youtube" in voice_input:
    print("https://www.youtube.com/")
elif "новости" in voice_input:
    print("https://ria.ru/?ysclid=le5gjg2hvz944036307")
else:
    print("не понял")

#3
dct ={"youtube": "https://www.youtube.com/", "новости":"https://ria.ru/?ysclid=le5gjg2hvz944036307"}
txt =dct[command] if command in dct else "не понял"
    
print(txt)
▲ 1

Из за того что у вас 2 условия if соответственно и происходит 2 независимые проверки, объедините их:

if command.find("youtube",6,14) < 7:
    webbrowser.open("https://www.youtube.com/", new=2)
elif command.find("новости",6,14) < 7:
    webbrowser.open("https://ria.ru/?ysclid=le5gjg2hvz944036307", new=2)
else:
    print("не понял")
▲ 0
if command.find("youtube",6,14) < 7:

У вас довольно странные проверки. В случае, если find не найдёт искомую подстроку, он вернёт значение -1, которое, конечно же, меньше чем 7, и ваше условие будет выполнено. Тоже самое со вторым условием.

Вы всё-таки что определяете - что искомая подстрока обязательно должна идти с 6-й позиции, судя по тому, какие вы задали параметры? Тогда и проверяйте именно это:

if command.find("youtube",6,14) == 6:

Или можно просто добавить проверку, что получилось не -1:

result = command.find("youtube",6,14)
if 0 <= result < 7: