能否把 if-elif-else写成一行的形式?

翻译 2018年04月15日 23:29:23

能否把 if-elif-else写成一行的形式?

练习“七段数码管”是看见把 if-else写在一行的代码。

问题是:自己写的时候,从来都是“if”放在开头,换行写“elif”或者“else”的。把 if-else写在一行是什么操作?

A:百度没找到相应的答案,还好在stackoverflow找到了一个相应的问答,特翻译如下:

问题例子:

有没有一个简便的写if-elif-else statement,就像这个例子写在一行 ?

例子:

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]


某高票答案:三元操作符

如下为python下的语法:

value_when_true if condition else value_when_false

例子:

'Yes' if fruit == 'Apple' else 'No' # 判断“苹果”是否是水果,如果结果是True,返回“Yes”,如果是False则“No”。

原文链接:https://stackoverflow.com/questions/2802726/putting-a-simple-if-then-else-statement-on-one-line


另附注这个回答以供参考:答主觉得这样其实不符合python之禅的“可读性”:

这么写是不可以(严格来说),也是不可取的。把所有的都写在一行差不多就是在违反PER-8书写规则,因为它规定一行代码最长不能超过80个字符。

这么写也违反了Python之禅:“可读性为王”。

在Python里你可以用一个三元的表达式(expression),但仅限与表达式,不适用于声明(statement)

>>> a = "Hello" if foo() else "Goodbye"

Edit:

从你提的问题里可以看出,除了赋值了的值外三个声明(statement)是一致的。这种情况下,一行上的三元操作符是能运行的,即使这样我还是认为可读性略差

>>> i=100
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
0
>>> i=101
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
2
>>> i=99
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
1

原文链接:https://stackoverflow.com/questions/14029245/putting-an-if-elif-else-statement-on-one-line#


如何把JS写成类

mootools创建了一个dialog widget 1. var Dialog = new Class({ 2. Implements: Events, 3. ...
  • elf8848
  • elf8848
  • 2014年10月09日 10:26
  • 311

12321能被写成______种两个质数相加的形式

注册了博客这么久了第一次写博文,之前由于觉得写博文实在没必要,一方面是因为自己写的博文很多都是前人遇到或者解决过的问题,另一方面是觉得写这个很浪费时间,还有一个是由于自己技术实在不行。大四狗了,开始了...
  • ab123456ygj
  • ab123456ygj
  • 2015年10月14日 23:03
  • 447

因数分解,把一个整数分解成质数相乘的形式

/* *程序的版权和版本声明部分: *Copyright(c)2013,烟台大学计算机学院学生 *All rights reserve...
  • u012369373
  • u012369373
  • 2014年01月19日 13:43
  • 1223

一行代码写python

一行代码更新python数组中对象属性满足某一值的元素 arr = [{'a': 3,'c':4}, {'d':5,'a': 4}, {'a': 1,'b':2}] [x.update(x,a=9) ...
  • nicky9470
  • nicky9470
  • 2015年11月03日 17:55
  • 980

Java 读取TXT一行多列数据

String str= "Forevercai;http://4evercai.com;2"; String [] strS = str.split(";"); for (int i = 0; i...
  • zhi0720
  • zhi0720
  • 2013年07月24日 15:58
  • 1046

将XML整合为一行

将XML整合为一行
  • linyiheng123
  • linyiheng123
  • 2016年05月01日 12:24
  • 145

分解质因数(Java)

分解质因数 每个合数都可以写成几个质数相乘的形式,几个质数叫做这个合数的质因数。12=2*2*3 分解15   分别除以2,3,4,。。。,14 分解16   分别除以2,3,4。。。。15 ...
  • zxyolo
  • zxyolo
  • 2016年08月22日 17:43
  • 228

if-elif-else

if-elif-else 有的时候,一个 if ... else ... 还不够用。比如,根据年龄的划分: 条件1:18岁或以上:adult 条件2:6岁或以上:teenager 条件...
  • huangmin113659
  • huangmin113659
  • 2016年04月02日 13:10
  • 104

PAT乙级练习题B1051. 复数乘法

题目描述复数可以写成(A + Bi)的常规形式,其中A是实部,B是虚部,i是虚数单位,满足i2 = -1;也可以写成极坐标下的指数形式(R*e(Pi)),其中R是复数模,P是辐角,i是虚数单位,其等价...
  • muketangzhu
  • muketangzhu
  • 2016年07月12日 17:03
  • 594

重载<< >>

cin>>是由istream类支持的,cin是类 istream 的一个对象; cout 其实,>重载了按位移的运算符,并且只能对c++中的标准数据类型进行输入和输出。 如何重载>使它们能输入和输...
  • u010141928
  • u010141928
  • 2017年06月07日 09:47
  • 126
收藏助手
不良信息举报
您举报文章:能否把 if-elif-else写成一行的形式?
举报原因:
原因补充:

(最多只允许输入30个字)