第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 翻译 python:能否把 if-elif-else写成一行的形式?

翻译 python:能否把 if-elif-else写成一行的形式?

时间:2021-08-20 08:24:19

相关推荐

翻译 python:能否把 if-elif-else写成一行的形式?

从来都是“if”、换行后“elif”、换行后“else”,不明白的是把 if-else写在一行是什么操作?

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

原文链接1:Putting a simple if-then-else statement on one lin.

条件语句详解链接2:Does Python have a ternary conditional operator?

注:题主python .7.1,pycharm 2.8.2

Question:

有statement/语句if-elif-else如下:

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

我个人觉得下边的代码更简洁,但是为什么教程上不这么用呢?

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

注: 在三元操作符里边,使用 if-elif-else无法运行。

+++++++++++Answer1st+++++++++++

此谓三元操作符的应用,python下的三元操作语法如下:

value_when_true if condition_is_ture else value_when_condition_is_false

举个(伪代码)栗子:

'Yes' if fruit == 'Apple' else 'No' """判断是不是‘苹果’。如果结果是‘苹果’,if语句首先返回‘True’(这一步我们看不到),然后返回‘Yes’同时else条件语句不再执行;如果if返回的是‘False’,则执行else语句并返回结果‘No’。"""

+++++++++++Answer2nd+++++++++++

—— 该问题的答主觉得是因为它不符合python之禅的精神,即“(代码的)可读性”:

“一方面,严格来说,这么写是不可以,也是不可取的。把所有的东西写在一行几乎就是在违反PER-8的书写规则:规定一行代码最长不能超过80个字符。”

“另一方面,这么写也违反了Python之禅:‘可读性为王’。在Python里你可以用三元的表达式/expression,但仅限于此,它不适用于声明/statement。表达式例子:

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

从你提的问题里可以看出,除了赋了的i之外,下面的三个声明(statement)是一致的。虽然这些三元操作符是能运行的,但是我的观点还是可读性不足。

# jupyter notebook显示风格>>> i=100>>> a = 1 if i<100 else 2 if i>100 else 0>>> a0>>> i=101>>> a = 1 if i<100 else 2 if i>100 else 0>>> a2>>> i=99>>> a = 1 if i<100 else 2 if i>100 else 0>>> a1

需要注意的是上边的代码是jupyter风格的,多谢weixin_41505223和lycommand (if elif else是规范的写法。我之前的if else else 可以运行,但是不规范,或者说是错误的)。

现在补充一下Python 自带IDE,或者Pycharm的代码:

i=100a = 1 if i<100 else 2 if i>100 else 0print(a)# 输出:0i=101a = 1 if i<100 else 2 if i>100 else 0print(a)# 输出:2i=99a = 1 if i<100 else 2 if i>100 else 0print(a)# 输出:1

-12更新:

上边的代码,有N个i就需要写N遍“a = 1 if i<100 else 2 if i>100 else 0 print(a)”。有没有感觉麻烦呢?其实可以只写一遍代码

最初级方法:手动运行N次模块,手动输入N次i的到N个结果。代码如下

h = input('请输入数字:')# 运行之后,请在输出窗口手工输入相应的数字。注意:a的格式是stri = float(h)# 将输入的str格式地数字,转换为float格式,之后才能进行大小运算a = 1 if i<100 else 2 if i>100 else 0print(a)

进阶方法1/2:自动运行N次模块,手动输入N次i得到N个结果。代码如下:

def xunhuan(): # 中心思想是建立函数,在函数的结尾处自我调用形成循环,即不用手工运行h = input('请输入数字:') i = float(h) a = 1 if i<100 else 2 if i>100 else 0print(a)xunhuan()# 自己调用自己,形成无限循环,除非手动关掉代码xunhuan() # def开头的即python的“函数”,函数必须通过调用才会被执行

——这也就是python的“函数”啦。

进阶方法2/2,这一次,我知道所有的i:即一次输入N个i,得到N个结果。代码如下

def xunhuan():h = input('请输入所有数字,数字间用英文逗号隔开:') shuzi = h.split(',') # 用split()函数,把string比如" 'a', 'b', 'c' "转换为list的['a', 'b', 'c'] for i in shuzi:i = float(i)a = 1 if i<100 else 2 if i>100 else 0print(a)xunhuan()if __name__ == '__main__':xunhuan()

如果想知道"if __name__ == '__main__':"什么鬼,可以参考下我的这篇笔记:if __name__ == "__main__":应该怎么样理解呢?

欢迎交流讨论。^.^

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。