【问题标题】:program keeps executing first if condition如果条件,程序继续执行
【发布时间】:2019-06-10 12:25:27
【问题描述】:

我正在尝试在 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()

这是我用来连续重复程序的代码,但是,在第一个 if 条件下,它应该只在输入中有“Hello”、“Hi”时执行。我第一次说“嗨”,如果是有效的,但是当程序再次循环输入另一个输入,比如“你好吗”时,它仍然执行第一个 IF 条件,谁能帮我解决这个问题。谢谢。

【问题讨论】:

  • if 'hello' 立即变为真。你需要试试if 'hello' in x or 'Hello' in x or 'Hi' in x:

标签: python-3.x speech-recognition text-to-speech pyttsx


【解决方案1】:

您在那里以错误的方式使用or。尝试使用此代码:

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

【讨论】:

  • 发生异常时如何回调函数以便程序继续异常。你能帮忙吗
【解决方案2】:

出现问题是因为if 'Hello' 立即变为 True。一旦你有一个为真的条件,它总是会转到 if 条件。

您可以尝试使用bool('Hello') 进行检查。解决方法是分别检查每个字符串。

if ('hello' in x) or ('Hello' in x) or ('Hi' in x):
    something

【讨论】:

  • 请接受@Fedor 的回答。当您有多个字符串时,这绝对是一种更好的方法。
  • 我想在发生异常时再次调用函数但它没有被调用,抛出错误'语音对象不可调用',如何完成它,你能帮忙
  • 您在while True 循环中拥有它。您无需再次调用该函数。只需记录错误和pass。一点建议。您的函数名称和变量具有相同的名称。不要做。它可能会导致您无法预见的错误。
猜你喜欢
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多