当前位置: 首页 > article >正文

三元操作 三元操作符 if-else / ? :

Python 三元操作符 if-else , 其他语言三元操操作符 ? : ;“三元操作”语句,她也就是一个表达式。


【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


Python 三元操作符 if-else
三元操作语句
( 其他语言三元操操作符 ? : )


本文质量分:

91
本文地址: https://blog.csdn.net/m0_57158496/article/details/130412250

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 秒。


  1. 让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 修改。
  2. 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 修改。
  3. 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 修改。
  4. 罗马数字转换器|罗马数字生成器
    ( 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 修改。
  5. Python字符串居中显示
    ( 6050 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    点赞:1   踩 :0  收藏:5  打赏:0  评论:1
    本篇博文笔记于 2021-12-26 23:35:29 发布。
  6. 斐波那契数列的递归实现和for实现
    ( 5278 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122355295
    点赞:4   踩 :0  收藏:2  打赏:0  评论:8
    本篇博文笔记于 2022-01-06 23:27:40 发布。
  7. 个人信息提取(字符串)
    ( 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 修改。
  8. 练习:字符串统计(坑:f‘string‘报错)
    ( 4853 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121723096
    点赞:0   踩 :0  收藏:1  打赏:0  评论:0
    本篇博文笔记于 2021-12-04 22:54:29 发布。
  9. 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
    ( 4570 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121645399
    点赞:14   踩 :0  收藏:42  打赏:0  评论:0
    本篇博文笔记于 2021-11-30 23:43:17 发布。
  10. 回车符、换行符和回车换行符
    ( 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 修改。
  11. python清屏
    ( 4217 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    点赞:0   踩 :0  收藏:5  打赏:0  评论:0
    本篇博文笔记于 2021-10-14 13:47:21 发布。
  12. 密码强度检测器
    ( 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 修改。
  13. 罗马数字转换器(用罗马数字构造元素的值取模实现)
    ( 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 修改。
  14. 练习:生成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 修改。
  15. 练习:班里有人和我同生日难吗?(概率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 修改。
  16. 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 修改。
  17. 我的 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 修改。
  18. 练习:仿真模拟福彩双色球——中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 修改。
  19. 聊天消息敏感词屏蔽系统(字符串替换 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 修改。
  20. 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 修改。
  21. 练习:求列表(整数列表)平衡点
    ( 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规范(说明文档的规范写法)


http://www.kler.cn/a/16403.html

相关文章:

  • 基于yolov8、yolov5的鱼类检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • C语言 | Leetcode C语言题解之第557题反转字符串中的单词III
  • 封装el-menu
  • HTML之表单学习记录
  • 24.11.13 Javascript3
  • C++单例模式实现
  • 进程控制下篇
  • [LeetCode]1033. 移动石子直到连续
  • 《基于光电容积法和机器学习的冠状动脉疾病患者出血风险预测》阅读笔记
  • 【Python2.x与Python3.x的区别】
  • 进程相关(创建-回收-exec-守护进程)
  • 【华为OD机试 2023最新 】任务总执行时长(C语言题解 100%)
  • BPMN2.0 任务-服务任务
  • LVS负载均衡集群--DR模式
  • Chapter1:控制系统数学模型(下)
  • LC-1033. 移动石子直到连续(分类讨论)
  • Ubuntu搜狗输入法安装指南
  • Redis入门指南:深入了解这款高性能缓存数据库
  • MySQL示例数据库(MySQL Sample Databases) 之 Employees 数据库
  • [AION]我眼中的《永恒之塔私服》
  • 【拓扑排序】课程表系列
  • 基于SpringBoot的冬奥会科普平台
  • Python进阶项目--只因博客(bootstrap+flask+mysql)
  • Threejs进阶之十二:Threejs与Tween.js结合创建动画
  • 【001-Java基础练习】-适合初学者的练习
  • SPSS如何制作基本统计分析报表之案例实训?