9 编程思维:如何解决问题

瓶颈1:知识学完就忘

回顾:

究其原因,我们学编程是为了获得一门实用的技能。因此,所有的编程知识并不是要靠死记硬背来【记住】,而是自己真正吸收,学会【怎么用】。

这里要纠正一个误区:在编程学习中,【掌握】知识和【记住】知识是两个概念:【掌握知识】是知道有这个知识点,并了解它该往哪用,而【记住知识】只是强行记忆知识点,但不一定知道怎么用,用在哪。

然而,Python涉及到的知识点是非常多的,即便把脑子塞爆也不可能都【记住】。所以在初期,很多知识只需要你在使用的时候有个印象,遇到不明确的,就去翻看学习记录,找到知识点的具体用法,再运行代码检验。

一回生两回熟,当你使用得足够多,你就会自然形成“肌肉记忆”,对使用场景和具体用法烂熟于心。

在这里,我要和大家介绍一个对我而言很有效的学习方法:【案例笔记法】。它包括了两种类型的笔记:【用法查询笔记】和【深度理解笔记】。

用法查询笔记

先来说【用法查询笔记】,【用法查询笔记】就是记录知识点的基础用法,它是你的学习记录,能供你快速查阅,加深对知识的印象。要记住的是:不管你用什么格式记笔记,目的只有一个,就是 “方便自己查询使用”。
当然你可以多次登陆学习系统复习或者搜索相关教程,但这样可能要花一点时间才能找到想要的信息,所以将笔记统一记录在可随时查阅的文件里,不失为一个更便捷的好方法。

比如先来看一个最简单的 “算数运算符” 相关笔记:(扫一眼就行)

9 编程思维:如何解决问题

大家可以发现,这张笔记是用小例子来说明不同算数运算符的用法,并且用注释说明了(1)代码含义(2)实际运行结果。

这样注释的话会更直观,比如当要区分'%'和'//'用法的时候就能一目了然。

我们再来看看与“列表”相关的笔记,这里,我记了一些对列表的常见操作。

9 编程思维:如何解决问题

虽然课堂上我们也是以案例带出知识点,但老师还是建议你能在课后制作一份不同于课堂的案例,写出“代码含义”和“实际运行结果”的注释,这样才能加深对知识的第一印象,需要的时候才想得起笔记在哪。

最后,再来看看以 “字典” 知识为例的笔记,当然啦,要记什么内容取决于你对具体知识点的熟悉度。

9 编程思维:如何解决问题

像这样,当你逐步解锁后续关卡,你就能积累越来越多的【用法查询笔记】:

9 编程思维:如何解决问题

有了这些【查询使用笔记】,在学习新知识的时候,你可以及时回顾已学知识,在练习或实操的时候,你可以快速查看某个知识的具体使用细节。于是,你的学习过程立马轻松了很多,因为很多知识并不要求自己直接记在脑子里,可以放到【用法查询笔记】中。

深度理解笔记

就像开头所说,有些知识光有印象还不够,还需要你知道这些知识该如何使用。所以我们需要【深度理解笔记】来总结、理解知识的使用场景。

【深度理解笔记】重在“理解”,所以笔记内容主要是记录对知识的理解。比如你可以看下我对于使用“循环”知识的理解笔记:

9 编程思维:如何解决问题

可以看到,如果说【用法查询笔记】解决的是“知识点是什么”的问题,那么【深度理解笔记】更侧重解决“为什么要用”以及“怎么用这个知识点”的问题。

我们再来看一个关于列表和字典的例子:

9 编程思维:如何解决问题

当然,深度理解笔记不是一蹴而就的,它会随着你对某一知识的理解程度的加深而不断完善。

知识管理

如果你学Python学到“走火入魔”的话,你会发现【深度理解笔记】和【用法查询笔记】本质上就是一个“字典嵌套列表”,其中【深度理解笔记】是键,【用法查询笔记】是值。

9 编程思维:如何解决问题

基于这个结构,我们的知识框架就搭建起来了。因为我们有【深度理解笔记】,所以在解决一个编程问题的时候,我们可以轻易想到需要用到哪块知识,接着就可以去【用法查询笔记】里寻找相关的知识细节和具体案例,形成解题的思路。

在解决了问题之后,我们还可以把一些特别典型的案例,继续补充在【用法查询笔记】,是不是有点像以前上学时我们所做的错题集。

同样地,在解题的过程中,我们可能会专门搜索并自学一些额外知识,比如random模块(里面有许多随机函数)的使用方法,也可以一并记录在笔记里。

这样子,随着我们的知识库存越来越多,知识结构越来越完整,我们使用知识也会得心应手。

瓶颈2:缺乏解题能力

我认为这其中一个很重要的原因是还没有形成解题的思路,殊不知,解题技巧也是需要练习的。虽说解题思路是因人而异,但从中提炼共性的话,我会将解题步骤分为以下几步:

9 编程思维:如何解决问题

接下来,我会用一道经典的题目来详细解释上述步骤:用Python打印出九九乘法表。

分析问题,明确结果

