2017-01-05 5 views
0

Я рад, что понимаю, почему функция, представленная ниже, выводит None вместо 1, если функция не имеет выход vakud при первом прохождении.Рекурсивная функция, не выводимая заданное значение

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 

Я не понимаю, почему я "не получаю„None“

EDIT:.

Я изменил вторую часть кода в этом и играл больше, но по-прежнему имеют те же проблемы:

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 не прибежал и там никаких проблем, однако, если мой голос не распознан, на своей первой попытки и recurvise части кода активируется после того, как мой голос наконец распознается, программа заканчивается (что означает Появится командная подсказка Python >>>). Поэтому я предполагаю, что это значение null, которое передается.

По-прежнему тупик. :(

ответ

0

Возможно, это не тот ответ, который вы ищете, в частности, потому что «если x в ['hey PC']" НИКОГДА не верен. Единственное условие, в котором возвращается число (и, таким образом, value) является вашим оператором if. Таким образом, скорее всего, оператор if никогда не вводится.

+0

Однако я получаю вывод 1, если функция работает плавно (без вызова рекурсивной части функции). Если I выполните вышеприведенную функцию, удастся получить вывод, не вызывая выходы «Попробовать снова» или «Эй ПК» более одного раза (что указывает на то, что часть рекурсии активируется), я могу получить вывод 1. Надеюсь, вы поймете, что я пытаюсь сказать. – Moondra

Смежные вопросы