在所有if
语句都不成立时,是否可能在if
行的末尾编写一个else
?例如:
if foo==5:
pass
if bar==5:
pass
if foobar==5:
pass
else:
pass
在这个例子中,如果
foobar
不等于5,则会执行else部分,但我希望在foo
、bar
和foobar
都不等于5时执行它。(但是,如果所有语句都为true,则必须执行所有语句。)在所有if
语句都不成立时,是否可能在if
行的末尾编写一个else
?例如:
if foo==5:
pass
if bar==5:
pass
if foobar==5:
pass
else:
pass
foobar
不等于5,则会执行else部分,但我希望在foo
、bar
和foobar
都不等于5时执行它。(但是,如果所有语句都为true,则必须执行所有语句。)key
,第四个if语句就不会被执行。key = True
if foo == 5:
key = False
if bar == 5:
key = False
if foobar == 5:
key = False
if key:
pass # this would then be your else statement
key1
使用一个布尔值! - jonrsharpe我认为在Python或其他语言中没有任何过于优雅的方法来完成这个任务。你可以将值存储在列表中,但是这会使实际测试条件变得难以理解,例如:
tests = [bar ==4, foo == 6, foobar == 8]
if tests[0] :
# do a thing
if tests[1] :
# Make a happy cheesecake
if tests[2] :
# Oh, that's sad
if not True in tests :
# Invade Paris
或者您可以设置跟踪标记
wereAnyTrue = False
if foo == 4 :
# Do the washing
wereAnyTrue = True
if bar == 6 :
# Buy flowers for girlfriend
wereAnyTrue = True
# ... etc
if not wereAnyTrue :
# Eat pizza in underpants
不能直接实现,这三个if
块是独立的。你可以使用嵌套,但那会变得非常复杂;最简洁的方法可能是:
if foo == 5:
...
if bar == 5:
...
if foobar == 5:
...
if not any((foo == 5, bar == 5, foobar == 5)):
...
any
可以被使用。 - jonrsharpeif
语句都是用来检查相同的值,我会使用以下格式。在我看来,这将使代码更短、更易读。if 5 in (foo, bar, foobar):
pass
else:
pass
if foo != bar != foobar != 5:
#gets executed if foo, bar and foobar are all not equal to 5
看起来有点滑稽,我猜这取决于你来决定哪个更易读。显然,如果其中一个变量应该等于其他值,那么这种方法就行不通。
编辑:糟糕,这是无法工作的。例如
1 != 1 != 3 != 5
返回 false,而
1 != 2 != 3 != 5
返回 true。对不起
else
。 - Nearoo