Не работает код на Python. Нужна ваша помощь!

Всем привет, при написании некого подобия на голосового ассистента я столкнулся с проблемой: не корректно работает код в файле с функциями голосового ассистента. Ошибок никаких не выдаёт, проблема в структуре кода. Вот код:

import pyttsx3
import random
import datetime
import weather
import webbrowser
import anekdot
import randompypy
import os
from fuzzywuzzy import fuzz
from fuzzywuzzy import process



#переменная со временем
time = str(datetime.datetime.now())

def makeSomething(task):

    engine = pyttsx3.init()


    q1 = fuzz.token_sort_ratio('агафья привет', task)
    if q1 >= 85:
        r1 = (random.choice(['Привет!', 'Приветик!', 'Приветствую!']))
        engine.say(r1)
    else:
        pass


    q2 = fuzz.WRatio('агафья сколько времени который час', task)
    if q2 >= 70:
        engine.say("Сейчас " + time[11] + time[12] + '' + time[14] + time[15] + '')
        print (time)
    else:
        pass

    q3 = fuzz.token_sort_ratio('агафья какая сейчас погода', task)
    if q3 >= 80:
        engine.say('Запускаю навык')
        weather.get_weather()
    else: 
        pass

    q4 = fuzz.WRatio('агафья открой вк VK Вконтакте', task)
    if q4 >= 70:
        engine.say("открываю")
        webbrowser.open('https://vk.com', new=2)
    else: 
        pass

    q5 = fuzz.WRatio('агафья расскажи анекдот', task)
    if q5 >= 70:
        anekdot.anekdot()
    else: 
        pass

    q6 = fuzz.WRatio('агафья спасибо спасибки большое спасибо', task)
    if q6 >= 65:
        engine.say("Всегда пожалуйста")
    else: 
        pass

    q7 = fuzz.WRatio('агафья подбрось монетку брось монетку', task)
    if q7 >= 65:
        engine.say("Подкидываю")
        randompypy.orel_reshka()
    else: 
        pass

    q8 = fuzz.WRatio('агафья выключи пк компьютер ноутбук пк компьютер', task)
    if q8 >= 65:
        engine.say("Хорошо, через 10 секунд ваш компьюетр будет выключен.")
        #os.system("shutdown /s /t 10")
    else: 
        pass

    q9 = fuzz.WRatio('агафья 1', task)
    if q9 >= 70:
        engine.say("")
    else: 
        pass


    q10 = fuzz.WRatio('агафья 2', task)
    if q10 >= 70:
        engine.say("")
    else: 
        pass

    q12 = fuzz.WRatio('агафья 3', task)
    if q12 >= 70:
        engine.say("")
    else: 
        pass

    q13 = fuzz.WRatio('агафья python', task)
    if q13 >= 100:
        engine.say("Python ван лав ХЫЫЫ")
    else: 
        pass

    q14 = fuzz.WRatio('агафья как дела делишки у тебя', task)
    if q14 >= 65:
        engine.say(random.choice(['У меня всё хорошо', 'Всё отлично!', 'У меня всё замечательно']))
    else: 
        pass


    engine.runAndWait()

Сейчас код работает неправильно, когда в переменной "task" находится "агафья привет" (например), то при выполнении кода начинают срабатывать всё, что я здесь прописал, т.е все срабатывает по пордку. P.S. Объяснил как-то криво, но надеюсь вы поняли :)


Ответы (1 шт):

Автор решения: CrazyElf

Во-первых вместо конструкции:

if condition1:
    do_something1

if condition2:
    do_something2

if condition3:
    do_something3

Используйте конструкцию:

if condition1:
    do_something1

elif condition2:
    do_something2

elif condition3:
    do_something3

Тогда у вас выполнится только первая из веток, чьё условие сработает, а не все ветки с выполнившимся условием.

А во-вторых видимо WRatio тут не очень подходящая мера похожести, попробуйте другие метрики и может тут вообще пересечение множеств слов лучше подойдёт для проверки. В общем, нужно поиграться вариантами. У вас слишком оптимистично WRatio себя ведёт и срабатывает уже просто на совпадении слова агафья в сравниваемых фразах, и не важно что там дальше вообще.

→ Ссылка