递归函数不输出预期值

时间:2017-01-05 06:44:18

标签: python-2.7 function recursion speech-recognition

如果函数在第一次运行时没有vakud输出,我很高兴理解为什么下面的函数似乎输出None而不是1

import win32com.client
BING_KEY = "XXXXXXXX"
import speech_recognition as sr
import win32com.client as wincl

s = sr.Recognizer()

def hey_pc():
    print(" Hey PC = Command")
    with sr.Microphone() as source:
          audio = s.listen(source)
          try:
               x= (s.recognize_bing(audio, key=BING_KEY))
               if x in ['hey PC']:
                return 1
               else: hey_pc()
          except:
               print('Try again')
               hey_pc()




t = hey_pc()
print t

如果函数在第一次运行时输出,我得到以下输出:

Hey PC == Command 1

但是如果它调用它的递归属性,我的最终输出为None

 Hey PC == Command
 Hey PC == Command
 Hey PC == Command
 Hey PC == Command
None

或者

 Hey PC == Command
 Try again
 Hey PC == Command
 Hey PC == Command
 None

我不明白为什么我“没有”。“

编辑:

我已将代码的第二部分更改为此并且更多地播放但仍然存在同样的问题:

t =hey_pc()

if t == 1:

        speak = wincl.Dispatch("SAPI.SpVoice")
        speak.Speak("This is the pc voice speaking")
        import automation
        automation.Apply_Command()
else:
        hey_pc()

如果我的声音在第一次尝试时被识别,if t==1下的代码就会运行并且没有任何问题,但是如果我的声音在第一次尝试时未被识别并且重新启动部分代码被激活,那么一旦我的语音最终被识别,程序刚刚结束(意味着Python命令提示符>>>再次弹出)。所以我假设它是传递的空值。

仍然难倒。 :(

1 个答案:

答案 0 :(得分:0)

可能不是你正在寻找的答案,特别是,但通常是因为“如果在['嘿PC']中的x”永远不是真的。返回数字(从而设置值)的唯一条件是if语句。所以,很有可能,if语句永远不会进入。