是否可以获得多个if / elif语句来提供一个结果? 例如:
action = input ("would you like to walk or run? ")
我怎么能够做出多个答案,例如“run”或“Run”给我相同的结果,而不必复制/粘贴代码,如果/ elif语句?我可以编写代码来使用多个'if'语句来提供一个结果吗?
答案 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