3.Python 表达式

1.认识表达式

表达式是计算的式子,由运算符和操作数组成。表达式必须返回一个值,操作数是参与运算的对象,包括字面值、变量、对象、表达式等。

解析复杂表达式时,先计算最小单元的表达式,然后返回值投入外围表达式的运算,依次逐级上移。

解析表达式遵循从左到右的顺序执行运算,但是也会受到每个运算符的优先级和结合性的影响。为了控制计算,可以使用小括号进行分组,以便提升表达式的优先级。

运算符表示特定算法的符号,大部分由标点符号表示(如+、-、=等),少数运算符由单词表示(如in、is、and、or 和not等)。运算符必须与操作数配合使用,组成表达式,才能够发挥作用。根据操作数的数量,运算符可以分为3种类型:

  • 一元运算符:只有1个操作数,如按位取反~、逻辑非not、一元减号-。
  • 二元运算符:有2个操作数,大部分都是二元运算符,需要结合2个操作数。
  • 三元运算符:有3个操作数,如条件表达式。

在这里插入图片描述

运算符根据优先级从高到低向下排列,同一行内运算符等级相同。当运算符的优先级相同时,再根据结合性决定先执行哪个运算符。如果结合性再相同,则最后根据先后顺序决定运算优先级。

不要过度依赖运算符优先级,尽量使用()来控制表达式的执行顺序。

2.条件表达式

条件表达式是Python 唯一的三元运算符,语法格式如下:

# 如果条件表达式为 True, 则执行 True 表达式,否则执行 False 表达式。
<True 表达式> if <条件表达式> else <False 表达式>

也可以使用列表结构来模拟条件表达式,语法格式如下:

[False 表达式,True 表达式][条件表达式]

示例1:将变量n的绝对值赋值给变量x。

n = int(input("请输入一个数字:"))
# method 1
x = n if n >= 0 else -n
# method 2
if n >= 0:
    x = n 
else:
    x = -n
# method 3
x = [-n,n][n >= 0]

3.常见的运算符

算术运算符

在这里插入图片描述

赋值运算符
  • =:直接赋值;
  • +=:先相加后赋值;
  • -+:先相减后赋值;
  • *=:先相乘后赋值;
  • /=:先相除后赋值;
  • %=:先取模后赋值;
  • **=:先求幂后赋值;
  • //=:先整除后赋值;
关系运算符
  • > 、<、>=、<=、==、!= 返回布尔值

执行关系运算时,操作数可以是字符串或数字。如果是数字,则直接比较大小,如果是字符串,则根据每个字符编码的大小,从左到右按顺序逐个比较。字符比较区分大小写,一般小写字符大于大写字符。如果不区分大小写,可以使用 upper()或 lower()方法统一字行串的大小写形式。如果操作数是布尔值,则先转换为数字,True为1,False 为0,再进行比较。

相等关系的两个操作数没有类型限制。如果类型不同,则不相等,直接返回 False:如果类型相同,再比较值是否相同,如果相同,则返回 True,否则返回 False。如果操作数是布尔值,则先转换为数字,True为1,False 为0,再进行比较。

逻辑运算符
  • and:逻辑与,表示只有当两个操作数都为 True 时,才返回 True,否则返回 False。

  • or:逻辑或,表示两个操作数中只要有一个为 True,就返回 True:否则返回 False。

  • not :逻辑非仅包含一个操作数,表示把操作数转换为布尔值,然后返回取反后的布尔值。

逻辑与是一种短路逻辑:如果左侧表达式为 False,则直接短路返回结果,不再运算右侧表达式。因此,在设计逻辑运算时,应确保逻辑运算符左侧的表达式返回值是一个可以预测的值。右侧表达式不应该包含有效运算,如函数调用等,因为当左侧表达式为 False 时,则直接跳过右侧表达式,给正常运算带来不确定性。

逻辑或也是一种短路逻辑:如果左侧表达式为 True,则直接短路返回结果,不再运算右侧表达式。

逻辑与和逻辑或运算的返回值不必是布尔值,但是逻辑非运算的返回值一定是布尔值,而不是表达式的原值。

位运算符

位运算符共有6个,分为如下两类。
逻辑位运算符,位与(&)、位或(|)、位异或(^)和位非(~)。
移位运算符,左移(<<)和有移(>>)。

  • &:两个二进制操作数逐位比较,两个操作数都为1时,才返回1,否则返回0;
  • |:两个二进制操作数逐位比较,两个操作数只要一个为1时,就返回1,否则返回0;
  • ^:两个二进制操作数逐位比较,两个操作数都为1或0时,就返回0,否则返回1;
  • :对一个二进制操作数逐位进行取反操作;
  • <<:运算符执行左移位运算。符号始终保持不变,如果右侧空出位置,则自动填充为0;如果超出32位的值,则自动丢弃;
  • >>:运算符执行有符号的右移位运算。把32位的二进制数中的所有有效位整体右移,再使用符号位的值填充空位,超出的值将被丢弃;
其它运算符
  • in:如果在指定的对象中找到元素值,则返回True、否则False;
  • not in:如果在指定的对象中没有找到元素值,则返回True、否则False;
  • is:判断两个标识符是否引用同一个对象;
  • is not:判断两个标识符是否引用不同的对象;

样例:

'''
输入一个字符串,将小写字符转换为大写字符,将大写字符转换为小写字符。
'''
str = input("请输入字符:"# 接收一个字符串
stri = ''                             # 定义一个空字符串,用于存储转换后的结果
for cha in str:                       # 循环遍历字符串
    if 'a' <= cha <= 'z':             # 判断字符是否是小写
        cha1 = ord(cha) - 32         # 将字符转换为ASCII值,并减32变成大写
    elif 'A' <= cha <= 'Z':        # 判断字符是否为大写
        cha1 = ord(cha) + 32       # 将字符转换为ASCII值,并加32变成小写
    str1 += chr(cha1)              # 将ASCII 值转换为字符型
print(str1)
'''
要求用户输入3个字符串,并比较3个字符串的大小。
2个字符串比较是根据从左到右的顺序,依次比较相应位置字符的ASCII码值的大小
'''
str1 = input('input string')    
str2 = input('input string')
str3 = input('input string')
print('before sored:',str1,str2,str3) # 打印输入后的三个字符串顺序
if str1 > str2:                     # 依次判断两个字符的大小
    str1,str2 = str2,str1           # 交换两个字符串
if str1 > str3:
    str1,str3 = str3,str1
if str2 > str3:
    str2,str3 = str3,str2
print('after sorted:',str1,str2,str3) # 打印排序后的三个字符串顺序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有请小发菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值