三元操作 三元操作符 if-else / ? :
Python 三元操作符 if-else , 其他语言三元操操作符 ? : ;“三元操作”语句,她也就是一个表达式。
-
Python 官网:https://www.python.org/
-
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
- My CSDN主页、My HOT博、My Python 学习个人备忘录
- 好文力荐、 老齐教室
本文质量分:
CSDN质量分查询入口:http://www.csdn.net/qc
- ◆ 三元操作语句
- 1、“三元操作”概念
- 2、 Python “没有”三元操作符
- 3、 Python 三元操作举例
- 3.1 简单的非A即B
- 3.2 小“程序”
- 3.3 N 元操作语句——“三元操作”多重嵌套
- 3.4 解构“三元操作”嵌套
- 4、完整源码
◆ 三元操作语句
1、“三元操作”概念
“三元操作”百科词条说:
采用三元操作符对 ? : 对表达式进行运算,这种操作符比较特别,因为它有三个操作对象,但它确实属于操作符的一种,它最终也会生成一个值。
其表达式采取下述形式(语法):
boolean-exp ? value0 : value1
在表达式 boolean-exp ? value0 : value1 中,如果“布尔表达式”的结果为 True ,就计算“value0”,而且这个计算结果也就是操作符最终产生的值;如果“布尔表达式”的结果为 False ,就计算“value1”,同样,它的结果也就成为了操作符最终产生的值。
当然,也可以换用普通的 if-else 语句,但 三元操作符更加简洁。尽管引以为傲的就是它是一种简练的语法,而且三元操作符的引入多半就是为了体现这种高效率的编程,但假如你打算频繁使用它,还是要先多作一些思量——因为它很容易就会产生可读性极差的代码。
这种条件操作符的使用目的,有时是为了它的“副作用”——它运算生成的值。一般而言,我们需要的是其运算的结果值,这正是三元操作符与 if-else 不同之处。
(点击“三元操作”蓝色文字跳转,了解更多)
“三元操作”百科词条中列举的三元操作符半角问号冒号对(英文状态问号冒号对) ? : ,是大多数语言采用的“三元操作符”。问号 ? 前面是条件表达式,冒号 : 分隔需选择返回的对象,条件表达式值为 True 时返回冒号 : 左面对象,条件表达式值为 False 时返回冒号 : 右边对象。问号冒号对 ? : 没有特定含义,对写代码和读代码的人,都可能造成一定困扰。如果用上“三元操作语句”多重嵌套,电脑也会被绕晕的吧?
相对于 Python 采用的 if-else 关键字对,她有常规 if-else 一样的含义,使用起来相对更易于理解和读写。即使用上几层嵌套,也并不是那么难以识记。当然,您要不断叠加“三元操作”,从而达到 N 元操作,那样子也会绕晕读您代码的人,虽然 Python 编译环境还是能被您正确驱使。但,“代码更多是写给人看的,只是偶尔让机器跑跑”,所以大量而频繁使用“三元操作语句”,还是需要谨慎操作的。
2、 Python “没有”三元操作符
Python “没有”三元操作符,她就用的 if-else 关键字对,把需选择返回的两个对象分别放在 if-else 关键字对两端,条件表达式放在 if-else 关键字对中间。条件表达式值为 True 时返回 if-else 关键字对左边对象,值为 False 时返回 if-else 关键字对右面对象。写起来感觉跟写正常的 if-else 语句几乎一样顺手,就是有一两层“三元操作嵌套”,也不是太难读。代码中嵌套“三元操作”太多,也一样让人晕头转向,但只要语法和条件表达式不写错,Python 解释器一样能理得清,给出您要的程序结果。
实际上,不管您写出我多长的 Python “三元操作”语句,她也就 是一个表达式,始终只会 返回一个值。我们启用“三元操作”,恰恰就是希罕她的这个特性。
- Python 三元操作符语法:
表达式1 if 条件表达式 else 表达式2
当 if 条件表达式值为 True 时,返回结果表达式1,否则返回结果表达式2。
3、 Python 三元操作举例
3.1 简单的非A即B
- 常规的 if-else 代码
def compare(a, b):
''' 比较大小,返回大者 '''
if a > b:
return a
elif a != b:
return b
- 三元操作代码
def compare(a, b):
''' 比较大小,返回大者 '''
return a if a > b else b if a != b else None
- 调用函数输出结果
if __name__ == '__main__':
print(f"\n{'比较大小':^46}{'':~^50}")
for i in ((45, 6), ('a', 'A'), (1, True), (False, 1), (56//7, ord('h'))):
print(f"\n({i[0]}, {i[1]}) -> {compare(i[0], i[1])}")
print(f"\n{'':~^50}")
- 代码运行效果截屏图片
分别调用两个函数,可以得到一样的输出。嵌套一层“三元操作”就还原了 Python 函数的默认返回空值,代码也还是比较易读。
3.2 小“程序”
- 常规的 if-else 代码输出和“三元操作”输出
weather = input(f"\n输入天气:")
if not weather:
print(' 输入不可以为空!'.center(42, '~'))
exit()
def isnice():
if '雨' in weather or '雪' in weather:
return '路滑'
else:
return '路好走'
print(f"\n\n{weather},{isnice()}。")
print(f"\n\n三元操作:\n\n{weather},{'路滑' if '雨' in weather or '雪' in weather else '路好走'}。")
- 代码运行效果截屏图片
3.3 N 元操作语句——“三元操作”多重嵌套
通过“三元操作”多重嵌套运作,可以实现 “ n 元操作” ,每增加一层嵌套,就会增加“一元”。但,进行过多层次嵌套“加元”操作,还须谨慎!那样做会让您的代码真的“好难读”的咯。😄
- 常规的 if-else 代码
def islevel(score: int) -> str:
''' 分数等级判定 '''
level = None
if 100 >= score >= 90:
level = 'A'
elif 90 > score >= 80:
level = 'B'
elif 80 > score >= 60:
level = 'C'
elif 60 > score >= 0:
level = 'D'
else:
print('\nErroeType: Input error!', end='')
return level
- 三元操作代码
def islevel(score: int) -> str:
''' 分数等级判定 '''
return 'A' if 100 >= score >= 90 else 'B' if 90 > score >= 80 else 'C' if 80 > score >= 60 else 'D' if 60 > score >= 0 else print('\nErroeType: Input error!', end='')
- 调用函数输出结果
if __name__ == '__main__':
print(f"\n{'成绩等级判定':^44}{'':~^50}")
for i in (98, 56, 78, 34, 678, 83, 100, 7):
print(f"\n{i:>3} is {islevel(i)}.")
print(f"\n{'':~^50}")
- 代码运行效果截屏图片
3.4 解构“三元操作”嵌套
Python 三元嵌套,倒底是嵌套在前面还是后面呢,让我们炼炼码,看看“到底是前后都可以呢还是只可以其一”。
- 我们用这段儿“四层三元嵌套”的代码来试炼试炼——
def islevel(score: int) -> str:
''' 分数等级判定 '''
return 'A' if 100 >= score >= 90 else 'B' if 90 > score >= 80 else 'C' if 80 > score >= 60 else 'D' if 60 > score >= 0 else print('\nErroeType: Input error!', end='')
if __name__ == '__main__':
score = 89
input(f"\nScore {score} is {islevel(score)}\n\n{' 三元嵌套试炼 ':~^44}")
- 代码运行效果截屏图片
- 将最后一层 if-else 前面代码,看作一个表达式
def islevel(score: int) -> str:
''' 分数等级判定 '''
return ('A' if 100 >= score >= 90 else 'B' if 90 > score >= 80 else 'C' if 80 > score >= 60 else 'D') if 60 > score >= 0 else print('\nErroeType: Input error!', end='')
if __name__ == '__main__':
score = 89
input(f"\nScore {score} is {islevel(score)}.\n\n{' 三元嵌套试炼 ':~^44}")
- 代码运行效果截屏图片
虽然没有得到正确输出,但代码逻辑却没有错误,说明 Python 三元操作的前一个对象是可以嵌套的。
- 依次将第三、第二层嵌套 if-else 前面的代码看作一个表达式试炼——
都有合法的输出,再次印证“ Python 三元操作”前面的对象是可以嵌套操作的。
- 把第一层嵌套 if-else 后面的语句看作一个表达式
def islevel(score: int) -> str:
''' 分数等级判定 '''
return ('A' if 100 >= score >= 90 else 'B' if 90 > score >= 80 else 'C' if 80 > score >= 60 else 'D') if 60 > score >= 0 else print('\nErroeType: Input error!', end='')
if __name__ == '__main__':
score = 89
input(f"\nScore {score} is {islevel(score)}.\n\n{' 三元嵌套试炼 ':~^44}")
- 代码运行效果截屏图片
同样有合法的输出,这说明 Python 三元操作语句后一个对象,也同样可以嵌套。
- 再依次试炼后面三层嵌套
两次试炼,输出同样合法。
通过试码,搞明白了,Python 三元操作语句,if-else 关键字对前后的对象表达式,都是可以嵌套的。写代码编程时,可根据项目的实际需求进行设计。
4、完整源码
(源码较长,点此跳过源码)
#!/sur/bin/nve python
# coding: utf-8
def islevel(score: int) -> str:
''' 分数等级判定 '''
return 'A' if 100 >= score >= 90 else 'B' if 90 > score >= 80 else 'C' if 80 > score >= 60 else ('D' if 60 > score >= 0 else print('\nErroeType: Input error!', end=''))
if __name__ == '__main__':
score = 89
input(f"\nScore {score} is {islevel(score)}.\n\n{' 三元嵌套试炼 ':~^44}")
weather = input(f"\n输入天气:")
if not weather:
print(' 输入不可以为空!'.center(42, '~'))
exit()
def isnice():
if '雨' in weather or '雪' in weather:
return '路滑'
else:
return '路好走'
print(f"\n\n{weather},{isnice()}。")
print(f"\n\n三元操作:\n\n{weather},{'路滑' if '雨' in weather or '雪' in weather else '路好走'}。")
def compare(a, b):
''' 比较大小,返回大者 '''
if a > b:
return a
elif a != b:
return b
def compare(a, b):
''' 比较大小,返回大者 '''
return a if a > b else b if a != b else None
def islevel(score: int) -> str:
''' 分数等级判定 '''
level = None
if 100 >= score >= 90:
level = 'A'
elif 90 > score >= 80:
level = 'B'
elif 80 > score >= 60:
level = 'C'
elif 60 > score >= 0:
level = 'D'
else:
print('\nErroeType: Input error!', end='')
return level
def islevel(score: int) -> str:
''' 分数等级判定 '''
return 'A' if 100 >= score >= 90 else 'B' if 90 > score >= 80 else 'C' if 80 > score >= 60 else 'D' if 60 > score >= 0 else print('\nErroeType: Input error!', end='')
if __name__ == '__main__':
print(f"\n{'比较大小':^46}{'':~^50}")
for i in ((45, 6), ('a', 'A'), (1, True), (False, 1), (56//7, ord('h'))):
print(f"\n({i[0]}, {i[1]}) -> {compare(i[0], i[1])}")
print(f"\n{'':~^50}")
###
print(f"\n{'成绩等级判定':^44}{'':~^50}")
for i in (98, 56, 78, 34, 678, 83, 100, 7):
print(f"\n{i:>3} is {islevel(i)}.")
print(f"\n{'':~^50}")
上一篇: “递归三要素”寻踪(浅析递归“精典”框架,领略递归优雅秀气;看到有“递归算法优化”的操作,余试剖之)
下一篇: 对折纸张厚度超过珠峰高度(循环对折0.1毫米纸张,厚度超过珠峰输出对折次数)
我的HOT博:
本次共计收集 198 篇博文笔记信息,总阅读量 31.91w,平均阅读量 1611。已生成 21 篇阅读量不小于 3000 的博文笔记索引链接。数据采集于 2023-04-28 05:19:06 完成,用时 5 分 1.53 秒。
- 让QQ群昵称色变的神奇代码
( 53374 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/122566500
点赞:23 踩 :0 收藏:75 打赏:0 评论:16
本篇博文笔记于 2022-01-18 19:15:08 首发,最晚于 2022-01-20 07:56:47 修改。 - ChatGPT国内镜像站初体验:聊天、Python代码生成等
( 47405 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/129035387
点赞:123 踩 :0 收藏:784 打赏:0 评论:73
本篇博文笔记于 2023-02-14 23:46:33 首发,最晚于 2023-03-22 00:03:44 修改。 - pandas 数据类型之 DataFrame
( 7992 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/124525814
点赞:6 踩 :0 收藏:24 打赏:0 评论:0
本篇博文笔记于 2022-05-01 13:20:17 首发,最晚于 2022-05-08 08:46:13 修改。 - 罗马数字转换器|罗马数字生成器
( 6362 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/122592047
点赞:0 踩 :0 收藏:1 打赏:0 评论:0
本篇博文笔记于 2022-01-19 23:26:42 首发,最晚于 2022-01-21 18:37:46 修改。 - Python字符串居中显示
( 6050 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/122163023
点赞:1 踩 :0 收藏:5 打赏:0 评论:1
本篇博文笔记于 2021-12-26 23:35:29 发布。 - 斐波那契数列的递归实现和for实现
( 5278 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/122355295
点赞:4 踩 :0 收藏:2 打赏:0 评论:8
本篇博文笔记于 2022-01-06 23:27:40 发布。 - 个人信息提取(字符串)
( 4876 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/124244618
点赞:1 踩 :0 收藏:8 打赏:0 评论:0
本篇博文笔记于 2022-04-18 11:07:12 首发,最晚于 2022-04-20 13:17:54 修改。 - 练习:字符串统计(坑:f‘string‘报错)
( 4853 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/121723096
点赞:0 踩 :0 收藏:1 打赏:0 评论:0
本篇博文笔记于 2021-12-04 22:54:29 发布。 - 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
( 4570 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/121645399
点赞:14 踩 :0 收藏:42 打赏:0 评论:0
本篇博文笔记于 2021-11-30 23:43:17 发布。 - 回车符、换行符和回车换行符
( 4322 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/123109488
点赞:0 踩 :0 收藏:2 打赏:0 评论:0
本篇博文笔记于 2022-02-24 13:10:02 首发,最晚于 2022-02-25 20:07:40 修改。 - python清屏
( 4217 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/120762101
点赞:0 踩 :0 收藏:5 打赏:0 评论:0
本篇博文笔记于 2021-10-14 13:47:21 发布。 - 密码强度检测器
( 3854 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/121739694
点赞:1 踩 :0 收藏:4 打赏:0 评论:0
本篇博文笔记于 2021-12-06 09:08:25 首发,最晚于 2022-11-27 09:39:39 修改。 - 罗马数字转换器(用罗马数字构造元素的值取模实现)
( 3790 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/122608526
点赞:0 踩 :0 收藏:0 打赏:0 评论:0
本篇博文笔记于 2022-01-20 19:38:12 首发,最晚于 2022-01-21 18:32:02 修改。 - 练习:生成100个随机正整数
( 3529 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/122558220
点赞:1 踩 :0 收藏:3 打赏:0 评论:0
本篇博文笔记于 2022-01-18 13:31:36 首发,最晚于 2022-01-20 07:58:12 修改。 - 练习:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)
( 3516 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/124424935
点赞:1 踩 :0 收藏:2 打赏:0 评论:0
本篇博文笔记于 2022-04-26 12:46:25 首发,最晚于 2022-04-27 21:22:07 修改。 - Python列表(list)反序(降序)的7种实现方式
( 3451 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/128271700
点赞:4 踩 :0 收藏:10 打赏:0 评论:8
本篇博文笔记于 2022-12-11 23:54:15 首发,最晚于 2023-03-20 18:13:55 修改。 - 我的 Python.color() (Python 色彩打印控制)
( 3334 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/123194259
点赞:2 踩 :0 收藏:7 打赏:0 评论:0
本篇博文笔记于 2022-02-28 22:46:21 首发,最晚于 2022-03-03 10:30:03 修改。 - 练习:仿真模拟福彩双色球——中500w巨奖到底有多难?跑跑代码就晓得了。
( 3187 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/125415626
点赞:3 踩 :0 收藏:4 打赏:0 评论:3
本篇博文笔记于 2022-06-22 19:54:20 首发,最晚于 2022-06-23 22:41:33 修改。 - 聊天消息敏感词屏蔽系统(字符串替换 str.replace(str1, *) )
( 3054 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/124539589
点赞:3 踩 :0 收藏:2 打赏:0 评论:3
本篇博文笔记于 2022-05-02 13:02:39 首发,最晚于 2022-05-21 06:10:42 修改。 - Linux 脚本文件第一行的特殊注释符(井号和感叹号组合)的含义
( 3020 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/123087606
点赞:0 踩 :0 收藏:4 打赏:0 评论:3
本篇博文笔记于 2022-02-23 13:08:07 首发,最晚于 2022-04-04 23:52:38 修改。 - 练习:求列表(整数列表)平衡点
( 3001 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/121737612
点赞:0 踩 :0 收藏:0 打赏:0 评论:0
本篇博文笔记于 2021-12-05 23:28:10 发布。
精品文章:
- 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
- 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 靠谱程序员的好习惯
- 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归
CSDN实用技巧博文:
- 8个好用到爆的Python实用技巧
- python忽略警告
- Python代码编写规范
- Python的docstring规范(说明文档的规范写法)