Python if、elif、else 链替代方案 [重复]

Posted

技术标签:

【中文标题】Python if、elif、else 链替代方案 [重复]【英文标题】:Python if, elif, else chain alternitive [duplicate] 【发布时间】:2016-05-30 18:42:57 【问题描述】:

我正在使用语音识别库来创建类似 Siri 的程序。我希望将来我可以使用带有 Arduino 的代码来控制我房间周围的东西。这是我的问题:

我已经编写了基本的语音识别代码,但是为了让程序理解某些命令,我​​必须通过很长的 if-elif-elif-elif-else 命令列表来运行语音,这可能会很慢。由于大多数情况下它会导致 else 无法识别命令,因此我需要一个更快的替代方法来替代一长串 if-elif-else 语句。我也在用 tts 引擎和你对话。

这是我目前的代码

import pyttsx
import time


engine = pyttsx.init()
voices = engine.getProperty("voices")
spch = "There is nothing for me to say"
userSaid = "NULL"



engine.setProperty("rate", 130)
engine.setProperty("voice", voices[0].id)


def speak():
    engine.say(spch)
    engine.runAndWait()
def command():
    **IF STATEMENT HERE**

r = sr.Recognizer()
with sr.Microphone() as source:
    r.adjust_for_ambient_noise(source) 
    print("CaSPAR is calibrated")
    audio = r.listen(source)
try:
    userSaid = r.recognize_google(audio)
except sr.UnknownValueError:
    spch = "Sorry, I did'nt hear that properly"
except sr.RequestError as e:
    spch = "I cannot reach the speech recognition service"

speak()
print "Done"

【问题讨论】:

欢迎来到 Stack Overflow。您的问题是太宽泛:可能的答案太多,或者对于这种格式来说,好的答案太长了。请添加详细信息以缩小答案集或隔离可以在几段中回答的问题。见***.com/help/how-to-ask 我们需要更多地了解您的代码如何工作以提供合理的答案 请查看 Aya 为之前提出的类似问题提供的答案:***.com/questions/17166074/… @Falafel 我以前看过这个问题,因为我对 python 比较陌生,所以我不完全理解如何使用这个建议 【参考方案1】:

尝试使用字典设置,其中键是您要测试的值,而该键的条目是要处理的函数。一些关于 Python 的教科书指出,这是一个比一系列 if ... elif 语句更优雅的解决方案,并且可以立即获取条目,而不必测试每种可能性。请注意,由于每个键都可以是任何类型,因此这比 C 中的 switch 语句要好,后者需要 switch 参数并且 case 是整数值。例如。

def default(command)
    print command, ' is an invalid entry'

mydict = 'create':mycreate, 'delete':mydelete, 'update':myupdate

action = mydict.get(command, default)
# set up args from the dictionary or as command for the default.
action(*args)

有趣的一点是Most efficient way of making an if-elif-elif-else statement when the else is done the most? 指出,虽然 get 更“优雅”,但它实际上可能比下面的代码慢。但是,这可能是因为帖子处理的是直接操作而不是函数调用。 YMMV

def default(command)
    print command, ' is an invalid entry'

mydict = 'create':mycreate, 'delete':mydelete, 'update':myupdate

if command in mydict:
    action = mydict.[command]
    # set up args from the dictionary .
    action(*args)
else:
    default(command)

【讨论】:

不要检查键是否存在,而是使用具有默认值的字典的.get 方法,例如无操作 lambda 或通知打印语句。 @cat 完成。这就是为什么我添加了关于设置参数的评论。 @cat 我还指出了一个帖子,就时间而言比较了这两种方法,并将该信息添加到帖子中。

以上是关于Python if、elif、else 链替代方案 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python的 if .else.elif语句详解

python基础--条件语句if else

python 中 if 的用法(if else, if not, elif)

python if elif else

python练习-if-elif-else

python Python if-elif-else语句