Python
运算符和表达式
表达式由一个或多个操作数通过操作符组合而成
运算符分类:
算术运算符(+、-、*、/、//、%)
a = 10
b = 20
print("a+b", a+b) # a+b 30
print("a-b", a-b) # a-b -10
print("a*b", a*b) # a*b 200
print("a/b", a/b) # a/b 0.5
# // =》取整除,a/b得到的结果进行向下取整
print("a//b", a//b) # a//b 0
# % => 模 取余数:a/b得到的余数
print("a%b", a%b) # a%b 10
赋值运算符
# 赋值运算符
a = 1
a += 1 # a=a+1
print("a += 1", a) # a += 1 2
a -= 1 # a=a-1
print("a -= 1", a) # a -= 1 1
# 参数中不能有赋值运算
# print("a -= 1", a-=1) 会报错
比较运算符 => 结果:bool值
a = 100
b = 200
print("a>b", a>b) # a>b False
print("a<b", a<b) # a<b True
print("a>=b", a>=b) # a>=b False
print("a<=b", a<=b) # a<=b True
print("a==b", a==b) # a==b False
print("a!=b", a!=b) # a!=b True
逻辑运算符 => 结果:bool
and
逻辑运算符 => 结果:bool
=> 实际返回:根据运算顺序返回表达式结果
a and b 如果a的bool值为True,且b的bool值也为True, a and b =True
运算顺序:
1、计算a表达式的结果,如果a表达式结果bool为False,直接返回a表达式的结果
print(0 and 10) # 0
# 因为先计算第一个表达式,所以先输出5,但是第一个表达式的值为None,直接短路不会执行第二个表达式,最终输出的就是第一个表达式的值
print(print("5") and 10) # 5
# None
2、计算a表达式的结果,如果a表达式结果bool为True,计算表达式b的结果并返回
print(10+10 and 10) # 10
print(10+10 and None) # False
# 10 => True
# 0 => False
print(10 and 0) # 0
or
a or b : 如果a或b任意一个表达式bool值为True,表达式bool值结果为True
1.计算a表达式的结果,如果a的bool值为True,直接返回a的值
print(20 or 10) # 20
2.计算a表达式的结果,如果a表达式结果bool为False,计算b的bool值
print(0 or 10) # 10
print(None or 10) # 10
not
not a =>只有两个结果=>True 或 False
print(not 10) # False
print(not 0) # True
短路逻辑
表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 。
表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。
若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。
# 从左往右运算,因为3为True,所以or后面的操作就不会进行,结果直接输出3
print(3 or print("5") and not print('abc')) # 3
# print输出都是None,前面的and运算输出False,这里没有短路,所以继续执行or后面的表达式
print("=============")
print(3 and print("5") or not print('abc')) # 5
# abc
# True not print('abc')的返回值是True
# 当and前面的表达式已经是False时,后面的and运算直接短路不执行,再计算or右边的表达式,先输出abc,再返回右边表达式的结果None
print(print("5") and print("3") or print('abc')) # 5
# abc
# None
# print(False or print("5") and not print('abc')) # 5
# None
# a and b and c and d
# 从左往右计算,计算表达式的布尔值为True继续向后计算,
# 表达式的布尔值为False直接返回表达式的结果
# a or b or c or d
# 从左往右计算,计算表达式的布尔值为False继续向后计算,
# 表达式的布尔值为True直接返回表达式的结果
# a and b or c
小练习
python 支持1<x<10这种表示方法
x = int(input("请输入x的值:"))
print(20<x<30 or x<-100)
y = int(input("请输入y的值:"))
if y % 2 == 0:
print("y为偶数")
else:
print("y为奇数")
成员关系运算符
成员关系运算符 in , not int
是否包含(字符串、[列表、元组、字典] => 容器类型)
mystr = "2022/03/26"
print('2022' in mystr) # True
对象实例测试运算符
is,not is => 判断两个对象是不是同一个对象(同一块内存区域)
实际就是比较id
is => id(a) == id(b)
not is => id(a) != id(b)
位运算符
# & => 按位与 => 同为1结果为1,否则为0
a = 2 # 0b10
b = 3 # 0b11
print(a & b) # 0b10 =>2
# | => 按位或 => 任意一个为1结果为1,否则为0
a = 4 # 0b100
b = 5 # 0b101
print(a | b) # 0b101 =>5
# ^ => 按位异或 => 两位相同结果为0,不相同结果为1
a = 4 # 0b100
b = 5 # 0b101
print(a ^ b) # 0b1 =>1
# ~ 按位取反
a = 1
print(~a)
# 左移运算<< 右移运算 >>
# 将数据变成2进制
# 0b10 << 2 => 0b1000
# 0b1011 >> 2 => 0b10
print(0b1011 >> 2) # 2
print(0b10) # 2
小练习
a = 3
b = 4
print(a%b+a/b*b==a) # False
str1 = "dadfdfabc"
print('abc' in str1) # True
print(bin(127)) # 0b1111111
print(int(0b11111)) # 31
print(127 >> 2) # 31
最后一题见短路逻辑
运算符优先级
# 指数运算
print(2**10) # 1024
# 正(+)和负(-)和~
print(-2**10) # -1024
# 当对于运算优先级不确认,可以使用()优先级提高
print((-4)**2) # 16
print(-4**2) # -16
print("5") # 5,值:None => False
程序流程控制
顺序结构
顺序结构是按照线性顺序自上而下依次执行的一种运行方式
import math
# 输入三条边长
a = int(input("请输入边长a:"))
b = int(input("请输入边长b:"))
c = int(input("请输入边长c:"))
# 计算半边长
p = (a+b+c)/2
# 计算面积
# sqrt函数 => 开平方
s = math.sqrt(p*(p-a)*(p-b)*(p-c))
print("三角形的面积是:", s)
选择语句
if…else
import math
# 输入三条边长
a = int(input("请输入边长a:"))
b = int(input("请输入边长b:"))
c = int(input("请输入边长c:"))
# 条件语句
if a>0 and b>0 and c>0 :
# 所有边长都大于0才可以计算
# 判断两边之和是否大于第三边
if a+b>c and a+c>b and b+c>a:
# 计算半边长
p = (a+b+c)/2
# 计算面积
# sqrt 开平方
s = math.sqrt(p*(p-a)*(p-b)*(p-c))
print("三角形的面积为", s)
else:
print("两边之和要大于第三边")
else:
# 条件不成立,执行下面代码
print("输入边长不能为0")
if…elif…else…
if a<=0 or b<=0 or c<=0 :
print("输入的边长必须大于0")
elif a+b<=c or b+c<=a or a+c<=b :
print("两边之和不大于第三边")
else:
# 计算半边长
p = (a + b + c) / 2
# 计算面积
# sqrt 开平方
s = math.sqrt(p * (p - a) * (p - b) * (p - c))
print("三角形的面积为", s)
输入一个学生的成绩,判断“合格、不合格"
score = int(input("请输入成绩"))
if score >= 60:
result = "合格"
else:
result = "不合格"
print(result)
# 三元运算 表达式简单时可用
result = "合格" if score >= 60 else "不合格"
print(result)
小练习
user = input("请输入用户名:")
passwd = getpass.getpass("请输入密码:")
tip = "登录成功" if user == "root" and passwd == "123456" else "登录失败"
print(tip)
循环语句
for循环
# for => 从一个可迭代对象iterable中一次去除所有的元素
# item =》临时变量
# 可迭代对象 =》 字符串,列表,元组
# "abcdsefes"
# [1,2,3,"abc"]
# (1,2,3,4)
# for item in 可迭代对象 :
# 循环体
# else: 可选分支(只在最后执行一次)
判断字符串大小写
mystr = input("请输入一个字符串:")
mystr_p = ""
for item in mystr:
if item.isupper():
mystr_p = mystr_p + "1"
else:
mystr_p = mystr_p + "0"
print(mystr_p)
用户登录验证
# range(3) => 0,1,2 =>控制循环次数
for i in range(3):
uname = input("请输入用户名:")
passwd = input("请输入密码:")
if uname == "root" and passwd == "123456":
print("登陆成功")
break
else:
print("登录失败")
练习
num = 123
print("您一共有三次机会可以猜数字是多少")
for i in range(3):
user_num = input("猜一猜数字是多少:")
# 判断用户输入的是否是数字
if user_num.isdigit():
user_num = int(user_num)
# 判断输入的数字是否正确
if user_num > num:
print("猜的数字太大了")
elif user_num < num:
print("猜的数字太小了")
else:
print(f"恭喜您,您猜了{i+1}次,猜对了!")
break
else:
print("输入的不是数字,请重新输入")
else:
#三次都没猜对,退出循环
print("您猜了3次,猜错了,欢迎下次尝试!")
while循环
# i => 计数
i = 0
while i < 3:
i += 1
username = input("请输入用户名:")
password = input("请输入密码:")
if username == "root" and password == "123456":
print("登录成功")
break
else:
print("登录失败,请再试一次")
else:
print("登录失败,请明天再试")
# 存入的本金
money = 10000
# 年利率
lr = 0.05
i = 0
while money < 20000:
# 存入的时间
i += 1
# 每年的本金+利息
money = money + money * lr
print(f"第{i}的金额变为{money}")
else:
print(f"第{i}年时金额达到20000")
)
password = input(“请输入密码:”)
if username == “root” and password == “123456”:
print(“登录成功”)
break
else:
print(“登录失败,请再试一次”)
else:
print(“登录失败,请明天再试”)
[外链图片转存中...(img-RjyLikUP-1648888689366)]
```python
# 存入的本金
money = 10000
# 年利率
lr = 0.05
i = 0
while money < 20000:
# 存入的时间
i += 1
# 每年的本金+利息
money = money + money * lr
print(f"第{i}的金额变为{money}")
else:
print(f"第{i}年时金额达到20000")