如果通过一个或多个 if 语句,我如何执行相同的语句?

问题描述

如果它传递一系列 if-elif 语句,我想执行相同的任务。

下面展示的是我正在努力实现的一个例子。该程序运行时没有错误,但我想知道是否有一种更简单的方法可以将 continue_program 分配给 Yes,如果它满足其中一个条件,而无需多次输入。

word_form = "A string!"
continue_program = "No"

number = 2

if number == 1:
    word_form = "one"
    continue_program = "Yes"
elif number == 2:
    word_form = "two"
    continue_program = "Yes"
elif number == 3:
    word_form = "three"
    continue_program = "Yes"

解决方法

这可能有点过于简洁:

d = {1: "one",2: "two",3: "three"}

continue_program = bool(word_form := d.get(number,"")))

number 中查找 d,这将导致所需的字符串或空字符串。作为副作用,将该字符串分配给 word_form。该字符串的布尔值进一步分配给 continue_program

一些例子;首先,number == 6

>>> bool(word_form := d.get(6,""))
False
>>> word_form
''

现在,number == 1

>>> bool(word_form := d.get(1,""))
True
>>> word_form
'one'

更新:使用条件表达式将 True/False 映射到 "Yes"/"No""

continue_program = "Yes" if (word_form := d.get(number,"")) else "No"

3.8 之前,

word_form = d.get(number,"")
continue_program = "Yes" if word_form else "No"
,

您可以保留 if 块并在最后检查“word_form”是否有长度,然后您可以将 coninue_program 指定为 True,例如:

word_form = ""
continue_program = False

number = 2

if number == 1:
    word_form = "one"
elif number == 2:
    word_form = "two"
elif number == 3:
    word_form = "three"

if len(word_form) > 0:
   continue_program = True
,

在这里我可以想到两种使用类似 switch-case 的方法的解决方案:

1)

def num(arg):
switcher = {
    1:True,2:True,3:True,4:False
}
return switcher.get(arg,False)
def func1():
    print("hi func1")
def func2():
    print("hi func2")
def default():
    print("hi default")
def num2(arg):
    switcher = {
        1:func1,2:func2,}
    return switcher.get(arg,default)

num2(1)()
print("space")
num2(3)()

会像这样打印:

hi func1
space
hi default

您可以从这里了解更多信息switch-case