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 “三元操作”多重嵌套
- 4、完整源码
◆ 三元操作语句
1、“三元操作”概念
“三元操作”百科词条说:
采用三元操作符对 ? : 对表达式进行运算,这种操作符比较特别,因为它有三个操作对象,但它确实属于操作符的一种,它最终也会生成一个值。
其表达式采取下述形式(语法):
boolean-exp ? value0 : value1
在表达式 boolean-exp ? value0 : value1 中,如果“布尔表达式”的结果为 True ,就计算“value0”,而且这个计算结果也就是操作符最终产生的值;如果“布尔表达式”的结果为 False ,就计算“value1”,同样,它的结果也就成为了操作符最终产生的值。
当然,也可以换用普通的 if-else 语句,但三元操作符更加简洁。尽管引以为傲的就是它是一种简练的语法,而且三元操作符的引入多半就是为了体现这种高效率的编程,但假如你打算频繁使用它,还是要先多作一些思量——因为它很容易就会产生可读性极差的代码。
这种条件操作符的使用目的,有时是为了它的“副作用”,有时是为了它运算生成的值。一般而言,我们需要的是其运算的结果值,这正是这个三元操作符与 if-else 不同之处。
(点击“三元操作”蓝色文字跳转,了解更多)
“三元操作”百科词条中列举的三元操作符 ? : ,是大多数语言采用的。 ? 前面是条件表达式, : 分隔选择返回的对象,条件表达式为 True 返回 : 左面对象,条件表达式为 False 返回 : 右边对象。 ? : 没有特定含义,对写代码和读代码的人,都可能造成一定困扰。如果是有多重嵌套,电脑也会被绕晕的吧?
2、 Python “没有”三元操作符
Python “没有”三元操作符,她就用的 if-else ,把选择返回的两个对象分别放在 if-else 两端,条件表达式放在 if-else 中间。条件表达式为 True 返回左边对象,为 False 返回右面对象。写起来感觉跟写正常的 if-else 语句一样顺手,就是有一两层“三元操作嵌套”,也不是太难读。嵌套“三元操作”太多,也一样让人晕头转向,但只要语法和条件表达式不写错,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 元操作” ,每增加一层嵌套,就会增加“一元”。但,进行如此操作,还须谨慎!那样做会让您的代码“好难读”的咯。😄
- 常规的 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}")
- 代码运行效果截屏图片
4、完整源码
(源码较长,点此跳过源码)
#!/sur/bin/nve python
# coding: utf-8
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}")
上一篇: “递归三要素”寻踪(浅析递归“精典”框架,领略递归优雅秀气;看到有“递归算法优化”的操作,余试剖之)
下一篇:
我的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规范(说明文档的规范写法)