我已经阅读了下面的链接,但它并没有解决我的问题。 Python有三元条件运算符吗?(这个问题是关于将if-else语句压缩成一行的)

是否有一种更简单的方法来编写if-elif-else语句,使其适合一行? 例如,

if expression1:
   statement1
elif expression2:
   statement2
else:
   statement3

或者举一个现实世界的例子:

if i > 100:
    x = 2
elif i < 100:
    x = 1
else:
    x = 0

我只是觉得如果上面的例子可以这样写,它看起来会更简洁。

x = 2 if i>100 elif i<100 1 else 0   # [WRONG]

当前回答

只需在else语句中嵌套另一个if子句。但这并没有让它看起来更漂亮。

>>> x=5
>>> x if x>0 else ("zero" if x==0 else "invalid value")
5
>>> x = 0
>>> x if x>0 else ("zero" if x==0 else "invalid value")
'zero'
>>> x = -1
>>> x if x>0 else ("zero" if x==0 else "invalid value")
'invalid value'

其他回答

是的,你可以这样做:

i = int(input('type your num here : '))

x = 2 if i > 100 else ( 1 if i < 100 else 0)
print (x)
if i > 100:
    x = 2
elif i < 100:
    x = 1
else:
    x = 0

如果你想在一行中使用上述代码,你可以使用以下代码:

x = 2 if i > 100 else 1 if i < 100 else 0

在这样做时,如果i > 100, x将被分配2,如果i < 100, 1,如果i = 100,则为0

如果你只需要不同情况下不同的表达式,那么这可能适合你:

expr1 if condition1 else expr2 if condition2 else expr

例如:

a = "neg" if b<0 else "pos" if b>0 else "zero"
MESSAGELENGHT = 39
"A normal function call using if elif and else."
if MESSAGELENGHT == 16:
    Datapacket = "word"
elif MESSAGELENGHT == 8:
     Datapacket = 'byte'
else:
     Datapacket = 'bit'

#similarly for a oneliner expresion:
    

Datapacket = "word" if MESSAGELENGHT == 16 else 'byte' if MESSAGELENGHT == 8 else 'bit'
print(Datapacket)

谢谢

尽管有一些其他的答案:是的,这是可能的:

if expression1:
   statement1
elif expression2:
   statement2
else:
   statement3

翻译成以下一行:

statement1 if expression1 else (statement2 if expression2 else statement3)

事实上,你可以嵌套到无穷远。喜欢。)