Python学习第四课-运算符

一.运算符的概念

运算符⽤于执⾏程序代码运算,会针对⼀个以上操作数项⽬来进⾏运算。例如:2+3,其操作数是2和3,⽽运算符则是“+”。

二.运算符的分类

1.算术运算符

以下假设变量: a=10,b=20:

运算符描述实例
+加 - 两个对象相加a + b 输出结果 30
-减 - 得到负数或是一个数减去另一个数a - b 输出结果 -10
*乘 - 两个数相乘或是返回一个被重复若干次的字符串a * b 输出结果 200
/除 - x除以yb / 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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MIANHUA_007

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

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

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

打赏作者

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

抵扣说明:

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

余额充值