0

是否有可能获得多个 if/elif 语句来给出一个结果?例子:

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

那么我如何能够做出多个答案,例如“运行”或“运行”给我相同的结果,而无需永远复制/粘贴代码 if/elif 语句?我可以编写代码以使用多个“if”语句来给出一个结果吗?

4

4 回答 4

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 的经验更容易。

于 2013-09-17T10:58:45.790 回答
4

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

if action in ("run", "sprint"):
   do_it_fast()
elif action in ("amble", "walk"):
   do_it_slowly()
于 2013-09-17T11:03:44.300 回答
1

更一般地,您可以使用它in来测试它们的结果是否按顺序排列:

if action in ('Run', 'walk really quickly', 'sprint like hell'):
于 2013-09-17T11:03:59.757 回答
1

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

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是否在此操作的有效表达式列表中:

action = action.lower().strip()
if action in ('run', 'walk faster'):
    # run here
于 2013-09-17T11:04:09.450 回答