2017-01-05 18 views
0

関数が最初の実行時に出力を持たない場合、以下の関数が1の代わりにNoneを出力しているように見えることがわかりました。再帰関数が意図した値を出力しない

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 

私はなし "mはなっていない『なぜ私は理解していない』

EDIT:。

私はこれにコードの2番目の部分を変更し、周りの人がプレイしましたが、まだ同じ問題を抱えているしました:私の声は、その最初の試みで認識されている場合は

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

おそらく、あなたが探している答えではないかもしれませんが、 "一般的に" [hey PC ']のxが絶対に真ではないからです。値は)if文である可能性が高いので、ifステートメントは決して入力されません。

+0

しかし、関数が円滑に実行されると(関数の再帰部分を呼び出さずに)出力が1になります。上記の関数を実行し、 '再試行 'や' Hey PC'出力を何度も呼び出さずに出力を得ることができます(再帰部分が機能していることを示します)、出力を得ることができます1. あなたは私が何を言おうとしているのか理解できますように。 – Moondra

関連する問題