Не работает код на 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 шт):
Во-первых вместо конструкции:
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 себя ведёт и срабатывает уже просто на совпадении слова агафья в сравниваемых фразах, и не важно что там дальше вообще.