@Riders

Не могу добавить функцию калькулятора для ассистента кеша от хауди хо(ошибка в коде)?

Взял асистента КЕША от хауди хо, захотел добавить калькулятор и конвертор но вышла ошибка, было такое что он работал но на другие команды кроме конвертора не работал, впрочем ошибка как и на конверторе так и на калькуляторе такая же, если подскажите решения сам попробую исправить ошибку на конверторе валюты, главное что бы он после выполнения подсчёта реагировал дальше на разные команды, не знаю как сделать, отдельный код для калькулятора делать не хочу, тк-как мне нужно что-бы он переходил на калькулятор посчитал и сразу же вернулся к остальным командам, а не застрял на калькуляторе,надеюсь сможете помочь в моём рукожопском коде)
spoiler
# Голосовой ассистент КЕША 1.1 BETA
import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime
import win32com.client as wincl
import webbrowser
import sys
import random
from currency_converter import CurrencyConverter
import functions

 
# настройки
opts = {
    "alias": ('кеша','кеш','инокентий','иннокентий','кишун','киш',
              'кишаня','кяш','кяша','кэш','кэша'),
    "tbr": ('', '', 'покажи', 'сколько', '', 'как','сколько','поставь','переведи', "засеки",'запусти','сколько будет'),
        "cmds": {
    "ctime": ('текущее время', 'сейчас времени', 'который час', 'время', 'какое сейчас время'),
    'startStopwatch': ('запусти секундомер', "включи секундомер", "засеки время"),
    'stopStopwatch': ('останови секундомер', "выключи секундомер", "останови"),
    "stupid1": ('расскажи анекдот', 'рассмеши меня', 'ты знаешь анекдоты', "шутка", "прикол"),
    "calc": ('прибавить','умножить','разделить','степень','вычесть','поделить','х','+','-','/'),
    "shutdown": ('выключи', 'выключить', 'отключение', 'отключи', 'выключи компьютер'),
    "conv": ("валюта", "конвертер","доллар",'руб','евро'),
    "Youtube": ("открой ютуб", "ютуб", "youtube", "Открой youtube"),
    "Pozdrav": ("поздравь","поздравить"),
    "deals": ("дела","делишки", 'как сам', 'как дела'),
    "Poka": ("Пока","До свидания", 'Прощай', 'бб'),
    "Radio": ("Музыка","Включи музыку", 'Включи Радио', 'Включи песню'),
    "google": ("гугл","браузер", 'Запусти браузер', 'Запусти гугл', "Запусти Google", 'Открой Google'),
    "Povtori": ("Повтори","Произнеси", 'Скажи', ''),
    "pogoda": ("Какая Погода","Покажи погоду", 'Погода', 'Сегодня солнце?'),
    "zakroigogle": ("Закрой гугл","Закрой Google", 'Закрой Браузер', ""),
    "sozdatel": ("Кто твой создатель?","Как зовут твоего создателя?", 'кто разработчик?', ""),
    "zakroimuziky": ("Останови музыку","выключи музыку", 'вырубай музыку', ""),
    "vrazrabotke": ("","", '', "")
    }
}


# функции
def speak(what):
    print(what)
    speak = wincl.Dispatch("SAPI.SpVoice")
    speak.Speak(what)

 
def callback(recognizer, audio):
    try:
        global voice
        voice = recognizer.recognize_google(audio, language = "ru-RU").lower()
        print("[log] Распознано: " + voice)
    
        if voice.startswith(opts["alias"]):
            # обращаются к Кеше
            cmd = voice
 
            for x in opts['alias']:
                cmd = cmd.replace(x, "").strip()
            
            for x in opts['tbr']:
                cmd = cmd.replace(x, "").strip()
            
            # распознаем и выполняем команду
            cmd = recognize_cmd(cmd)
            execute_cmd(cmd['cmd'])
 
    except sr.UnknownValueError:
        print("[log] Голос не распознан!")
    except sr.RequestError as e:
        print("[log] Неизвестная ошибка, проверьте интернет!")
 
def recognize_cmd(cmd):
    RC = {'cmd': '', 'percent': 0}
    for c,v in opts['cmds'].items():
 
        for x in v:
            vrt = fuzz.ratio(cmd, x)
            if vrt > RC['percent']:
                RC['cmd'] = c
                RC['percent'] = vrt
    
    return RC
 
def execute_cmd(cmd):
    # сказать текущее время
    if cmd == 'ctime':
        now = datetime.datetime.now()
        speak("Сейчас " + str(now.hour) + ":" + str(now.minute))

    # воспроизвести радио
    elif cmd == 'Radio':
        music = ("D:\\Python\\Kesha\\music\\zapomni-derevya-padayut-stoya.mp3","D:\\Python\\Kesha\\music\\zapomni-kozhura-tik-tok.mp3","D:\\Python\\Kesha\\music\\maks-korzh-gnutsya-strely-rvutsya-strely-gnutsya-strely-nad-golovoj.mp3","D:\\Python\\Kesha\\music\\zapomni-ya-so-svoej-duri-tebya-poceluyu.mp3")
        os.system(random.choice(music))
        return RC
#Начало ошибок в коде
      elif cmd == "calc":
      def calc(cmd):
       try:
        list_of_nums = voice.split()
        num_1,num_2 = int((list_of_nums[-3]).strip()), int((list_of_nums[-1]).strip())
        opers = [list_of_nums[0].strip(),list_of_nums[-2].strip()]
        for i in opers:
            if 'дел' in i or 'множ' in i or 'лож' in i or 'приба' in i or 'выч' in i or i == 'x' or i == '/' or i =='+' or i == '-' or i == '*':
                oper = i
                break
            else:
                oper = opers[1]
        if oper == "+" or 'слож' in oper:
            ans = num_1 + num_2
        elif oper == "-" or 'выче' in oper:
            ans = num_1 - num_2
        elif oper == "х" or 'множ' in oper:
            ans = num_1 * num_2
        elif oper == "/" or 'дел' in oper:
            if num_2 != 0:
                ans = num_1 / num_2
            else:
                speak("Делить на ноль невозможно")
        elif "степен" in oper:
            ans = num_1 ** num_2
            speak("{0} {1} {2} = {3}".format(list_of_nums[-3], list_of_nums[-2], list_of_nums[-1], ans))
   		except:
            speak("Скажите, например: Сколько будет 5+5?")
#Конец ошибок 
    else:
        print('Команда не распознана, повторите!')
# запуск
r = sr.Recognizer()
m = sr.Microphone(device_index = 1)
 
with m as source:
    r.adjust_for_ambient_noise(source)
 
speak_engine = pyttsx3.init()
 
# Только если у вас установлены голоса для синтеза речи!
voices = speak_engine.getProperty('voices')
speak_engine.setProperty('voice', voices[4].id)
 
# forced cmd test
speak("Мой разработчик не научил меня анекдотам ... Ха ха ха")
 
#speak("Добрый день, повелитель")
#speak("Кеша слушает")
 
#stop_listening = r.listen_in_background(m, callback)
#while True: time.sleep(0.1) # infinity loop
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы