1、先自我梳理
目前掌握了列表和字典,以及while循环和for循环。而且已经做了一些练习,现在的问题不再是我能不能学会Python,而是我怎么学号Python?
2、学习的两大瓶颈
知识学完就忘:学的时候记得,过一会就忘了。
缺乏理解能力:明明学会了,但做题的时候就不会了。
好比我们在学校上课时,明明老师讲的每个字都听进去了,但铃声一响,新学的知识就从脑袋里溜走了;复习到半夜,明明胸有成竹,但看到考卷的时候却一脸懵逼。
2.1、瓶颈1:知识学完就忘
在编程学习中,【掌握】知识和【记住】知识是两个概念:【掌握知识】是知道有这个知识点,并了解它该往哪用,而【记住知识】只是强行记忆知识点,但不一定知道怎么用,用在哪。
记住知识 ≠ 掌握知识
当你使用得足够多,你就会自然形成“肌肉记忆”,对使用场景和具体用法烂熟于心。
我们需要通过几类笔记法的运用掌握,帮助自己掌握知识点。
2.1.1、用法查询笔记
【用法查询笔记】解决的是“知识点是什么”的问题
记录知识点的基础用法,是自己的学习记录,便于自己快速查阅,加深对知识的印象。
笔记格式不限,目的就是方便自己使用。
例1,最简单的 “算数运算符” 相关笔记:
例2,与“列表”相关的笔记:
制作一份不同于课堂的案例,写出“代码含义”和“实际运行结果”的注释,这样才能加深对知识的第一印象,需要的时候才想得起笔记在哪。
例3,与“字典”相关的笔记:
逐步积累,形成自己的【用法查询笔记】:
遇见有些课堂上老师没有涉及到的零碎知识点,也可以补充到笔记里,方便日后查看。
有了这些【查询使用笔记】,在学习新知识的时候,可以及时回顾已学知识。
在练习或实操的时候,可以快速查看某个知识的具体使用细节。
建议:搞一个可以自己往里面加知识点、并且可以快速搜索的开源技术博客之类的站点。
2.1.2、深度理解笔记
【深度理解笔记】更侧重解决“为什么要用”以及“怎么用这个知识点”的问题。
有些知识光有印象还不够,还需要知道这些知识该如何使用。所以我们需要【深度理解笔记】来总结、理解知识的使用场景。
思路是回答:
“什么时候需要用到这个知识?这个知识有什么常见用法?这个知识和其他知识有什么不同?”
之类的问题,并写下自己的思考过程。
案例1,列表和字典:
深度理解笔记不是一蹴而就的,它会随着你对某一知识的理解程度的加深而不断完善。
所以,在练习和实操的过程中,积累更多的知识、运用技巧、实操经验,补充到深度笔记中去。
2.1.3、知识管理
如果你学Python学到“走火入魔”的话,你会发现【深度理解笔记】和【用法查询笔记】本质上就是一个“字典嵌套列表”,其中【深度理解笔记】是键,【用法查询笔记】是值。
基于这个结构由点到面,再不断将新知识、经验循环往复的补充到自己的知识管理体系中去。
3、瓶颈2:缺乏解题能力
缺乏解题能力,也就是看到题目,隐隐中知道要用什么知识,但就是会像便秘一样死活卡住。
3.1、如何解题
一般分为五步,即:
1、看问题:分析问题,明确结果;
2、想办法:思考需要的知识,或搜索新知识;
3、找切入:思考切入点;
4、试切入:切入并尝试解决一部分问题;
5、重复直到解决问题。
案例,用Python打印九九乘法表:
1、看问题:当我们拿到这个问题时,首先思考这是什么问题呢?
要打印九九乘法表,我们知道九九乘法表最终是什么样子吗?
是下述的横着打印?
1 x 1 = 1,1 x 2 = 2,1 x 3=3 ?......
还是金字塔打印?
1 x 1 = 1
1 x 2 = 2,2 x 2 = 4
1 x 3 = 3,2 x 3 = 6,3 x 3 = 9
......
2、想办法:我们要用到哪些知识来解决这个问题。
首先很明显,要打印信息就必须用到最基本的print()函数。
最取巧的办法是像下面这样直接写,但显然这么操作太原始了。
print('1 X 1 = 1')
print('1 X 2 = 2 2 X 2 = 4')
print('1 X 3 = 3 2 X 3 = 6 3 X 3 = 9')
print('1 X 4 = 4 2 X 4 = 8 3 X 4 = 12 4 X 4 = 16')......
于是我们仔细观察,发现九九乘法表是有一定规律,重复的结构,所以可以想到用循环来处理。
同时,我们能看到数字是在灵活变动的,所以用“格式化字符串”来为变动的数字预留位置会方便些。
3、找切入:现在我们知道需要用的知识点,但我们该先从什么地方入手来解决这个问题呢?
九九乘法表,我们会发现一个规律:每一行的等式里,第一位数会递增,第二位数则会保持不变,并且在第几行就会有多少个等式。
4、试切入:我们尝试切入并解决一部分问题。
我们现在要用到循环,那么我们尝试用两次for循环在终端打印出:
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
如果只用循环,可能代码是这个样子的:
fori in range(1,3):
print(str(i)+' X 2 = '+str(i*2))
for i in range(1,4):
print(str(i)+' X 3 = '+str(i*3))
你需要坐九次这样的循环,而且要用'+'号去反复拼接数字和字符串。
那么我们可以尝试用格式化字符串来解决这个问题,格式化字符串怎么用?我们前面的【用法查询笔记】现在派上用场了。
于是,我们用循环和格式化字符串来打印九九乘法表,得出下代码:
for i in range(1,3):
print('%d X %d = %d' % (i,2,i*2))
for i in range(1,4):
print('%d X %d = %d' % (i,3,i*3))
我们一运行,就发现结果长这样:
1x2=2;
2x2=2;
... ...
这不是我们上图中想要的结果,于是我们重复步骤1~4,将需要的结果更新,并开始思考新知识。
于是去找百度问,百度告诉我。
原来print()函数里有个参数'end'是用来控制换行行数和结尾字符。于是我们继续尝试解决问题,优化上面的基础代码:
for i in range(1,3):
print('%d X %d = %d' % (i,2,i*2),end = ' ')
for i in range(1,4):
print('%d X %d = %d' % (i,3,i*3),end = ' ')
一运行,发现结果变成这样了:
1 X 2 = 2 2 X 2 = 4 1 X 3 = 3 2 X 3 = 6 3 X 3 = 9
太磨人了,咋办?只能找继续找度娘,深入理解print了。
于是我发现可以用print('')来控制换行,重新改了代码:
for i in range(1,3):
print('%d X %d = %d' % (i,2,i*2),end = ' ')
print('') #用来换行
for i in range(1,4):
print('%d X %d = %d' % (i,3,i*3),end = ' ')
print('') #用来换行
终于输出了我想要的结果:
1 X 2 = 2 2 X 2 = 4
1 X 3 = 3 2 X 3 = 6 3 X 3 = 9
但是这样写出来的代码同样的结构要重复九次,跟搬砖差不多,我得想个法子优化这段代码。
再回来看看九九乘法表,我可以发现行数是固定的,范围是range(1,10),而列数(等式)则是逐行加一,即第N行就有N个等式。
于是决定使用for循环消灭重复,最终将代码缩到4行。
for i in range(1,10):
for y in range(1,i+1):
print('{0}x{1}={2}'.format(y,i,i*y),end = ' ')
print(' ')#用来换行
用while循环和if结构尝试了一下,发现直观一点,但是代码要多一些。
i = 1
while i <= 9:
j = 1
while j <= i:
print('%d X %d = %d' % (j,i,i*j),end = ' ')
j += 1
print('')
i += 1
九九表做好了,完结撒花。
下面开始总结:
练习2、 学习小组成绩的合并排序 :
练习目标
通过这个练习,掌握列表的两个新运用:合并列表和列表排序。
练习要求
一次测评中,老师将 学习小组A 和 学习小组B 的测评成绩(满分 100 分)从低到高记录放进两个列表:
A=[91, 95, 97, 99],B=[92, 93, 96, 98] 。
现在,老师想将两个小组的成绩合并为一个列表,并按照从低到高的顺序排序,你能帮老师完成吗?
思路:
列表嘛,可以用append()函数来新增列表的元素(一次一个),同时可以用for循环遍历列表里的元素。(可以考虑用经典的冒泡排序法)就用这个知识点,来完成列表合并和排序吧。
1、将列表合并起来,打印检查;(查了一堆资料,考虑使用列表长度来确定循环长度lenlist)
2、存到一张列表以后,使用冒泡排序法把当前的列表从低到高排序。
3、在百度以后,发现PYTHON直接有SORT参数,一行代码就搞定了,不用自己写方法,表示震惊。
代码:
list1 = [91, 95, 97, 99]
list2 = [92, 93, 96, 98]
for i in range(0,len(list2)):
list1.append(list2[i])
list1.sort()
print(list1)