是否可以有多个'if / elif'语句但只有一个结果?

时间:2013-09-17 10:57:32

标签: python

是否可以获得多个if / elif语句来提供一个结果? 例如:

action = input ("would you like to walk or run? ")

我怎么能够做出多个答案,例如“run”或“Run”给我相同的结果,而不必复制/粘贴代码,如果/ elif语句?我可以编写代码来使用多个'if'语句来提供一个结果吗?

4 个答案:

答案 0 :(得分:7)

在与目标进行比较时,只需更改action的大小写

if action.lower() == "run":

或者,如果您的条件不像您描述的那么简单,您可以使用@Tim的解决方案或更好地使用字典查找

action_item = {
'run':do_it_fast
'sprint':do_it_fast
'amble':do_it_slowly
'walk':do_it_slowly
'default':do_default
}

action_item.get(action.lower(), 'default')()

注意它的主观性,但我阅读和维护字典而不是多个if-then与元组列表的经验更容易。

答案 1 :(得分:4)

在你的情况下,我会选择@ Abhijt的(第一个)答案。在一般情况下,要允许几个不同的字符串,您可以执行以下操作:

if action in ("run", "sprint"):
   do_it_fast()
elif action in ("amble", "walk"):
   do_it_slowly()

答案 2 :(得分:1)

更一般地说,您可以使用in来测试其结果是否在序列中:

if action in ('Run', 'walk really quickly', 'sprint like hell'):

答案 3 :(得分:1)

单个if可以检查单个布尔表达式。一个布尔表达式可以由多个单独的表达式组成。在您的情况下,如果您希望action的多个不同值具有相同的结果,则可以使用or来连续多个测试:

if action == 'run' or action == 'Run' or action == 'walk fast':
    # run here

正如Abhijit已经提到的,你也可以将action标准化以跳过一些测试。例如,使用str.lower制作所有字符小写字符或使用str.strip剥离所有空格:

if action.lower().strip() == 'run' or action.lower().strip() == 'walk faster':
    # run here

正如您所看到的,在进入if语句之前进行规范化是有道理的,因此您不必重复它:

action = action.lower().strip()
if action == 'run' or action == 'walk faster':
    # run here

最后,如果您所做的只是字符串相等比较,您还可以使用in运算符来检查您的action是否在此操作的有效表达式列表中:< / p>

action = action.lower().strip()
if action in ('run', 'walk faster'):
    # run here