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