翻译 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=2
elif i<100:
    x=1
else:
    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
>>> 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
  •  需要注意的是上边的代码是jupyter风格的,多谢weixin_41505223和lycommand (if elif else是规范的写法。我之前的if else else 可以运行,但是不规范,或者说是错误的)。

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

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


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


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

 


2018-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的格式是str
i = float(h)                          # 将输入的str格式地数字,转换为float格式,之后才能进行大小运算
a = 1 if i<100 else 2 if i>100 else 0
print(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 0
    print(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 0
        print(a)
    xunhuan()

if __name__ == '__main__':
    xunhuan() 

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

欢迎交流讨论。^.^

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
以下是一个简单的通讯录管理系统的代码,包含了添加联系人、查找联系人、删除联系人、显示通讯录等功能: ```python contacts = {} # 添加联系人 def add_contact(name, phone): contacts[name] = phone print("联系人已添加成功!") # 查找联系人 def find_contact(name): if name in contacts: print(name + " 的电话号码是 " + contacts[name]) else: print("没有找到该联系人!") # 删除联系人 def delete_contact(name): if name in contacts: del contacts[name] print(name + " 的电话号码已被删除!") else: print("没有找到该联系人!") # 显示通讯录 def display_contacts(): for name, phone in contacts.items(): print(name + ": " + phone) # 主程序 while True: print("请选择要进行的操作:") print("1. 添加联系人") print("2. 查找联系人") print("3. 删除联系人") print("4. 显示通讯录") print("5. 退出程序") choice = input("请输入选项:") if choice == "1": name = input("请输入联系人姓名:") phone = input("请输入联系人电话号码:") add_contact(name, phone) elif choice == "2": name = input("请输入联系人姓名:") find_contact(name) elif choice == "3": name = input("请输入联系人姓名:") delete_contact(name) elif choice == "4": display_contacts() elif choice == "5": break else: print("无效的选项,请重新输入。") ``` 该代码中使用了一个字典 `contacts` 来存储联系人和电话号码的对应关系。每个操作都被封装成了一个函数,方便调用。主程序通过一个循环来不断接受用户的输入,根据用户选择的选项执行相应的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值