программа продолжает выполняться первым, если условие - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь создать приложение для распознавания речи на python, все работает нормально, но, когда я выполняю программу, первое условие If всегда выполняется независимо от того, какой ввод.

import speech_recognition as sr
from gtts import gTTS
import os
from google_speech import Speech
import webbrowser

def speech():
    while True:
        try:
            with sr.Microphone() as source:

                r = sr.Recognizer()
                audio = r.listen(source,timeout=3, phrase_time_limit=3)
                x = r.recognize_google(audio)
                print(x)
                if 'hello' or 'Hello' or 'Hi' in x:
                    speech=Speech('Hello,How are you?','en')
                    speech.play()           

                    print('Input: ',x)
                    print('output: Hello,How are you?',)

                elif 'omkara' or 'Omkara' in x:
                    speech=Speech('Playing Omkara song on Youtube','en')
                    speech.play()

                    webbrowser.get('/usr/bin/google-chrome').open('https://youtu.be/NoPAKchuhxE?t=21')

        except sr.UnknownValueError:
            print("No clue what you said, listening again... \n")
            speech()


if __name__ == '__main__':
    print('Executine Voice based commands \n')
    speech()

вот мой код, который я использовал для непрерывного повторения программы, но, во-первых, если условие, оно должно выполняться только при наличии «Hello», «Hi» на входе. В первый раз, когда я говорю «Привет», если это действительно так, но когда программа повторяет цикл с другим вводом, таким как «как дела», она все равно выполняет первое условие ЕСЛИ, может кто-нибудь, пожалуйста, помогите мне с этим. Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Проблема возникает из-за того, что if 'Hello' мгновенно становится Истиной. Если у вас есть условие, которое является истинным, оно всегда будет переходить к условию if.

Вы можете попробовать проверить это, используя bool('Hello'). Решение состоит в том, чтобы проверить каждую строку отдельно.

if ('hello' in x) or ('Hello' in x) or ('Hi' in x):
    something
2 голосов
/ 10 июня 2019

Вы используете or неправильно там. Попробуйте использовать этот код:

if any(check in x for check in ('hello', 'Hello', 'Hi')):
...