Пишу голосого помощника

Я пытаюсь написать написать простую в реализации для своего проекта программу, в которой когда я говорю, например я здороваюсь с программой, она отвечала мне в ответ, в первом прототипе я ее вообще не слышу, сейчас же у меня почему-то программа не хочет узнавать функцию hello_margo

Сейчас же я даже не могу ее вызвать.

Фрагмент функции из приветствия

def hello_margo():
    global engine
    hello = ['Привет, я ваш голосовой помощник. Иногда я торможу. Я еще в разработке. Ну что приступим?', 'Привет','Я рада вас снова слышать','Приветствую мой повелитель','Вечер в хату','Привет, чем могу быть полезна?','Да, я вас слушаю','Чем могу помочь?']
    z = random.choices(hello)
    engine.say(z)

Сам код на python

import pyttsx3
import os
import speech_recognition as sr
import random

engine = pyttsx3.init();
text = ''
task_number = 0

def talk(words):
    print(words)
    os.system("say " + words)

commands = ['привет']

cmds = {
    'привет' : hello_margo,
    'добрый день' : hello_margo
}

def hello_margo():
    global engine
    hello = ['Привет, я ваш голосовой помощник. Иногда я торможу. Я еще в разработке. Ну что приступим?', 'Привет','Я рада вас снова слышать','Приветствую мой повелитель','Вечер в хату','Привет, чем могу быть полезна?','Да, я вас слушаю','Чем могу помочь?']
    z = random.choices(hello)
    engine.say(z)

def listen_and_speek():
    r = sr.Recognizer()

    with sr.Microphone() as source:
        print("Говорите")
        r.pause_threshold = 1
        r.adjust_for_ambient_noise(source, duration=1)
        audio = r.listen(source)
    try:
        text = r.recognize_google(audio, language="ru-RU").lower()
        print("Вы сказали " + text)
    except sr.UnknownValueError:
        talk("Я вас не поняла")
        text = listen_and_speek()

    return text

def cmd_start():
    global cmds, engine, task_number, text
    print(text)
    if (text in cmds):
        if (text != 'привет'):
            case = ['Секундочку', 'Сейчас','Вот ваш результат', 'Выполняю',]
            engine.say(random.choices(case))
        cmds[text]()
    elif text == '':
        pass
    task_number += 1
    if (task_number % 10 == 0):
        engine.say('Что-нибудь еще?')
        engine.runAndWait()
        engine.stop()
        
def main():
    global text, talk, cmd_start
    try:
        talk()
        if text != '':
            cmd_start()
            i = 0
    except(UnboundLocalError):
        pass
    except(TypeError):
        pass

while True:
    main()       


'''engine.say("Я сейчас говорю написанный текст");
engine.runAndWait() ;'''

Когда я пытаюсь запустить код у меня выходит ошибка

Traceback (most recent call last):
  File "/Users/lmistie/Desktop/My_Project/Pytnon/test-python3/./test-1.py", line 17, in <module>
    'привет' : hello_margo,
NameError: name 'hello_margo' is not defined

Как это исправить?


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

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

Поменять местами def hello_margo(): ... и cmds = {...}. А то вы на функцию ссылаетесь до того как её объявили

→ Ссылка