分析问题是解决问题的第一步,所以拿到题目的时候我们首先要思考“这是一个怎样的问题”。题目要求是“打印九九乘法表”,为了让问题变得清晰,我们得先知道“九九乘法表”长什么样,即我们最终想要呈现在终端结果是什么样。

假设我们的目标是在终端打印出这种格式的九九乘法表:

9 编程思维:如何解决问题

思考需要的知识

首先很明显,要打印信息就必须用到最基本的print()函数。

虽然最取巧的办法是像下面这样写,但显然这么操作,Python会很生气的,因为实在太太太大材小用了。

9 编程思维:如何解决问题

我们可以留意到,九九乘法表是有一定规律,重复的结构,所以我们可以想到用循环来处理。

同时,我们能看到数字是在灵活变动的,所以用“格式化字符串”来为变动的数字预留位置会方便些。

现在我们知道需要用到“循环”和“格式化字符串”相关知识,那我们就可以开始思考切入点:先从什么地方入手来解决这个问题。

思考切入点

当循环次数是确定的时候,我们优先使用for循环。

小试牛刀,分别用for循环打印出九九乘法表的第二行和第三行

#题目要求:用两次for循环在终端打印出:

9 编程思维:如何解决问题

最初答案可能是这样子的:

9 编程思维:如何解决问题

你会发现字符串只能与字符串用'+'号拼接,要拼接数字的话还得先用str()转换,煞是麻烦。所以用我们刚才所说的格式化字符串处理会轻松得多。

这时,之前讲的【用法查询笔记】也能派上用场了。

9 编程思维:如何解决问题

刚刚的那段代码就可以简化成:

9 编程思维:如何解决问题

但是,运行后你会发现这样写的话每一个等式都会换行,而我们想要的结果是:

9 编程思维:如何解决问题

现在我们希望print出来的东西不换行,那怎么实现呢?你可能突发奇想,想到用拼接一个空字符串来实现。

9 编程思维:如何解决问题

但这样写且不说麻烦,也会让循环发挥不了作用。

原来print()函数里有个参数'end'是用来控制换行行数和结尾字符,比如说,你可以运行下列代码,感受一下,留意'end='后面的内容:

9 编程思维:如何解决问题

教给大家一个小技巧,用print('')来控制换行,请你直接运行下下面的代码看一看:

9 编程思维:如何解决问题

可算输出了我们想要的结果了,那么依葫芦画瓢,把所有的等式放在一起就是:

9 编程思维:如何解决问题

虽然看起来还很不优雅,但相信我到了这一步,离最后胜利只差一步之遥了!

我们可以看到以上代码是有规律的三行结构,同一结构重复了九次,这提醒我们可以再用一层循环嵌套,来彻底解决重复劳动。

我们再来看看九九乘法表,可以发现行数是固定的,范围是range(1,10),而列数(等式)则是逐行加一,即第N行就有N个等式。

9 编程思维:如何解决问题

最终代码:

9 编程思维:如何解决问题
9 编程思维:如何解决问题

如果用while循环,也是可以的,不过对比一下,是不是还是第一种解法的代码最简洁呢~

9 编程思维:如何解决问题
9 编程思维:如何解决问题

总结:

9 编程思维:如何解决问题

课后练习:

1:

题目要求
一次测评中,老师将 学习小组A 和 学习小组B 的测评成绩(满分 100 分)从低到高记录放进两个列表:
A = [91, 95, 97, 99],B = [92, 93, 96, 98] 。
现在,老师想将两个小组的成绩合并为一个列表,并按照从低到高的顺序排序,你能帮老师完成吗?

提示:
三个提示:
1.如果你直接将 list2 合并到 list1 上,那就无法做到只看A组的成绩,所以,最好再建一个列表来合并两组的成绩;
2.可以使用list.copy()来复制列表中的内容。
3.合并后不要忘了打印一下合并的列表,看看结果是否正确。
4.了解sort()函数。

代码:

list1 = [91, 95, 97, 99]  
list2 = [92, 93, 96, 98]

# 把 A 组成绩赋值给一个新列表,用来存合并的成绩——这个细节要注意!
list3 = list1.copy()
list3.extend(list2)
# print(list3)
# 对原列表进行排序
list3.sort()
print(list3)
9 编程思维:如何解决问题

2:

上一个练习中,我们完成了两组成绩的合并和排序。
不过,老师有了新的需求:想知道两组的平均分,以及把低于平均分的成绩也打印出来。
所以,在这个练习中,我们会帮老师计算出两组的平均分,并挑出那些在平均分之下的成绩。

1.目前我们想要的结果是:求平均值和判断比较;
2.我们可以去找的新知识有:Python 求平均值;
3.我们的切入点:请你通过搜索,找到更简单的求平均值的方法,来改造代码。

9 编程思维:如何解决问题

直接引用库方式:

9 编程思维:如何解决问题

发布者:LJH,转发请注明出处:https://www.ljh.cool/7739.html

(0)
上一篇 2022年9月12日 下午1:02
下一篇 2022年9月12日 下午4:06

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注