我正试图用Python中的tkinter制作一个语音助理应用程序,我的代码有两个问题。
--我代码的一个片段:
def listen_to_me():
msg2 = Message(root, text="Listening...", bg='yellow', font=('times', 14, 'italic'))
msg2.pack
msg2.place(x=200, y=220)
with sr.Microphone() as source:
audio = r.listen(source)
global query
query = r.recognize_google(audio, language='en-IN', show_all=True)
if query:
try:
(f"[Me]: {query}")
except:
engine.say("Sorry didn't quite catch that. Please repeat.")
return query
def reply():
while True:
global query
# Logic for executing tasks based on query
if 'wikipedia' in query:
speak('Searching Wikipedia...')
query = query.replace("wikipedia", "")
query = query.replace("search", "")
query = query.replace("for", "")
results = wikipedia.summary(query, sentences=1)
speak(f'According to Wikipedia, {results}')
elif 'open youtube' in query:
speak('Opening Youtube')
webbrowser.open("https://youtube.com")
elif 'open stack overflow' in query:
speak('Opening StackOverflow')
webbrowser.open("https://stackoverflow.com")
elif 'what' in query and 'time' in query:
strTime = datetime.datetime.now().strftime("%H:%M:%S")
speak(f"Sir, The time is {strTime}")
elif 'how are you' or 'what\'s up' in query:
speak('I am doing jolly good, sir.')问题-1:-我得到了输出,但它似乎被困在一个循环中:
[MyAssistant]: Good evening! I am Jarvis. How may I help you today?
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.问题-2:我想把我的查询转换成小写.我试过以下几种方法:
query = query.lower()
错误:
AttributeError: 'list' object has no attribute 'lower'提前感谢!
发布于 2020-06-19 19:43:09
对于第一个问题,错误是由行while True引起的。这只是在一个无限循环中设置。您可能希望用一种更好的方式来构造它,以避免循环中出现这种情况,例如替换
while = True带着
while = (conditional_statement)考虑到您显示的输出确实实现了您想要的结果,您的第二个问题还不清楚。但是你可以做的一种方法是用循环替换字典中的键和值。
for key,val in query['alternative'].items():
key = key.lower()
key = val[0].lower()以上只是一个想法,您必须做什么,以取代您的查询小写字符。
发布于 2020-06-20 09:09:36
问题的解决方案-2:
query 不能简单地使用.lower()方法将转换为字符串类型。这是因为recognize_google() (在SpeechRecognition模块中)是一个列表类型,.lower()只能应用于字符串。为了将查询隐藏为小写,请遵循以下方法:
1.创建另一个字符串变量myStr (例如)
2.初始化myStr = query
3.转换为小写myStr= myStr.lower()
4. Fianlly,return myStr
如果要在另一个函数中使用该字符串,只需初始化any_other_variable_name = myStr
发布于 2021-07-26 15:52:39
对于第一个代码,您可以简单地将while True语句添加到代码的底部,然后在此下面键入run_name of the voice assistant。也要停止循环,只需添加一个if语句,就像您对其他语句所做的那样
命令中的
elif 'stop‘:
说(好的,先生,祝你今天愉快!)
出口(“您在顶部注册的助理的姓名”)
对于第二个问题,我没有给出答案,因为我对此并不那么肯定。此外,@AzyCrw4282 4282已经给出了一个清晰而完美的答案。


https://stackoverflow.com/questions/62471748
复制相似问题