基本概念
运算符:根据特定的算法对操作数执行运算, 并返回计算结果的符号
操作数:参与运算的对象
表达式:计算的式子
1.算术运算
+ 针对数字:加法。针对字符串:连接。针对复合型数据:合并。
- 减
* 针对数字:乘 。针对字符串:连接。
** 幂
/ 除(结果为浮点数)
// 求余取整(向下取整)
% 取模,返回除法的余数
注意
1./ // % 右侧的操作数不能为0
2.+ * 针对不同类型的值,会执行不同的运算
3.浮点数运算的精度问题
①可以采用round()四舍五入法
②使用decimal()
小练习
计算100以内的偶数和
sum = 0 for i in range(101): if i % 2 == 0: sum = sum +i print(sum)
案例:设计一个简单的四则运算器
#定义一个无限循环 while True: n1 = int(input("输入n1的值:")) #输入运算符 o = input("请输入[+ - * /]: ") n2 = int(input("输入n2的值: ")) #定义字典,不同的运算符,不同的计算方法 d = { '+' : n1+n2, '-' : n1-n2, '*' : n1*n2, '/' : n1/n2 } #输出结果,使用get方法读取字典的操作符 result = d.get(o,"运算符有误") #打印结果,以整数的形式打印结果 print("result: %d"%result) #输出空行 print() c = input("您是否继续?y/n: ") if c == 'y': print() continue elif c == 'n': break else: print("您输入有误")
2.赋值运算
语法
左值(参数、变量、对象的属性、对象的元素)= 表达式
形式
简单的赋值 =
附加操作赋值 +=(先相加后赋值)、-=、*=、/=、%=、//=、**=
3.比较运算
比较运算也称关系运算,有两个操作数
大小比较(数)
比较大小关系的两个操作数必须是类型相同的。如果是数字直接比较大小,如果是字符,第一个相同比较第二个。返回的结果为True或者False
小练:输入三个整数,比较数的大小,找出最大的数
x = int(input("请输入x: ")) y = int(input("请输入y: ")) z = int(input("请输入z: ")) if x > y and x > z : print("最大的数是x值为: %d"%x) elif y>x: print("最大的数是y值为: %d" % y) else: print("最大的数是z值为: %d" %z)
小练:输入三个数,将这三个数进行排序
x = int(input("请输入x: ")) y = int(input("请输入y: ")) z = int(input("请输入z: ")) if x > y : t = x x = y y = t if x>z: t = x x = z z = t if y>z: t = y y = z z = t print("请输出三个的大小: %d %d %d"%(x,y,z))
比较字符串的大小
如果区分大小写,小写一般大于大写。如果不区分大小写,建议使用upper()或lower()方法把字符串同一转换为大写或小写。
小练:输入三个字符串,比较字符串的大小
x = input("输入第一个字符串值为:") y = input("输入第二个字符串值为:") z = input("输入第三个字符串值为:") print(x) print(y) print(z) if x > y : #利用数组交换两个字符串 x,y=y,x elif x > z : x,z=z,x if y > z: y,z=z,y print(x) print(y) print(z)
相等比较
两个操作数不限制类型,如果类型不相同,则不相等,直接返回False。如果类型相同,在比较是否相同,如果相同则返回True.
小练:根据成绩单,输出平均分,输出最高分以及最高分学生名单,输出优秀学生名单
#通过字典定义成绩单 d={ "王五":89, "李四":56, "张三":66, "胡六":85 } sum = 0 max = 0 max_name = " " print("优秀学生名单:") for i in d : sum += d[i] if d[i] >= 85: #输出优秀学生的名单和成绩,名单是字符串表示,成绩是(两位浮点数表示) print(" %s(%.2f)"%(i,d[i])) if d[i] > max : max = d[i] max_name = i print() #输出平均成绩,成绩是(两位浮点数表示) print("平均分成绩:%.2f"%(sum/len(d))) #输出最高分的分数和名单,分数是两位浮点数表示,名单是字符串形式输出 print("最高分成绩:%.2f(%s)"%(d[i],i))
4.逻辑运算
逻辑运算又称布尔代数,就是布尔值的算术运算,包含逻辑与(and)逻辑或(or)逻辑非(not)
1.逻辑与运算
and是AND的布尔操作,当两个操作数都为True时,才返回True.
逻辑与是短路逻辑,左侧表达式为False,结果返回Fase.
操作数可以是任意类型的表达式,最后返回的结果为运算值,而不是布尔值
小练习:
学校招特长生,设定三个标准:
1.钢琴在九级或以上,并且计算机在四级或以上,直接通过
2.文化课非常优秀,钢琴在五级或以上,并且计算机在二级或以上直接通过
3.文化课及格,钢琴在七级或以上,并且计算机在三级或以上直接通过
id = int(input("考生号(2024001~2024999):")) whk = float(input("文化课成绩: ")) gq = int(input("钢琴级数(1~10):")) jsj= int(input("计算机级数(1~6): ")) if id >2024000 and 20241000: if (gq >= 9 and jsj >= 4) or (whk >= 90 and gq >= 5 and jsj >= 2) or (whk >= 60 and gq >= 7 and jsj >= 3): print("恭喜你,被录取了!") else: print("很遗憾,没有被录取!") else: print("考号输入有误,请重新输入!")
2.逻辑或运算
or是OR的布尔操作,当两个操作数只有一个为True时,就返回True.
逻辑或是短路逻辑,左侧表达式为True,直接返回结果,右侧表达式不需要进行计算.
操作数可以是任意类型的表达式,最后返回的结果为运算值,而不是布尔值
小练习:
设置用户管理模块,对身份进行鉴别
id = int(input("请输入你的级别(1~10):")) s = ( id ==1 and ["游客"] or id ==2 and ["普通会员"] or id ==3 and ["高级会员"] or id ==4 and ["管理员"] or ["无效输入"] )[0] print(s)
3.逻辑非
not是布尔取反操作
只有一个操作数,把操作数转换为布尔值,取反并输出结果
两次逻辑非运算等于把操作数转换为布尔值
逻辑非运算的返回值一定是布尔值
5.位运算
位运算是对二进制数进行逐位运算
逻辑位运算:位与(&)、位或(|)、位异或(^)、位非(~)
移位运算:左移(<<)、右移(>>)
逻辑位运算:
1.位于运算(&)
对二进制操作数的逐位进行计算
两个数结果都为一,则为一,否则为零
2.位或运算(|)
两个数位都为零才为零,否则为一
3.位异或运算(^)
两个数相同返回零,不同返回一
4.位非运算(~)
对二进制数进行取反操作
例如:12= 0b1100 在前面补充零,前面为零是正数,为一是负数
~0b1100 = 0b10011 (-13)
移位运算:
1.<<运算
将二进制数整体向左移几位,符号位保持不变,右侧空出的位置,自动填零,如果超出32位,自动放弃。
2.>>运算
将二进制数整体向右移动几位,有符号,左侧空出位置自动补充
6.其他运算
成员运算
in not in 适用于字符串、列表、元组
小练习:
检测用户输入的数字是否在指定的列表,如果不在,则添加在列表,已经存在不添加。
l = [1,2,3,4,5,6,7,8,9] while True: n = int(input("输入一个数字: ")) if n in l: print("数字已存在") else: l.append(n) print("输入的数字已经被添加到列表") print("是否继续输入?y/n") ok = input() if ok == "y" : continue elif ok == "n" : print("l") break else : print("输入有误")
身份运算
is is not
is 是比较两个对象是否相同(内存地址)
== 是比较两个对象是否相等(对象的值和类型是否相等)
id() 可以获取对象的内存地址,is 比较俩个对象的内存地址是否相同
对于可变数据,列表、字典、集合,即使值相同,也是不同的对象。
对于不变数据,值相同,则他们是相同的对象,如数字、字符串、元组。
7.表达式
定义表达式
简单的表达式:一个值或者一个变量
复杂的表达式:由简单的表达式组成,复杂的表达式可以嵌套成更复杂的表达式
表达式的运算:从内到外,依次上移
表达式的运算顺序:从左到右,可以使用小括号改变运算顺序
运算符的优先级
()、【】、{}
x[index]、x[index:index]、()、x.attr
##下标索引、切片、调用函数、对象的属性
await
**
~
* / % // @
+ -
>> <<
&
|
^
in not in is is not < < = > >=
!= ==
not
and
or
if
lambda
条件表达式
a,b = 1,2 if a>b : c = a else: c = b
1.使用逻辑与和逻辑或的方式进行运算
a,b = 1,2 c = (a>b and [a] or [b])[0]
2.利用表结构来设计
[False表达式,True表达式][条件表达式]
当条件表达式为True,转换为1,读取第二个元素
当条件表达式为False,转换为0,读取第一个元素
a,b = 1,2 c = [b,a][a>b]
3.条件表达式运算符(推荐)
True 表达式 if条件表达式 else False表达式
a,b = 1,2 c = a if a>b else b