Python-一级5

运算符

 mindmap
 本章知识点
  ① 算术运算符
  ① 逻辑运算符
  ① 关系运算符
  比较运算符
  赋值运算符
  位运算符
    按位 & 与
    按位 | 或
    按位 ^ 异或
    接位 ~ 取反
  运算符优先级

算术运算符

用于处理四则运算的符号


运算符 描述 示例 结果
+ 加法 1+1 2
- 减法 1-1 0
* 乘法 1*1 1
/ 除法 1/1 1
() 括号运算符 (1+2)*3 9
补充
运算符 描述 示例 结果
// 整除 10//3 3
% 取余 10%3 1
** 幂运算 2**4 16

算术运算符优先级

  • 第一级:**,()
  • 第二级:*,/,%,//
  • 第三级:+,-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var = 2
num = 3
# 加法
print('加法:', var + var) #加法: 6
# 减法
print('减法:', var - var) #减法: 0
# 乘法
print('乘法:', var * var) #乘法: 9
# 除法
print('除法:', var / var) #除法: 1.0
print('-----------------')
# 取整
print('取整:', var // num) #取整: 3
# 取余
print('取余:', var % num) #取余: 1
# 幂运算
print('幂运算:', var ** num) #幂运算: 1000

# 优先级
print('优先级:', var + var ** num / var * num - num)

加法运算符

1
2
3
4
age = input('请输入您的年龄:')
print('今年你'+age+'岁了') #+实现字符串拼接
# 思考:字符串与数值是否可以进行加法运算?
print('2年后你'+str(int(age)+2)+'岁了') #+运算与字符串拼接

比较运算符【关系运算符】

生活中,我们会遇到年龄、身高、智商等数据的比较。网站或ATM 机,我们经常需要输入密码,进行密码的比较。这些都需要使用比较运算符。

%%{init: {"pie": {"textPosition": 0.5}, "themeVariables": {"pieOuterStrokeWidth": "5px"}} }%%
 pie title 比较运算符——知识比重图
    "数学能力" : 1
    "逻辑推理能力" : 1
    "纠错能力" : 1
    "编程能力" : 1
    "动手能力" : 2

Python 中运行比较运算符表达式,返回一个布尔类型的值。

数学 Python 描述 示例 结果
> > 大于 68>33 True
< < 小于 68<33 False
= == 等于 68==33 False
$\neq$ != 不等于 68!=33 True
$\ge$ >= 大于等于 68>=33 True
$\le$ <= 小于等于 68<=33 False
数字类型数据的比较
> 比较两位计算机语言开发者的年龄
1
2
3
4
5
6
7
8
guido_age = 68
mitchel_age = 67
print('guido_age > mitchel_age',guido_age > mitchel_age) #True
print('guido_age < mitchel_age',guido_age < mitchel_age) #False
print('guido_age == mitchel_age',guido_age == mitchel_age) #False
print('guido_age != mitchel_age',guido_age != mitchel_age) #True
print('guido_age >= mitchel_age',guido_age >= mitchel_age) #True
print('guido_age <= mitchel_age',guido_age <= mitchel_age) #False
字符串类型间的比较
1
2
3
4
5
print('b>a', 'b'>'a') #True
print('A<a', 'A'>'a') #False
print('ab<ac','ab'<'ac') #True
print('guido == guido', 'guido' == 'guido') #True
print('guido == mitchel', 'guido' != 'mitchel') #True

思考:为什么呢?计算机怎么这么无聊,要判断两字符串?
homework
登录 babycoding 学习网站的密码(John1903),怎么判断用户输入的密码是否正确?

关系运算符与算术运算符的混合运算,先算算术运算符,再算关系运算符。结果一定是 True 或 False

1
print(68+33>68-33) #True
and 可以连写
1
2
a = 33
68>a>32 #a>32 and 68>a

逻辑运算符

运算符 描述 用法 综合方向
and 逻辑与 expression1 and expression2 从左到右
or 逻辑或 expression1 or expression2 从左到右
not 逻辑非 not expression 从右到左

逻辑运算符优先级:not > or > and

两个表达式都为 True

1
2
3
4
5
expression1 = True
expression2 = True
print(expression1 and expression2) #True
print(expression1 or expression2) #True
print(not expression1) #False
True False

1
2
3
4
5
expression1 = False
expression2 = True
print(expression1 and expression2) #False
print(expression1 or expression2) #True
print(not expression1) #True
False False

1
2
3
4
5
expression1 = False
expression2 = False
print(expression1 and expression2) #True
print(expression1 or expression2) #False
print(not expression1) #True

思考:表达式,expression1 expression2 是表达式吗?
思考:什么是表达式

1
2
3
print(68 > 33 and 33 < 68) #True
print(68 > 33 and not(33 < 68)) #False
print(68>33 and 68<33 or not(68>33)) #Flase

赋值运算符

运算符 描述 示例
= 赋值运算 x=y x=y
+= 加赋值 x+=y x=x+y
-= 减赋值 x-=y x=x-y
*= 乘赋值 x*=y x=x*y
/= 除赋值 x/=y x=x/y
%= 取余赋值 x%=y x=x%y
**= 幂赋值 x**=y x=x**y
//= 整除赋值 x//=y x=x//y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 声明变量
# 赋值运算
x = 2
y = 3

# 加赋值
x+=y #相当于 x=x+y
print(x) #5

# 减赋值
x-=y #相当于 x=x-y
print(x) #2

# 乘赋值
x*=y #相当于 x=x*y
print(x) #6

# 除赋值
x/=y #相当于 x=x/y
print(x, type(x)) #2.0 <class 'float'>

# 取余赋值
x%=y #相当于 x=x%y
print(x) #2.0

# 整除赋值
x//=y #相当于 x=x//y
print(x) #0.0

# 幂运算符
x**=y #相当于 x=x**y
print(x) #8.0

其它赋值操作
1
2
3
4
5
6
7
8
9
10
11
# 链式赋值
x=y=z=1
print(x,y,z) # 1 1 1

# 解包赋值
a,b=1,2
print(a,b) #1 2

# 解包赋值应用——交换变量的值
a,b=b,a
print(a,b) #2 1

homework:

  • x=5,y=3,执行 x,y=y,x 之后,x 和 y 的值分别是什么?

位运算符

二进制数进行运算。!关于二进制更多。。。

按”位与“运算(&)

  • 先计算出两个十进数的二进制;
  • 接着数位对齐;
  • 进行运算。
    1
    2
    3
    4
    5
    6
    7
    # 定义变量
    variable = 8
    variable_ = 2

    # 十进制数转二进制
    print(bin(variable)) #0b1000
    print(bin(variable_)) #ob10

    按位 & 运算,两个二进制数进行 & 运算,两个数对应数位上都是 1,结果为 1;否则为 0.

    1
    2
    3
    4
      1000
    & 0010
    ——————
    0000
    1
    2
    print(int('0000', 2)) #0
    print(8&2) #0

按位 | 运算,两个二进制数进行 | 运算,两个数对应数位上有一个是 1,结果为 1;否则为 0.

1
2
3
4
  1000
| 0010
——————
1010
1
2
print(int('1010', 2)) #10
print(8|2) #10

按位异或 ^,两个二进制数进行 ^ 运算,两个数对应数位上数字相同,结果为 0;否则为 1

1
2
3
4
  1000
^ 0010
——————
1010
1
2
print(int('1010', 2)) #10
print(8 ^ 2) #10

按位取反 ~,操作数每个数位进行取反操作

1
2
3
~ 0000 0010
————————————
1111 1101
1
2
# print(int('11111101', 2)) #5
print(~2) # -3

左移位 运算 <<,将一个二进制数向左移动指定位数,左边(高位)溢出丢弃,右边(低位)空出位置补 0.

0 0 0 0 1 0 0 0
<—— 左移 2 位
0 0 0 0 1 0 0 0 0 0
1
2
print(int('00100000', 2)) #32 
print(8<<2) #32 相当于 8 * 2 * 2 = 32

右移位 运算 >>,将二进制数向右移动指定位数,右边(低位)溢出丢弃,左边(高位)最高位是 0,表示正数,继续补0;最高位数 1,为负数,则补1

0 0 0 0 1 0 0 0
>> 右移 2 位
0 0 0 0 1 0 1 0 0 0
1
2
print(int('00000010', 2)) #32 
print(8>>2) #2 相当于 8 // 2 // 2 = 2

右移位 运算 >>,将二进制数向右移动指定位数,右边(低位)溢出丢弃,左边(高位)最高位数 1,为负数,则补1

1
print(-8>>2) #2 相当于 8 // 2 // 2 = -2

运算符优先级

序号 运算符 描述
1 ** 幂运算
2 ~,+,- 取反,正号,负号
3 *,/, %, // 算术运算符
4 +,- 算术运算符
5 <<, >> 位运算符,左移,右移
6 & 按位 &
7 ^ 按位 ^
8 | 按位 |
9 <,<=,>,>=,!=,== 比较运算符
10 = 赋值运算符

homework

  • 键盘输出一个4位数,并分别输出个、十、百、千位上的数字(两种方式:1. 可以采用字符串索引;2. 采用算术运算)
  • 根据父母身高,预测孩子身高(算法:父亲身高+母亲身高)*0.54