运算符
1. 算数运算符
"""
算数运算符
+
-
*
/
//
%
**
"""
a = 10
b = 20
print(a + b)
print(a - b)
print(a * b)
print(a / b) # float类型的
a = 5
b = 2
print(a // b) # 整除 向下取整
print(a % b) # 模运算 求余数
print(2 ** 3) # 幂运算
2. 赋值运算符
"""
赋值运算符
=
+=
-=
*=
/=
//=
%=
**=
:=
"""
a = 10
print(a)
a += 5 # 等同于 a = a + 5
print(a)
a -= 5 # 等同于 a = a - 5
print(a)
a *= 5 # 等同于 a = a * 5
print(a)
a /= 5 # 等同于 a = a / 5
print(a)
a //= 5
print(a) # 等同于 a = a // 5
b = 10
b //= 3
print(b) # 等同于 b = b // 3
a = 2
a **= 3 # 等同于 a = a ** 3
print(a)
print("--------------------------------------------")
# := 海象运算符
c = 10
print(d := 10)
a = 0
print(a := 10 > 5)
print(a)
print("--------------------------------------------")
a = 0
print((a := 10) > 5)
print(a)
3. 关系运算符
"""
关系(比较)运算符 最终的结果都是布尔类型
==
!=
>
<
>=
<=
"""
a = 1
b = 2
print("a大于b:",a > b)
print("a小于b:",a < b)
print("a等等于b:",a == b)
print("a不等于b:",a != b)
print("a大于等于b:",a >= b)
print("a小于等于b:",a <= b)
# Python中的字符串 也可以直接使用关系运算符比较
print("a" > "A")
print("abcd" > "abce")
print("中" > "你") # 20013 20320
4. 逻辑运算符
逻辑运算符 and 并且 两个条件必须都成立 则结果为True 如果前边的条件不成立 则直接返回False 后边的不再执行 短路效果 or 或者 有一个条件为True 则结果为True 如果前边的条件成立 则直接返回True 后边的不再执行 短路效果 not 取反 非True 即False 非False即True
"""
逻辑运算符
and 并且 两个条件必须都成立 则结果为True 如果前边的条件不成立 则直接返回False 后边的不再执行 短路效果
or 或者 有一个条件为True 则结果为True 如果前边的条件成立 则直接返回True 后边的不再执行 短路效果
not 取反 非True 即False 非False即True
"""
b1 = True
b2 = False
b3 = True
print(b1 and b2)
print(b2 and b1)
print(b1 and b3)
print("*" * 50)
a = 10
b = 20
c = 30
print((a < b) and (b < c))
print("*" * 50)
print(1 and 2) # 如果第一个为True 则返回第二个
print(0 and 3) # 如果第一个为False 则返回第一个
print("*" * 50)
b1 = True
b2 = False
b3 = True
print(b1 or b2) # True
print(b2 or b1) # True
print(b1 or b3) # True
print("*" * 50)
a = 10
b = 20
c = 0
print((a < b) or (c := 100) > 20)
print(c)
print("*" * 50)
print(1 or 2) # 如果第一个为True 则返回第1个
print(0 or 3) # 如果第一个为False 则返回第2个
print("*" * 50)
print(not 1) # 取反
print(not 0)
print(not True)
print(not False)
5. 位运算符
位运算符 是直接操作二进制数的计算 运算效率是最高的 所以在底层代码中使用较多 将1理解为True 0理解为False 按照逻辑运算符的规则计算即可 & 与 相同二进制位 都为1 则结果为1 其他情况0 | 或 相同二进制位 至少有一个为1 则结果为1 其他情况0 ^ 异或 相同二进制位 不同为1 相同为0
~ 取反 包括符号位在内 每一位都取反
<< 左移 左移几位表示乘以2的几次方
'>>'右移 右移几位表示除以2的几次方
原码:最高位作为符号位 0表示正数 1表示负数 其余各位为计数位 反码:在原码的基础上 符号位不变 其余各位取反 补码:在反码的基础上 + 1
为什么要用原返补码 因为只使用原码 数学计算是有问题的 使用了补码之后 完美解决 1 - 1 问题 1 + (-1)
"""
位运算符 是直接操作二进制数的计算 运算效率是最高的 所以在底层代码中使用较多
将1理解为True 0理解为False 按照逻辑运算符的规则计算即可
& 与 相同二进制位 都为1 则结果为1 其他情况0
| 或 相同二进制位 至少有一个为1 则结果为1 其他情况0
^ 异或 相同二进制位 不同为1 相同为0
~ 取反 包括符号位在内 每一位都取反
<< 左移 左移几位表示乘以2的几次方
>> 右移 右移几位表示除以2的几次方
原码:最高位作为符号位 0表示正数 1表示负数 其余各位为计数位
反码:在原码的基础上 符号位不变 其余各位取反
补码:在反码的基础上 + 1
为什么要用原返补码
因为只使用原码 数学计算是有问题的 使用了补码之后 完美解决
1 - 1 问题 1 + (-1)
"""
print(22 & 10)
print("*" * 20)
print(22 | 10)
print("*" * 20)
print(22 ^ 10)
print("*" * 20)
print(~7)
print("*" * 20)
print(1 << 1)
print(1 << 2)
print(1 << 3)
print(1 << 4)
print(1 << 31)
print(1 << 32)
print("*" * 20)
print(16 >> 1)
print(16 >> 2)
print(16 >> 3)
print(16 >> 4)
print(16 >> 31)
print(16 >> 32)
print(-20 >> 2)
6. 成员运算符
"""
成员运算符
in 表示在某个范围或者集合中
not in 表示不在某个范围或者集合中
"""
a = 1
b = 2
test_list = [1,22,3,4,5,6,7]
print(test_list)
print(a in test_list) # True
print(b not in test_list) # True
7. 身份运算符
"""
身份运算符
is 表示判断是否是同一个对象
is not 表示判断是否不是同一个对象
"""
a = 1
b = 2
c = 1
print(a is b)
print(a is not b)
print(a is c)
print(a is not c)
s1 = "abc"
s2 = "abc"
print(s1 == s2)
print(s1 is s2)
print(id(s1) , id(s2))
8. 运算符优先级
运算符是有优先等级的 但是不用死记硬背 在实际工作中 如果需要在一行代码中书写多种运算符 推荐使用小括号来将
需要优先执行的包括起来 提高代码的可读性

9. 编码规范
- 缩进 在一个结构内缩进一个tab键的距离 四个空格
- 行长 建议不要超过80个字符
- 空行 使用空行分割程序中不同的部分 提高可读性
- 同一行不要显示多条语句 虽然不报错 但是不美观
- 分号 Python语言不需要再行尾加分号
- 源文件编码 UTF-8
- 不以空格作为行尾结束符号
10. 分支结构
10.1 普通if结构
"""
基本if选择结构 根据已知条件 进行判断
如果条件成立 则执行结构内的代码 然后再执行结构外的后续代码
如果条件不成立 则直接执行结构外的后续代码
需求:根据用户输入的年龄判断是否是成年人
"""
age = int(input("请输入你的年龄\n"))
if age >= 18:
print("恭喜你,成年了")
print("程序结束")
10.2 if-else结构
"""
if-else结构 根据条件选择执行if结构内或者else结构内的代码
条件成立了 执行if结构内代码
条件不成立 执行else结构内代码
必须二选一
"""
age = int(input("请输入你的年龄\n"))
if age >= 18:
print("成年了")
else:
print("未成年")
print("程序结束")
10.3 多重if结构
多重if选择结构 可以处理多种情况 通常用于处理某个值处于连续区间的情况 条件书写必须是有序的 升序或者降序都可以 但是不能为乱序的 还可以处理某个值属于固定等值的情况
多重if中的elif没有个数显示 根据需求书写
最后的else 根据需求 可写可不写 写上:整个结构属于多选一的情况 不写:有可能任何一个分支都不执行
"""
多重if选择结构 可以处理多种情况
通常用于处理某个值处于连续区间的情况 条件书写必须是有序的 升序或者降序都可以 但是不能为乱序的
还可以处理某个值属于固定等值的情况
多重if中的elif没有个数显示 根据需求书写
最后的else 根据需求 可写可不写
写上:整个结构属于多选一的情况
不写:有可能任何一个分支都不执行
需求:根据用户输入的成绩判定等级
大于90分 优秀
大于80分 良好
大于70分 中等
大于59分 及格
其他 不及格
"""
score = int(input('请输入分数\n'))
if score > 90:
print("优秀")
elif score > 80:
print("良好")
elif score > 70:
print("中等")
elif score > 59:
print("及格")
else:
print("不及格")
print("程序结束")
"""
使用多重if处理固定等值的情况 条件顺序没有要求 但是以代码可读性更强书写
需求:根据比赛名次分别进行奖励
第一名 奖励欧洲一日游
第二名 奖励苹果18袋
第三名 奖励笔记本1本
第四名 口头表扬一次
"""
num = int(input("请输入你的名次\n"))
# 以下代码功能正常 但是可读性较差 推荐书写为 1 2 3 4的顺序 更好
if num == 2:
print("奖励苹果18袋 ")
elif num == 1:
print("奖励欧洲一日游")
elif num == 4:
print("口头表扬一次 ")
elif num == 3:
print("奖励笔记本1本")
print("程序结束")
10.4 嵌套if结构
嵌套if结构 外层选择结构条件满足以后 才可以执行内层的选择结构 需求:学校举行百米跑步比赛 如果跑步时间小于15秒 可以进入决赛 再根据性别分别分组 进入 男子组 或者 女子组
"""
嵌套if结构 外层选择结构条件满足以后 才可以执行内层的选择结构
需求:学校举行百米跑步比赛 如果跑步时间小于15秒 可以进入决赛 再根据性别分别分组 进入 男子组 或者 女子组
"""
time = float(input("请输入你的跑步时间\n"))
if time < 15:
sex = input("请输入你的性别\n")
# 这里表示可以进入决赛
if sex == "male":
print("恭喜你进入男子组")
elif sex == "female":
print("恭喜你进入女子组")
else:
print("暂不支持其他性别")
else:
# 淘汰
print("很遗憾,回家休息")
print("程序结束")
10.5 match-case结构
match 结构 用于处理某个值处于固定等值的情况 最后的_是可选的 根据需求是否书写 如果不写有可能条件都不成立
"""
match 结构 用于处理某个值处于固定等值的情况
最后的_是可选的 根据需求是否书写 如果不写有可能条件都不成立
需求:根据比赛名次分别进行奖励
第一名 奖励欧洲一日游
第二名 奖励苹果18袋
第三名 奖励笔记本1本
第四名 口头表扬一次
"""
num = int(input("请输入你的名次\n"))
match num:
case 1:
print("奖励欧洲一日游")
case 2:
print("奖励苹果18袋")
case 3:
print("奖励笔记本1本")
case 4:
print("口头表扬一次")
case _:
print("下次继续加油")
print("程序结束")
"""
使用match-case根据月份统计当月天数
"""
match month := 14:
case 1 | 3 | 5 | 7 | 8 | 10 | 12:
print(f"{month}月份有31天")
case 4 | 6 | 9 | 11:
print(f"{month}月份有30天")
case 2:
print(f"{month}月份有28天")
case _:
print("月份输入错误")
print("程序结束")
10.6 三目运算符
也叫三元运算符 根据条件选择结果
print("--------------------------------------------------------")
# 三目运算符 三元运算符
a = 10
b = 20
c = 100 if a > b else 200
print(c)
age = 18
print("成年了" if age >= 18 else "未成年")
# 后续在返回值的位置 使用 三目运算符 也是很常见的做法 可以简化代码
11. 循环结构
11.1 while循环
任何循环都有以下四部分 1.计数器初始化 2.循环条件 3.循环体 4.计数器变化
while循环可以用于处理循环次数确定的情况
使用while循环统计1~10之和
"""
任何循环都有以下四部分
1.计数器初始化
2.循环条件
3.循环体
4.计数器变化
while循环可以用于处理循环次数确定的情况
使用while循环统计1~10之和
"""
result = 0
i = 1 # 计数器初始化
while i <= 10: # 循环条件
print("累计i的取值")
result += i # 循环体
i+=1 # 计数器变化
print("i最终的取值为",i)
print("1~10之和为",result)
print("程序结束")
任何循环都有以下四部分 1.计数器初始化 2.循环条件 3.循环体 4.计数器变化
需求:老师每天检查赵四的学习任务 如果不合格 则继续学习敲代码 合格则停止
while循环也可以处理循环次数不确定的情况 通常用于处理次数不确定的情况 因为次数确定的情况 都会使用for循环
"""
任何循环都有以下四部分
1.计数器初始化
2.循环条件
3.循环体
4.计数器变化
需求:老师每天检查赵四的学习任务 如果不合格 则继续学习敲代码 合格则停止
while循环也可以处理循环次数不确定的情况 通常用于处理次数不确定的情况
因为次数确定的情况 都会使用for循环
"""
answer = input("请输入你的学习任务是否合格?y/n\n")
while answer == "n":
print("继续努力学习敲代码")
answer = input("请输入你的学习任务是否合格?y/n\n")
else:
print("恭喜你完成任务")
11.2 for循环
for循环用于遍历可迭代对象 次数是固定的 在Python中 字符串属于可迭代对象
"""
for循环用于遍历可迭代对象 次数是固定的
在Python中 字符串属于可迭代对象
"""
for i in "hello world":
print(i)
print("*" * 100)
for i in [1,3,5,2,55,66,77,23,21]:
print(i)
print("*" * 100)
print(range(10))
print("*" * 100)
# range()函数 如果只写一个参数 表示stop 即结束值 从0开始 到stop -1 结束
for i in range(10):
print(i)
print("*" * 100)
# 书写两个参数 从前往后 分别为 start 以及 stop
for i in range(1,10):
print(i)
print("*" * 100)
# 如果书写三个参数 分别表示 start stop 以及 step 步长默认为1 可以根据需求自行设定
for i in range(1,10,3):
print(i)
print("*" * 100)
# 包括起始位置-10 不包括结束位置10 左闭右开
for i in range(-10,10):
print(i)
print("*" * 100)
# 如果要降序遍历 则步长必须设定为负数
for i in range(10,-10,-1):
print(i)
12. continue
continue关键字作用于循环中 用于跳过本次循环中未执行的代码 开始下一次新的循环 continue关键字通常结合分支结构一起使用
shift + alt + ↑↓ 移动当前行代码
"""
continue关键字作用于循环中 用于跳过本次循环中未执行的代码 开始下一次新的循环
continue关键字通常结合分支结构一起使用
shift + alt + ↑↓ 移动当前行代码
"""
# 打印1~10 如果打印到5跳过 继续打印后续内容
for i in range(1,11):
if i == 5:
print("跳过5不打印")
continue
print("hello continue") # 不可达代码 因为遇到continue即会开始一次新的循环 所以写在这里是无效的 无意义的
print(i)
print("*" * 100)
# 模拟跑步10圈 跑到第8圈 太累了 休息一圈 继续跑
for i in range(1,11):
if i == 8:
print("太累了,休息一圈")
continue
print(f"跑步第{i}圈")
13. break
break关键字 用于循环中 表示中断循环 未执行的循环次数 不再执行
break中断循环 如果循环后有else关键字 也将不再执行 因为else也属于循环结构的一部分
"""
break关键字 用于循环中 表示中断循环 未执行的循环次数 不再执行
break中断循环 如果循环后有else关键字 也将不再执行 因为else也属于循环结构的一部分
"""
# 需求:模拟跑步10圈 跑完第7圈 太累了退出
for i in range(1,11):
if i == 8:
break
print(f"跑步第{i}圈")
else:
print("跑步结束了")
print("程序结束")
14. pass
pass关键字 用于暂时不书写代码结构的占位操作 避免报错
"""
pass关键字 用于暂时不书写代码结构的占位操作 避免报错
"""
if True:
pass
for i in range(10):
pass
print("程序结束")
15. 列表
list属于列表 属于有序序列 下标从0开始 往后逐个递增 同时也可以使用-1表示最后一个元素 往前逐个递减
"""
list属于列表 属于有序序列
下标从0开始 往后逐个递增 同时也可以使用-1表示最后一个元素 往前逐个递减
"""
list1 = [100,200,300,400,500,600]
print(list1)
print(type(list1))
print("------------------正序访问-------------------")
print(list1[0])
print(list1[1])
print(list1[2])
print(list1[3])
print(list1[4])
print(list1[5])
# print(list1[6]) 访问不存在的下标 会导致程序中断 报错 IndexError: list index out of range
print("------------------倒序访问------------------")
print(list1[-1])
print(list1[-2])
print(list1[-3])
print(list1[-4])
print(list1[-5])
print(list1[-6])
print("------------------切片操作-----------------")
list2 = list1[:]
print(list2)
# 下标包括1 不包括3
print(list2[1:3])
print(list2[2:])
print(list2[:4])
print(list2[2:-1]) # 从2下标 到-1下标 不包括-1下标元素
print(list2[::-1])
print("------------------添加操作-----------------")
print(list2)
list2.append(999)
print(list2)
list2.insert(0,666)
print(list2)
print("程序结束")