
一木.溪桥 在Logic Education跟Amy学Python
逻辑教育 :https://logicedu.ke.qq.com
12期:Python基础课
日期:2020年12月28日
一木.溪桥学Python-07:
集合set、条件判断if elif else、循环while、break、continu、else

学习目标:
- 集合set()
- 条件判断if elif else
- 循环while、break、continu、else
学习内容:
集合set
set介绍
- 集合是一个无序不重复元素的集
- 基本功能:关系测试、消除重复元素
- set 是可变数据类型
- 核心:自动去重
- 总结数据类型
set创建
- set创建用{ele1,ele2,ele3…}框定元素,用逗号分隔
s = {1,2,3,4,5,6} # <class 'set'>
s1 = {} # <class 'dict'>
print(type(s))
print(s) # {1, 2, 3, 4, 5, 6}
print(type(s1))
print(s1) # {}
- 用set()创建
s = set("hello everyone!")
print(s) # {'e', ' ', '!', 'v', 'n', 'l', 'r', 'h', 'y', 'o'}
- tips:
1.无序,不重复,自动去重!
2.{} 不是创建空集合,而是空字典。要创建空集合用 set()
set添加元素
- 用set.add(key)添加元素
Add an element to a set.
This has no effect if the element is already present.
s = set("hello everyone!")
s.add("My god!")
print(s) # {'n', 'My god!', 'o', '!', ' ', 'r', 'h', 'v', 'e', 'l', 'y'}
- tips:
1.可以重复添加,但是会自动去重,所以无效果
2.不能添加可变对象
set更新
- 用 set.update() 更新
- 新元素增加进去,并去重
s = set("hello everyone!")
s.add("My god!")
s.update("123")
print(s) # {'n', '!', 'e', '1', '2', 'h', ' ', 'r', 'y', '3', 'v', 'l', 'o', 'My god!'}
set删除元素
- set.remove(key) : 删除指定元素
s = set("hello!")
s.remove("e")
print(s) # {'!', 'o', 'h', 'l'}
s.remove("x") # KeyError: 'x' 没有对应删除的元素则报错
- set.pop() : 随机删除元素(注意:无参数)
set_1 = set("hello!")
i = 1
while i <= 5:
set_1.pop()
i += 1
print(set_1)
Run:
{'o', '!', 'e', 'h'}
{'!', 'e', 'h'}
{'e', 'h'}
{'h'}
set()
'''
运行删除空集合会报以下错误:
KeyError: 'pop from an empty set'
set()
'''
- tips:
1.集合不能取出某个元素,因为集合既不支持下标索引也不支持字典那样的通过键值对获取。
总结数据类型哪些为可变的哪些为不可变
- 可变数据类型:指改变数据本身,内存地址不改变
- eg. : 列表 list()、字典 dict()、集合set()
set_1 = set("hello!")
i = 1
while i <= 5:
set_1.pop()
i += 1
print(set_1)
print(id(set_1))
print(type(set_1))
Run:
{’!’, ‘o’, ‘h’, ‘l’}
1764048077544
<class ‘set’>
{‘o’, ‘h’, ‘l’}
1764048077544
<class ‘set’>
{‘h’, ‘l’}
1764048077544
<class ‘set’>
{‘l’}
1764048077544
<class ‘set’>
set()
1764048077544
<class ‘set’>
-
结论:集合set(),为可变数据类型,改变数据本身,内存地址不改变!
-
不可变数据类型:指改变数据本身,内存地址会改变
-
eg. : 数值、字符串str、字节bytes、元组tuple
s = "hello!"
s1 = s.replace("h","AA")
print(id(s)) # 2426813203040
print(id(s1)) # 2426814038736
程序顺序执行
- Python代码在执行过程中,遵循下面的基本原则:
普通语句,直接执行;
碰到函数,将函数体载入内存,并不直接执行
碰到类,执行类内部的普通语句,但是类的方法只载入,不执行
碰到if、for等控制语句,按相应控制流程执行
碰到@,break,continue等,按规定语法执行
碰到函数、方法调用等,转而执行函数内部代码,执行完毕继续执行原有顺序代码
程序主入口
- 一个 .py,除了可以被直接运行外,还可以作为模块,被其他 .py文件导入。不管是直接运行还是被导入,.py 文件的最顶层代码都会被运行(Python 用缩进来区分代码层次)。
- 但是当一个 .py 文件作为模块被导入时,我们可能不希望一部分代码被运行。那么就可以将这部分代码的调用写在主程序中。
if __name__ == '__main__':
pass
条件判断 if elif else
- 条件判断是通过一条或多条判断语句的执行结果(True 或者 False)来决定执行的代码块。在Python 语法中,使用 if 、 elif 和 else 三个关键字来进行条件判断。
条件判断使用原则:
- 每个条件后面要使用 冒号 作为 判断行的结尾,表示接下来是 满足条件(结果为True)后要执行的语句块。
- 除了 if 分支必须有,elif 和 else 分支都可以根据情况省略。
- 使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
- 顺序判断每一个分支,任何一个分支首先被命中并执行,则其后面的所有分支被忽略,直接跳过!
- 可以有多个 elif ,但只能有一个 else
- 在 Python 中 没有 switch – case 语句。
条件判断嵌套
- if…elif…else 语句可以嵌套,也就是把 if…elif…else 结构放在另外一个 if…elif…else 结构中。
循环控制 (while、break、continu、else )、for
循环控制介绍
- 循环控制,就是让 程序循环运行某一段代码 直到 满足退出的条件,才退出循环Python 用关键字 for 和 while 来进行循环控制。
while 循环表达式
- 当程序从上至下执行时,遇到 while 循环语句,则会判断表达式是否成立 ,当成立时 则会进入 while 循环体内,执行 循环体内部执行的代码块。直到判断表达式不成立时 ,则 终止循环。
break 与 continue 语句
- break :
当循环体执行的过程中想要退出循环体,就可以使用到 break 语句。 - continue :
continue 语句用于跳过当前循环体剩余部分的代码,直接开始下一轮循环。它不会退出和终止循环 。
while 的 else 从句
while 循环还可以增加一个 else 从句。当 while 循环 正常执行完毕,会执行 else语句。
- tips:
- else 与 while 平级的缩进方式
- 如果是被 break 等机制 强制提前终止的循环,不会执行 else 语句。
while 循环嵌套使用
if 判断可以嵌套,while 当然也可以嵌套。但是建议大家不要嵌套 3 层以上,那样的效率会很低。
作业:
作业答案:
题3:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/12/30 8:52
# @Author :DXD
# @File : 作业.py
# @Software: PyCharm
print("同学最近学习了吗?")
s_input = input("请输入Yes/No:")
s_input = s_input.lower()
if s_input == "yes":
print(''' Very good!
学习的什么呢? 请选择以下选项:
1.Python
2.高数
3.退出 ''')
s_opt = input("请输入选项:")
if s_opt == '1':
print("Python 真不戳!")
elif s_opt == '2':
print("我待高数如初恋,高数虐我千百偏啊!")
elif s_opt == '3':
print("已退出")
else:
print("输入有误,请重新输入!")
elif s_input == "no":
print("年青人,耗子尾汁!")
else:
print("输入有误,请重新输入!")
- Run:3.1
同学最近学习了吗?
请输入Yes/No:yes
Very good!
学习的什么呢? 请选择以下选项:
1.Python
2.高数
3.退出
请输入选项:1
Python 真不戳!
******
请输入选项:2
我待高数如初恋,高数虐我千百偏啊!
******
请输入选项:3
已退出
******
请输入选项:haha!
输入有误,请重新输入!
******
Run:1.2
同学最近学习了吗?
请输入Yes/No:no
年青人,耗子尾汁!
******
Run:1.3
同学最近学习了吗?
请输入Yes/No:dfg
输入有误,请重新输入!
课后讲解自行优化程序
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/12/30 8:52
# @Author :DXD
# @File : 作业.py
# @Software: PyCharm
for i in range(1, 6): # 用于循环测试5次
print("同学最近学习了吗?", "", sep="\n")
while 1:
s_input = input("请输入Yes/No:")
s_input = s_input.lower()
if s_input in("yes", "no"):
flag = 1
break
else:
print("输入有误,请重新输入!", "", sep="\n")
while flag:
if s_input == "yes":
print("Very good!学习的什么呢? 请选择以下选项:", "1.Python", "2.高数", "3.退出", "", sep="\n")
s_opt = input("请输入选项:")
if s_opt == '1':
print("Python 真不戳!", "", sep="\n")
break
elif s_opt == '2':
print("我待高数如初恋,高数虐我千百偏啊!", "", sep="\n")
break
elif s_opt == '3':
print("已退出", "", sep="\n")
break
else:
print("输入有误,请重新输入!", "", sep="\n")
elif s_input == "no":
print("年青人,耗子尾汁!", "", sep="\n")
break
else:
print("输入有误,请重新输入!", "", sep="\n")
Run:
请输入Yes/No:dd
输入有误,请重新输入!
请输入Yes/No:
tips:课后思考
- 1.修改后实现两个位置:“输入有误,请重新输入!”的跳转。
- 2.开头增加了一个for循环来做代码调试用。