Python学习第四课-运算符
一.运算符的概念
运算符⽤于执⾏程序代码运算,会针对⼀个以上操作数项⽬来进⾏运算。例如:2+3,其操作数是2和3,⽽运算符则是“+”。
二.运算符的分类
1.算术运算符
以下假设变量: a=10,b=20:
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 - 两个对象相加 | a + b 输出结果 30 |
- | 减 - 得到负数或是一个数减去另一个数 | a - b 输出结果 -10 |
* | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 200 |
/ | 除 - x除以y | b / a 输出结果 2 |
% | 取余 - 返回除法的余数 | b % a 输出结果 0 |
** | 幂 - 返回x的y次幂 | a**b 为10的20次方, 输出结果 100000000000000000000 |
// | 取整除 - 返回商的整数部分(向下取整) | 9//2 输出结果为:4 |
#@author:mianhua
#@Time:2021/4/18 - 当前的系统日期。
#@File:算术运算符.py
#@IDE:PyCharm
a = 21
b = 10
c = 0
c = a + b
print("加法计算 c 的值为:", c)
c = a - b
print("减法计算 c 的值为:", c)
c = a * b
print("乘法计算 c 的值为:", c)
c = a / b
print("除法 c 的值为:", c)
c = a % b
print("取余运算 c 的值为:", c)
# 修改变量 a 、b 、c
a = 2
b = 3
c = a ** b
print("幂运算,2的3次方,c 的值为:", c)
a = 10
b = 5
c = a // b
print("整除运算,c 的值为:", c)
结果如下:
加法计算 c 的值为: 31
减法计算 c 的值为: 11
乘法计算 c 的值为: 210
除法 c 的值为: 2.1
取余运算 c 的值为: 1
幂运算,2的3次方,c 的值为: 8
整除运算,c 的值为: 2
2.赋值运算符
以下假设变量a为10,变量b为20:
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a 等效于 c = c + a |
-= | 减法赋值运算符 | c -= a 等效于 c = c - a |
*= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
/= | 除法赋值运算符 | c /= a 等效于 c = c / a |
%= | 取模赋值运算符 | c %= a 等效于 c = c % a |
**= | 幂赋值运算符 | c **= a 等效于 c = c ** a |
//= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
3.比较运算符(关系运算符)
以下假设变量a为10,变量b为20:
运算符 | 描述 | 实例 |
---|---|---|
== | 等于 - 比较对象是否相等 | (a == b) 返回 False。 |
!= | 不等于 - 比较两个对象是否不相等 | (a != b) 返回 true. |
> | 大于 - 返回x是否大于y | (a > b) 返回 False。 |
< | 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。 | (a < b) 返回 true。 |
>= | 大于等于 - 返回x是否大于等于y。 | (a >= b) 返回 False。 |
<= | 小于等于 - 返回x是否小于等于y。 | (a <= b) 返回 true。 |
4.逻辑运算符
4.1 not逻辑非
- 对于布尔值,⾮运算会对其进⾏取反操作,True变False,False变True
- 逻辑非:0 空串’’ None 还有一些表示空性的值都会转化为False,其他的所有值都可以转换为True
a =1
a = not a
print(a)
a = not 0
print(a)
a = not None
print(a)
a = not {}
print(a)
a = not []
print(a)
a = not null
print(a)
结果如下:
False
True
True
True
True
Traceback (most recent call last):
File “/Users/mianhua/PycharmProjects/python/Python基础/day04/逻辑运算符.py”, line 13, in
a = not null
NameError: name ‘null’ is not defined
4.2 and逻辑与
- 逻辑与的布尔值的运算:and可以对符号两侧的值进⾏与运算。 只有在符号两侧的值都为True时,才会返回True,只要有⼀个False就返回False
- 逻辑与运算 :逻辑与是找False,有直接返回False, 没找到则返回True
a = 2 > 1 and 5 > 4
print(a)
a = 1 > 2 and 5 > 4
print(a)
a = 2 > 1 and 3 >4
print(a)
结果如下
True
False
False
4.3 or逻辑或
- 或运算两个值中只要有一个True,就会返回True
- 或运算是找True的,如果第一个值为True, 则不再看第二 个值,找不到则为False
a = 2 > 1 or 5 > 4
print(a)
a = 1 > 2 or 5 > 4
print(a)
a = 2 > 1 or 3 >4
print(a)
结果如下:
True
True
True
4.4非布尔值的与或运算
- 当我们对⾮布尔值进⾏与或运算时,Python会将其当做布尔值运算,最终会返回原值
- None,0和空值返回Flase,其它的都是返回True
- ⾮布尔值与运算的规则
- 与运算是找False的,如果第⼀个值是False,则不看第⼆个值,直接返回第⼀个值,否则返回第⼆个值
a = 1 and 2
print(a)
a = 1 and 0
print(a)
a = None and 0
print(a)
结果如下:
2
0
None
- ⾮布尔值或运算的规则
- 或运算是找True的,如果第⼀个值是True,则不看第⼆个值。如果第⼀个值是True,则直接返回第⼀个值,否则返回第⼆个值
a = 1 or 2
print(a)
a = 1 or 0
print(a)
a = 0 or 1
print(a)
a = 0 or 2
print(a)
a = 0 or None
print(a)
a = 2 or None
print(a)
结果如下:
1
1
1
2
None
2
5.条件运算符(三元运算符)
使用 if else 实现三元运算符(条件运算符)的格式如下:
exp1 if contion else exp2
- condition 是判断条件,exp1 和 exp2 是两个表达式。如果 condition 成立(结果为真),就执行 exp1,并把 exp1 的结果作为整个表达式的结果;如果 condition 不成立(结果为假),就执行 exp2,并把 exp2 的结果作为整个表达式的结果。
语句:max = a if a>b else b 的含义是:
如果 a>b 成立,就把 a 作为整个表达式的值,并赋给变量 max;
如果 a> b 不成立,就把 b 作为整个表达式的值,并赋给变量 max。
#@author:mianhua
#@Time:2021/4/18 - 当前的系统日期。
#@File:条件运算符.py
#@IDE:PyCharm
#!/usr/bin/python3
a = 20
b = 30
#res= a if a > b else b
res= print('比较结果为a>b,'+'所以c+50='+str(a+50)) if a > b else print('比较结果为b>a,'+'所以b+50='+str(b+50))
结果如下:
比较结果为b>a,所以b+50=80
三元运算符支持嵌套,如此可以构成更加复杂的表达式。在嵌套时需要注意 if 和 else 的配对,例如:
a if a>b else c if c>d else d
应该理解为:
a if a>b else ( c if c>d else d )
#使用 Python 三目运算符判断两个数字的关系:
a = int( input("Input a: ") )
b = int( input("Input b: ") )
print("a大于b") if a>b else ( print("a小于b") if a<b else print("a等于b") )
运行结果如下:
Input a: 20
Input b: 30
a小于b
三.运算符的优先级
以下表格列出了从最高到最低优先级的所有运算符:
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND’ |
^ | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
四.切片
4.1 可切片对象的索引方式
包括:正索引和负索引两部分,如下图所示,以list对象a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:
4.2切片操作
切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step)。当只有一个“:”时,默认第三个参数step=1;当一个“:”也没有时,start_index=end_index,表示切取start_index指定的那个元素。
object[start_index:end_index:step]
-
step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。
-
start_index:表示起始索引(包含该索引对应值);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。
-
end_index:表示终止索引(不包含该索引对应值);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”。
以下示例均以list对象a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#1.切取单个元素 当索引只有一个数时,表示切取某一个元素。
print(a[0])
print(a[-4])
#2. 切取完整对象
print(a[:])#从左往右
print(a[::])#从左往右
print(a[::-1])#从右往左
#3. start_index和end_index全为正(+)索引的情况
print(a[1:6])#step缺省为1,从左往右取值,start_index=1到end_index=6同样表示从左往右取值。
print(a[1:6:-1])
print(a[6:2])
print(a[:6])
print(a[:6:-1])#step=-1,从右往左取值,而start_index省略时,表示从端点开始,因此这里的端点是“终点”,即从“终点”值9开始一直取到end_index=6(该点不包括)。
print(a[6:])#step=1,从左往右取值,从start_index=6开始,一直取到“终点”值9。
print(a[6::-1])#step=-1,从右往左取值,从start_index=6开始,一直取到“起点”0。
#4. start_index和end_index全为负(-)索引的情况
print(a[-1:-6])#step=1,从左往右取值,而start_index=-1到end_index=-6决定了从右往左取值,两者矛盾,所以为空。
print(a[-1:-6:-1])#step=-1,从右往左取值,start_index=-1到end_index=-6同样是从右往左取值。
print(a[-6:-1])#step=1,从左往右取值,而start_index=-6到end_index=-1同样是从左往右取值。
print(a[:-6])#step=1,从左往右取值,从“起点”开始一直取到end_index=-6(该点不包括)。
print(a[:-6:-1])#step=-1,从右往左取值,从“终点”开始一直取到end_index=-6(该点不包括)。
print(a[-6:])#step=1,从左往右取值,从start_index=-6开始,一直取到“终点”。
print(a[-6::-1])#step=-1,从右往左取值,从start_index=-6开始,一直取到“起点”。
#5. start_index和end_index正(+)负(-)混合索引的情况
print(a[1:-6])#start_index=1在end_index=-6的左边,因此从左往右取值,而step=1同样决定了从左往右取值,因此结果正确
print(a[1:-6:-1])#start_index=1在end_index=-6的左边,因此从左往右取值,但step=-则决定了从右往左取值,两者矛盾,因此为空。
print(a[-1:6])#start_index=-1在end_index=6的右边,因此从右往左取值,但step=1则决定了从左往右取值,两者矛盾,因此为空。
print(a[-1:6:-1])#start_index=-1在end_index=6的右边,因此从右往左取值,而step=-1同样决定了从右往左取值,因此结果正确。
#6. 多层切片操作
print(a[:8][2:5][-1:])
#>>> [4]
#相当于:
#a[:8]=[0, 1, 2, 3, 4, 5, 6, 7]
#a[:8][2:5]= [2, 3, 4]
#a[:8][2:5][-1:] = [4]
#理论上可无限次多层切片操作,只要上一次返回的是非空可切片对象即可。
#7. 切片操作的三个参数可以用表达式
print(a[2+1:3*2:7%3])
#[3, 4, 5]
#即:a[2+1:3*2:7%3] = a[3:6:1]
结果如下:
0
6
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[1, 2, 3, 4, 5]
[]
[]
[0, 1, 2, 3, 4, 5]
[9, 8, 7]
[6, 7, 8, 9]
[6, 5, 4, 3, 2, 1, 0]
[]
[9, 8, 7, 6, 5]
[4, 5, 6, 7, 8]
[0, 1, 2, 3]
[9, 8, 7, 6, 5]
[4, 5, 6, 7, 8, 9]
[4, 3, 2, 1, 0]
[1, 2, 3]
[]
[]
[9, 8, 7]
[4]
[3, 4, 5]
五.作业
#@author:mianhua
#@Time:2021/4/18 - 当前的系统日期。
#@File:作业1.py
#@describition:以4种格式化字符串的方式来实现521 xxx嫁给我好吗?
girl=input("请输入女孩姓名:")
print("521 "+girl+" 嫁给我好吗")#拼串
print("521 %s 嫁给我好吗"%girl)#占位符
print(f"521 {girl} 嫁给我好吗")#f变量}
print("521 {} 嫁给我好吗".format(girl))#.fromat()
结果如下:
请输入女孩姓名:春
521 春 嫁给我好吗
521 春 嫁给我好吗
521 春 嫁给我好吗
521 春 嫁给我好吗
#@author:mianhua
#@Time:2021/4/18 - 当前的系统日期。
#@File:作业2.py
#@describition:现在有a b c三个变量,三个变量中分别保存有三个数值,请通过条件运算符获取三个值中的最大值
a=input("请输入a的值:")
b=input("请输入b的值:")
c=input("请输入c的值:")
max= a if a>b and a>c else b if b>c else c
print(max)
结果如下:
请输入a的值:30
请输入b的值:20
请输入c的值:10
30
补充说明:这是一个嵌套的三元运算符。程序先对 a>b 求值,如果该表达式为 True,程序就返回 a,否则将继续执行 else 后面的内容,也就是:( b if b>c else c )
进入该表达式后,先判断 b>c 是否成立,如果 b>c 的结果为 True,将返回 b,否则返回 c。
六、作业升级版
## 格式化字符串案例:个人简介
name = input('请输入您的姓名:')
age = input('请输入您的年龄:')
height = input('请输入您的身高:')
weight = input('请输入您的体重:')
# 方式一:%占位符
result = "大家好,我叫%s,今年%s岁,身高%sCM,体重%s公斤" % (name, age, height,weight)
print(result)
result = "大家好,我叫%(name)s,今年%(age)s岁,身高%(height)sCM,体重%(weight)s公斤" %{"name": name, "age": age, "weight":weight, "height":height}
print(result) # 我的名字叫小明,我今年20岁了。
# 方式二:通过在字符串对象上调用format()函数
#不使用别名时,参数要按顺序传入:
result = "大家好,我叫{},今年{}岁,身高{}CM,体重{}公斤".format(name, age, height,weight)
print(result)
#使用别名时,可以根据别名传参,不需要按顺序传入:
result = "大家好,我叫{name},今年{age}岁,身高{height}CM,体重{weight}公斤".format(age=age, name=name, weight=weight, height=height)
print(result)
# 方式三:f{变量}
result = f"大家好,我叫{name},今年{age}岁,身高{height}CM,体重{weight}公斤"
print(result)
# 方式四 拼串
result = "大家好,我叫"+name+",今年"+age+"岁,身高"+height+"CM,体重"+weight+"公斤"
print(result)
结果如下:
请输入您的姓名:小红
请输入您的年龄:20
请输入您的身高:166
请输入您的体重:50
大家好,我叫小红,今年20岁,身高166CM,体重50公斤
大家好,我叫小红,今年20岁,身高166CM,体重50公斤
大家好,我叫小红,今年20岁,身高166CM,体重50公斤
大家好,我叫小红,今年20岁,身高166CM,体重50公斤
大家好,我叫小红,今年20岁,身高166CM,体重50公斤
大家好,我叫小红,今年20岁,身高166CM,体重50公斤
#@author:mianhua
#@Time:2021/4/18 - 打印随机数比较大小
#@File:作业2.py
#@describition:现在有a b c三个变量,三个变量中分别保存有三个数值,请通过条件运算符获取三个值中的最大值
import random
a=random.randint(1,100)
b=random.randint(1,100)
c=random.randint(1,100)
print("a={},b={},c={}".format(a,b,c))
max= print("a最大,a={}".format(a)) if a>b and a>c else print("b最大,b={}".format(b)) if b>c else print("c最大,c={}".format(c))
结果如下:
a=78,b=87,c=19
b最大,b=87