-
类设计
-
参数传递
-
作用域的实质
-
内存绑定 : 如何编写带输出参数的函数(通过引用调用)?
-
不可更改的类型 可以修改的类型 string list tuple dict float int float -
保护数据
-
私有属性
self.__name
-
私有方法
self.__function_name()
-
继承与多态
-
理解为子承父业。
-
父类(基类)和子类(派生类)
-
覆盖方法
-
多态:不同类型调用不同的实现。
-
-
dict 字典
{key: value}
- 增
dict_name [key] = value
- 删
del dict_name[key]
dict_name.get()
- 改
dict_name[key] = value
- 查
dict_name[key]
- 增
分类目录归档:计算机
第 6 课 类与数据结构
课程提纲
面向对象的类
- 类(类型),是特殊的数据结构
- 为什么要有类和对象?封装,把代码实现的细节覆盖。类就像一条生产线,就像一个完美模具。柏拉图的理型论认为:先有了这个理型世界,然后这个世界会按照这个完美的模子发展着。
- 类设计:数据与行为(鸭子的模具,数据:声音、形状、颜色,行为:叫、游泳)
- 方法:类中定义的函数。(鸭子的行为)
- 对象:通过类定义的数据结构实例。(用模具创造一个鸭子)
- 定义一个类(设计一个鸭子的模具)
class
def __init__
- self 代表类的实例,而非类
- 创建和使用
instance.method_name()
instance.member
class_name.method_name()
class_name.member
计算机领域的数据结构(了解即可):集合、数组、队列、栈、树、图等
- 集合关系
set
- 结构:元素无序地组织
- 操作:{交、并、补 | 集合与集合之间}、{ 存、取、查找 | 集合内元素 }
- 例子:是否有人迟到?
- 线性结构,一对一,前驱后继关系
- 列表
- 队列(可用
list
实现),先进先出 queue- 结构:像排队一样
- 操作:增add() 、删pop()
- 栈(可用
list
实现),先进后出- 结构:像桶一样
- 操作:增、删
- 树状结构,一对多
- 二叉树
- 结构:像族谱图
-
- m叉树
- 二叉树
- 图状结构,多对多
- 图
- 结构:像地图一样
- 操作:增、删
- 图
- 特殊的数据结构
- 字典
dict
- 字典
Python 中的数据结构
集合关系 set
- 结构:元素无序地组织 \ 无重复元素
- 操作:初始化
set()
{}
- 逻辑运算
not
==
- 增
add()
- 删
remove(key)
clear()
pop()
- 改 不可改!
- 查
in
- 交
setA & setB
并setA | setB
差集setA - setB
对等差分setA ^ setB
- 逻辑运算
课后作业
注:那个爬虫作业取消,感觉还是太难,爬虫代码在这:https://github.com/xrandx/Dating-with-python-this-winter/blob/master/douban_book.py (存在 bug:定位的逻辑不对,只能爬页数大于1且小于11的读书页面)
队列(queue)是一种先进先出(FIFO, First-In-First-Out)的、操作受限的线性表。在具体应用中通常用链表或者数组来实现。
队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行取出操作。队列的容量是它能容纳元素的多少,队列的大小是元素已经占用的空间多少。
请定义一个 Queue 类,基于 list 实现如下的方法:
queue = Queue()
queue.enqueue() # 将任意对象从队尾入队
queue.dequeue() # 使队头对象出队
queue.size() # 返回队列的长度(int)
queue.capcity() # 返回队列的容量(int)
queue.is_full() # 队列是否已满(bool)
queue.is_empty() # 队列是否为空 (bool)
第 5 课 函数、作用域与递归
第 5 课 函数、作用域与递归
课程纲要
-
函数(必须掌握):接收输入、提供输出的东西
-
关键字
def
与参数:定义一个echo()
(回声),参数、默认参数和关键字参数 -
返回值和
return
语句: -
def function_name: do_something() return something
-
None 值:
NoneType
数据类型,如果你不返回任何值。(type) -
诀窍:一个函数最好不要超过40行。
-
-
作用域(掌握思想):
- 起因:公用私用问题,保护数据。尽量不要使用全局变量。
- 规则(不应该背下来):
- 局部变量不能在全局作用域内使用
- 局部作用域不能使用其他局部作用域内的变量
- 全局变量可以在局部作用域中读取
global
关键字
-
递归(掌握如何写递归函数):函数自己调用自己
课后作业
- 定义一个
gcd(m, n)
函数,该函数可以求出m与n的最大公约数,用辗转相除法递归实现。 - 用递归实现阶乘函数
factorial(n)
,对于任意的整数n都能返回其对应的阶乘。 - 跳水板
第 4 课 计算的本质
第 4 课 计算的本质
上次的课后作业
注:如果你不理解视频里的内容,不要反复观看试图理解,不懂的先去群里问,或者去看答案,重要的是去练习,我们不能从概念到概念,而是应该从实践(解决问题),然后再结合理论知识。
只有实践的经验才会转换为你的编程能力。
-
程序要满足:输入分数 x (0 < x < 100),程序输出分数对应的等级:x < 60 不及格,60 < x < 80 及格,80 < x < 90 良好,90 < x < 100 优秀。
scope = float(input("the scope euquals to ")) if scope < 60: print("不及格") elif 60 <= scope < 80: print("及格") elif 80 <= scope < 90: print("良好") elif 90 <= scope <= 100: print("优秀")
-
程序要满足:首先输入一个整数 n ,然后程序连续接受输入 n 个数字,最终程序输出 n 个数字的平均值。
n = int(input("n = ")) total = 0.0 for i in range(n): total += float(input()) print("the average value is {0}".format(total / n))
-
class Solution(object): def reverseLeftWords(self, s, n): """ :type s: str :type n: int :rtype: str """ # s n return s[n:] + s[0:n]
-
class Solution: def runningSum(self, nums): """ :type nums: List[int] :rtype: List[int] """ if nums is None: return [] for i in range(1, len(nums)): nums[i] = nums[i] + nums[i-1] return nums
课程纲要
计算的本质:符号、模型、数黄瓜的故事。
-
现实:左边4根黄瓜,右边2根黄瓜
-
符号:
- 4 + 2
- 四 加 二
- 肆 加 贰
- 叽里 哼哈 呱啦
-
模型:10 根手指、画“正”字、算盘…… (可操作模型)
-
计算图模型:更加本质的模型。加法器:具体怎么计算我们并不关心。
-
表达式:(2 + 4) * 3
-
数字
是表达式;递归 -
表达式
+
表达式
。两个表达式相加是表达式; -
表达式
-
表达式
。两个表达式相减是表达式; -
表达式
*
表达式
。两个表达式相乘是表达式; -
表达式
/
表达式
。两个表达式相除是表达式;
(即构成
表达式
运算符
表达式
的顺序的式子是表达式)-
图示
-
验证 (2 + 4) * 3 是表达式
-
变量与赋值
-
表达式
(2 + 4) * 7 + ((12 - 3) * 6) / 2
过于复杂; -
用名字代表中间的过程,例如:爸爸的妹妹的老公,叫做「姑丈」;
-
a = (2 + 4)
原式 =a * 3
-
-
函数:
t -> 2*t
-
参数和变量
-
函数:有名字的运算过程
a = 2 + 4
f = t -> t * 2
f(t) = t * 2
-
函数调用
f(2)
-
分支
t -> if (t < 22) { "hotpot" } else { "ice cream" }
-
变量的类型,不同的符号有不同的用途
- 4 + 2 ( 数字 )
- 四 加 二 、肆 加 贰 、兔子、鸡、abc、21411 (字符串)
- 是,否 (布尔型)
-
抽象:屏蔽具体的细节和步骤,只考虑输入和输出。例如:出租车司机的案例、圆的面积公式 pi*r^2。
-
注:本篇文章的内容大部分来源于 https://www.yinwang.org/blog-cn/2018/04/13/computer-science
硬币计划
Coin-Project 硬币计划
起因是不想花太多时间去催作业了,导致我没空去做其他的,还有备课,还有就是提高大家的自觉性。我决定对改作业和催作业收费,需要这两项服务的人自愿付费,不限制金额。
当然我目的不是卸磨杀驴,课程结束后,我会把所有付款人和款项公示,并以集体的名义,将所有费用,捐赠给支付宝公益平台的免费午餐计划,同时你也可以自行进行捐款。
收费有很多好处:
- 避免有些同学自律性不足,中途退出或者不交作业。
- 不论是我还是大家,学习 Python 会更加有使命感。
- 贫困的孩子们可以多吃饱饭。
参加硬币计划的同学:不限制金额,请自己捐款,然后把截图给我,要带明确的个人标识嗷。复制下列口令到支付宝,即可参与捐款:
15我支持【免费午餐】爱心捐赠,一起来吧! http:/bU4S46I45X0长按苻制,去👉zhi[爱心]亻寸[爱心]宝👈首页进行搜索,参与爱心捐赠
捐款之后,请填写【腾讯文档】,确定你公示的名字。参与的同学以后作业请发送到 python[\at]benearyou.com (请把 [\at] 改成 @ ,才是真实邮箱,目的是防止垃圾邮件骚扰)
如果不参与:不影响正常上课,有问题仍然可以在群里答疑。只是不单独催作业和改作业了,但你仍然可以看直播和其他人的作业对答案。
公示名单
捐赠人 | 金额(元) |
---|---|
Yulia Юлия | 50 |
xpzoumeng | 50 |
三十 | 66 |
喵不乖 | 66 |
乐子 | 20 |
Aimee | 50 |
Robb | 10 |
JonDoe297 | 50 |
总额 | 422 |
感谢你们的学习,让这个世界变得更好!
免费午餐计划简要介绍
捐款项目的地址:支付宝公益平台-以公益的方式,为世界带来更多平等的机会
免费午餐坚持“师生同食、就地取材、透明公开、村校联合”学校执行的四项基本原则,保障为孩子们提供安全、营养的免费午餐。
1、服务时间:长期
2、帮扶地区:全国
3、受助对象:我们开通了多渠道面向社会公众筹集善款,以一人一餐4元的标准为乡村学校孩子们提供免费午餐。若学校存在因学生贫困吃不上午饭、离家远无法回家吃饭、学校没有能力提供午餐等情况,可向免费午餐基金上交开餐申请。
第 3 课 控制流
第 3 课 控制流
不会的东西可以在群里提问、或搜索查看标准库文档 和 入门教程。
课程纲要
-
逻辑运算:三种逻辑运算是什么?
-
控制流的元素
- 条件
True
orFalse
- 得出 bool 型的运算符。例如:
==
in
以及 bool 型的and
not
or
。 - 能转换为 bool 型的类型。例如: float 型的
0.0
, int 型的0
, str 型的""
(空字符串)都为False
- 得出 bool 型的运算符。例如:
- 代码块和缩进(使用四个空格)
- 缩进增加时,代码块开始。
- 代码块可以包含其他代码块。
- 缩进减少为零,或减少为外面包围代码块的缩进,代码块就结束了。
- 程序顺序执行
- 条件
-
控制流语句
-
条件判断
-
if 语句
-
格式:
if
condition
:
-
例子:如果明天不下雨,我就去外婆家。(用 print 模拟)
-
else 语句
-
格式:
else
:
-
elif 格式:
elif
condition
:
-
例子:
- 如果老师说交作业,小明就说放在家里了,否则他就写作业。(用 print 模拟)
- 小明去买一个西瓜,如果看见西红柿,就买两个。(用 print 模拟)
-
goto 是什么?
goto
| 科普:程序跳转,顺序运行
-
- 循环
- while 循环
- 格式:
while
condition
:
- 例子:男女朋友闹矛盾,女生要等他道歉敲门99下才开门。(用 print 模拟)
- for 循环
for
item
in
items
:
- range() ,len()方法
- 例子:如何将一个字符串输出,使得每行按顺序打印该字符串中的字符。
- 循环和条件的组合
break
continue
-
课后作业
编程:
- 程序要满足:输入分数 x (0 < x < 100),程序输出分数对应的等级:x < 60 不及格,60 < x < 80 及格,80 < x < 90 良好,90 < x < 100 优秀。
- 程序要满足:首先输入一个整数 n ,然后程序连续接受输入 n 个数字,最终程序输出 n 个数字的平均值。