## 第004课:Python语言元素之运算符 Python语言支持很多种运算符,我们先用一个表格为大家列出这些运算符,然后选择一些马上就会用到的运算符为大家进行讲解。 | 运算符 | 描述 | | ------------------------------------------------------------ | ------------------------------ | | `[]` `[:]` | 下标,切片 | | `**` | 指数 | | `~` `+` `-` | 按位取反, 正负号 | | `*` `/` `%` `//` | 乘,除,模,整除 | | `+` `-` | 加,减 | | `>>` `<<` | 右移,左移 | | `&` | 按位与 | | `^` `\|` | 按位异或,按位或 | | `<=` `<` `>` `>=` | 小于等于,小于,大于,大于等于 | | `==` `!=` | 等于,不等于 | | `is` `is not` | 身份运算符 | | `in` `not in` | 成员运算符 | | `not` `or` `and` | 逻辑运算符 | | `=` `+=` `-=` `*=` `/=` `%=` `//=` `**=` `&=` `|=` `^=` `>>=` `<<=` | (复合)赋值运算符 | >**说明:** 上面这个表格实际上是按照运算符的优先级从上到下列出了各种运算符。所谓优先级就是在一个运算的表达式中,如果出现了多个运算符,应该先执行哪个运算再执行哪个运算的顺序。在实际开发中,如果搞不清楚运算符的优先级,可以使用圆括号来确保运算的执行顺序。 ### 算术运算符 Python中的算术运算符非常丰富,除了大家最为熟悉的加减乘除之外,还有整除运算符、求模(求余数)运算符和求幂运算符。下面的例子为大家展示了算术运算符的使用。 ```Python """ 算术运算符 Version: 0.1 Author: 骆昊 """ print(321 + 123) # 加法运算 print(321 - 123) # 减法运算 print(321 * 123) # 乘法运算 print(321 / 123) # 除法运算 print(321 % 123) # 求模运算 print(321 // 123) # 整除运算 print(321 ** 123) # 求幂运算 ``` ### 赋值运算符 赋值运算符应该是最为常见的运算符,它的作用是将右边的值赋给左边的变量。下面的例子演示了赋值运算符和复合赋值运算符的使用。 ```Python """ 赋值运算符和复合赋值运算符 Version: 0.1 Author: 骆昊 """ a = 10 b = 3 a += b # 相当于:a = a + b a *= a + 2 # 相当于:a = a * (a + 2) print(a) # 算一下这里会输出什么 ``` ###比较运算符和逻辑运算符 比较运算符有的地方也称为关系运算符,包括`==`、`!=`、`<`、`>`、`<=`、`>=`,我相信没有什么好解释的,大家一看就能懂,需要提醒的是比较相等用的是`==`,请注意这里是两个等号,因为`=`是赋值运算符,我们在上面刚刚讲到过,`==`才是比较相等的运算符;比较不相等用的是`!=`,这不同于数学上的不等号,Python 2中曾经使用过`<>`来表示不等关系,大家知道就可以了。比较运算符会产生布尔值,要么是`True`要么是`False`。 逻辑运算符有三个,分别是`and`、`or`和`not`。`and`字面意思是“而且”,所以`and`运算符会连接两个布尔值,如果两个布尔值都是`True`,那么运算的结果就是`True`;左右两边的布尔值有一个是`False`,最终的运算结果就是`False`。相信大家已经想到了,如果`and`左边的布尔值是`False`,不管右边的布尔值是什么,最终的结果都是`False`,所以在做运算的时候右边的值会被跳过(短路处理),这也就意味着在`and`运算符左边为`False`的情况下,右边的表达式根本不会执行。`or`字面意思是“或者”,所以`or`运算符也会连接两个布尔值,如果两个布尔值有任意一个是`True`,那么最终的结果就是`True`。当然,`or`运算符也是有短路功能的,在它左边的布尔值为`True`的情况下,右边的表达式根本不会执行。`not`运算符的后面会跟上一个布尔值,它的作用是得到与该布尔值相反的值,也就是说,`not`后面的布尔值如果是`True`,运算结果就是`False`;而`not`后面的布尔值如果是`False`,运算结果就是`True`。 ```Python """ 比较运算符和逻辑运算符的使用 Version: 0.1 Author: 骆昊 """ flag0 = 1 == 1 flag1 = 3 > 2 flag2 = 2 < 1 flag3 = flag1 and flag2 flag4 = flag1 or flag2 flag5 = not (1 != 2) print('flag0 =', flag0) # flag0 = True print('flag1 =', flag1) # flag1 = True print('flag2 =', flag2) # flag2 = False print('flag3 =', flag3) # flag3 = False print('flag4 =', flag4) # flag4 = True print('flag5 =', flag5) # flag5 = False ``` > **说明**:比较运算符的优先级高于赋值运算符,所以`flag0 = 1 == 1`先做`1 == 1`产生布尔值`True`,再将这个值赋值给变量`flag0`。`print`函数可以输出多个值,多个值之间可以用`,`进行分隔,输出的内容之间默认以空格分开。 ### 运算符的例子 #### 例子1:华氏温度转换为摄氏温度。 > **提示**:华氏温度到摄氏温度的转换公式为:`C = (F - 32) / 1.8`。 ```Python """ 将华氏温度转换为摄氏温度 Version: 0.1 Author: 骆昊 """ f = float(input('请输入华氏温度: ')) c = (f - 32) / 1.8 print('%.1f华氏度 = %.1f摄氏度' % (f, c)) ``` > **说明**:在使用`print`函数输出时,也可以对字符串内容进行格式化处理,上面`print`函数中的字符串`%.1f`是一个占位符,稍后会由一个`float`类型的变量值替换掉它。同理,如果字符串中有`%d`,后面可以用一个`int`类型的变量值替换掉它,而`%s`会被字符串的值替换掉。除了这种格式化字符串的方式外,还可以用下面的方式来格式化字符串,其中`{f:.1f}`和`{c:.1f}`可以先看成是`{f}`和`{c}`,表示输出时会用变量`f`和变量`c`的值替换掉这两个占位符,后面的`:.1f`表示这是一个浮点数,小数点后保留1位有效数字。 > > ```Python > print(f'{f:.1f}华氏度 = {c:.1f}摄氏度') > ``` #### 例子2:输入圆的半径计算计算周长和面积。 ```Python """ 输入半径计算圆的周长和面积 Version: 0.1 Author: 骆昊 """ radius = float(input('请输入圆的半径: ')) perimeter = 2 * 3.1416 * radius area = 3.1416 * radius * radius print('周长: %.2f' % perimeter) print('面积: %.2f' % area) ``` #### 例子3:输入年份判断是不是闰年。 ```Python """ 输入年份 如果是闰年输出True 否则输出False Version: 0.1 Author: 骆昊 """ year = int(input('请输入年份: ')) is_leap = year % 4 == 0 and year % 100 != 0 or year % 400 == 0 print(is_leap) ``` > **说明**:比较运算符会产生布尔值,而逻辑运算符`and`和`or`会对这些布尔值进行组合,最终也是得到一个布尔值,闰年输出`True`,平年输出`False`。 ### 总结 通过上面的例子相信大家感受到了,学会使用运算符以及由运算符构成的表达式,就可以帮助我们解决很多实际的问题,**运算符和表达式对于任何一门编程语言都是非常重要的**。 > **温馨提示**:学习中如果遇到困难,可以看看我们为大家录制的入门视频,视频链接:https://pan.baidu.com/s/1Tu8wy9IExP_Co6CurVr2Pg,密码:rbao,也可以加**QQ交流群**询问。 > > 付费群:**789050736**,群一直保留,供大家学习交流讨论问题。 > > 免费群:**151669801**,仅供入门新手提问,定期清理群成员。