阅读代码是编写代码的重要基础,倘若看不懂示例代码,那么自己也就很难写出相同功能的代码。然而很多人都卡在了阅读代码这个环节,也有一些人说自己看得懂,但是写不出来,在我看,根本原因还是没有看懂,至少不是真的懂。比如下面的这段代码
lst = [3, 8, 1, 2, 5]
for i in range(len(lst)-1):
if lst[i] > lst[i+1]:
tmp = lst[i]
lst[i] = lst[i+1]
lst[i+1] = tmp
print(lst[-1])
这段代码,俩俩比较列表中两个相邻的对象,如果左侧的数值大于右侧的,就交换他们的位置。你说你看懂了,我觉得未必,我说一说我是怎么看懂的,你可以比较一下,你的懂和我的懂之间有什么区别。
首先,我假设i=0, 我就想知道当i等于0时会发生什么,为什么要选择i=0来思考,因为在循环的过程中,i是从0开始的,我在这个边界处,在程序最开始的地方思考,更能够帮助我理解程序的全貌。
接下来,是if条件语句,判断lst[0] > lst[1] 是否成立,假设成立,就会交换他们的位置,实际比较一下发现,3 > 8 是不成立的,因此不会交换他们的位置,3还是索引0的位置,8也没有动
再继续分析,下一轮循环,i变为1,执行到if条件语句,比较lst[1] 和 lst[2], lst[1]=8, lst[2] = 1, 8 > 1成立,因此进入到if语句块,交换两个数据的位置,我们来模拟一下交换的过程
最终的结果,lst[1] = 1, lst[2] = 8
这一轮循环结束后,开启下一轮循环,i变为2,if条件语句需要比较lst[2] 和 lst[3] 的大小关系,如果lst[2] 比lst[3] 大,就交换这两个对象的位置,如此反复,直到循环结束。
循环最终的结果,列表里最大的数值一定在列表的末尾,你想清楚了么?
你所谓的懂,究竟是可以在脑海里模拟出程序执行的过程,还是模模糊糊的理解了程序的目的?如果是后者,我劝你虚心,切勿好高骛远,懂,就是要做到彻彻底底的懂,深入骨头的理解,而不是似懂非懂。
如果你真的懂了,请思考这个问题,为什么range函数里,我写的是len(lst)-1, 而不是len(lst)?
QQ交流群: 211426309