python思维方法_思维:如何高效学习Python

第9节课程大纲

一、瓶颈1:知识学完就忘

1.1 用法查询笔记

1.2 深度理解笔记

1.3 知识管理

二、瓶颈2:缺乏解题能力

2.1 如何解题

一、瓶颈1:知识学完就忘

忘了就忘了吧,无所谓。等到要用的时候“临时抱佛脚”也是行得通的,毕竟编程是“开卷”的,你可以随时查阅。

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

如何快速提高【掌握】知识的程度——既加深对知识的印象,又知道知识的使用场景呢?使用【案例笔记法】

【案例笔记法】包括了两种类型的笔记:【用法查询笔记】和【深度理解笔记】。

1.1 用法查询笔记

【用法查询笔记】就是记录知识点的基础用法,它是你的学习记录,能供你快速查阅,加深对知识的印象。

要记住的是:不管你用什么格式记笔记,目的只有一个,就是 “方便自己查询使用”。

示例:算数运算符&列表&字典示例1:知识-算数运算符示例2:知识-列表示例:知识-字典

1.2 深度理解笔记

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

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

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

通常来说,我们需要回答“什么时候需要用到这个知识?这个知识有什么常见用法?这个知识和其他知识有什么不同?”之类的问题,并写下自己的思考过程。

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

作为萌新,你可以尝试从“什么时候需要用到这个知识”记起,在后续练习和实操的过程,当你积累越来越多的时候,进一步补充笔记,比如补充这个知识的多种使用技巧。

1.3 知识管理

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

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

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

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

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

二、瓶颈2:缺乏解题能力

2.1 如何解题

看到题目,隐隐中知道要用什么知识,但会卡住,很重要的原因是还没有形成解题的思路。

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

2.1.1 分析问题,明确结果

分析问题是解决问题的第一步,所以拿到题目的时候我们首先要思考“这是一个怎样的问题”。

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

2.1.2 思考需要的知识,或搜索新知识

首先很明显,要打印信息就必须用到最基本的print()函数;另外,我们可以留意到,九九乘法表是有一定规律,重复的结构,所以我们可以想到用循环来处理;同时,我们能看到数字是在灵活变动的,所以用“格式化字符串”来为变动的数字预留位置会方便些。

2.1.3 思考切入点

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

我们再来观察九九乘法表,我们会发现一个规律:每一行的等式里,第一位数会递增,第二位数则会保持不变,并且在第几行就会有多少个等式。

也就是说,每一行其实都可以是一个小循环,那我们就可以以此为切入点,先把每一行的小循环写出来,再进一步寻找规律。

记住从简单的切入点入手,解决一部分问题,往往会让问题变得更简单,更容易被解决。

2.1.4 尝试解决问题的一部分

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

1 X 2 = 2 2 X 2 = 4

1 X 3 = 3 2 X 3 = 6 3 X 3 = 9

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))

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

解决问题的时候发现了新的问题,所以,我们回到第2步重新思考:思考需要的知识,或搜索新知识

现在我们希望print出来的东西不换行,那怎么实现呢?搜索大法!搜索除了新知识:print()函数里有个参数'end'是用来控制换行行数和结尾字符。

由此,输出代码:

for i in range(1,2):

print( '%d X %d = %d' % (i,1,i*1) ,end = ' ' )

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('')

for i in range(1,5):

print( '%d X %d = %d' % (i,4,i*4) ,end = ' ' )

print('')

for i in range(1,6):

print( '%d X %d = %d' % (i,5,i*5) ,end = ' ' )

print('')

for i in range(1,7):

print( '%d X %d = %d' % (i,6,i*6) ,end = ' ' )

print('')

for i in range(1,8):

print( '%d X %d = %d' % (i,7,i*7) ,end = ' ' )

print('')

for i in range(1,9):

print( '%d X %d = %d' % (i,8,i*8) ,end = ' ' )

print('')

for i in range(1,10):

print( '%d X %d = %d' % (i,9,i*9) ,end = ' ' )

print('')

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

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

基于此和上述已完成的代码,得到最终代码:

解法一:

for i in range(1,10):

for j in range(1,i+1):

print( '%d X %d = %d' % (j,i,i*j),end = ' ' )

print(' ')

第二种解法:

for i in range (1,10):

for j in range(1,10):

print('%d X %d = %d' % (j,i,i*j),end = ' ')

if i==j:

print('')

break

第三种解法:

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

总结

三、练习题

3.1 列表合并与排序

题目:一次测评中,老师将 学习小组A 和 学习小组B 的测评成绩(满分 100 分)从低到高记录放进两个列表:A = [91, 95, 97, 99],B = [92, 93, 96, 98] 。

现在,老师想将两个小组的成绩合并为一个列表,并按照从低到高的顺序排序,你能帮老师完成吗?

方法一:

list1 = [91, 95, 97, 99]

list2 = [92, 93, 96, 98]

# 把 A 组成绩赋值给一个新列表,用来存合并的成绩——这个细节要注意!

list3 = list1.copy()

list3.extend(list2)

# 列表排序

list3.sort()

print(list3)

方法二:

list1 = [91, 95, 97, 99]

list2 = [92, 93, 96, 98]

# 列表合并

list3=list1+list2

# 列表排序

list3.sort()

print(list3)

3.2 循环与判断

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

方法一:

# 计算列表的平均值

import numpy as np # 导入 numpy库,下面出现的 np 即 numpy库

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

scores2 = []

average = np.mean(scores1) # 求列表平均值

print('平均成绩是:{}'.format(average))

# 挑出低于平均分的成绩

for score in scores1:

if score < average:

scores2.append(score) # 少于平均分的成绩放到新建的空列表中

print(' 低于平均成绩的有:{}'.format(scores2))

# 另类解法:使用NumPy数组

scores3 = np.array(scores1)

print(' 低于平均成绩的有:{}'.format(scores3[scores3

方法二:

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

sum = 0

scores2 = []

for score in scores1:

sum = sum + score

average = sum/len(scores1)

# 上面最好不要去数有几个学生,那样的话,学生数目发生变化就要调代码。

print('平均成绩是:{}'.format(average))

for score in scores1:

if score < average:

scores2.append(score) # 少于平均分的成绩放到新建的空列表中

print(' 低于平均成绩的有:{}'.format(scores2))

学习时间:3月16日

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值