如果你想培养自己的编程思维,请从这些简单的事情着手,不要试图去看那些高难度的算法,也不要尝试通过具体的项实践来提升锻炼编程的思维,在你还没有学会走路之前,跑对你来说是一项只存在于幻想中的动作。
你刚刚已经学过了比较2个数的大小,似乎比较3个数的大小已经是手到擒来之事,然而看完我的文章,一定会让你别有一番收获。
def max_of_three_int(x, y, z):
pass
在继续阅读教程之前,请先自己尝试实现这个函数,对比我的方法和你自己实现的方法,学习效果会更好
def max_of_three_int(x, y, z):
if x > y:
if x > z:
return x
else:
return z
else:
if y > z:
return y
else:
return z
max_int = max_of_three_int(4, 6, 8)
print(max_int)
我的代码里出现了if 嵌套,如果你的思维已经开始混乱,请看我画的程序流程图
这种写法,考验一个人的逻辑是否足够的清晰,先从两个数中找出最大的一个,然后用这个最大的数值去和第3个数值进行比较。
尽管这种方法普遍的用于算法,但似乎并没有专门为它起一个含义贴切的名字,我大胆称其为争夺宝座法,如果你在其他教程里看到更准确的描述,请分享给我,在这种方法里,我声明创建一个变量max_int, 让它等于3个数值中的任意个,接下来,剩余的两个数值与max_int进行比较,就好比要争抢宝座,谁赢了,谁就做上去,在逻辑上,谁的数值更大,便将谁赋值给max_int
def max_of_three_int(x, y, z):
max_int = x
if y > max_int:
max_int = y
if z > max_int:
max_int = z
return max_int
max_int = max_of_three_int(4, 6, 8)
print(max_int)
接下来画出程序的流程图
受此方法启发,我们来实现从列表中找出最大值,注意,不要使用max内置函数
lst = [8, 6, 1, 7, 4]
max_value = lst[0] # 先让lst[0] 登上宝座
# 接下来,剩余的数值争抢这个宝座
for item in lst:
if item > max_value:
max_value = item
print(max_value)
你或许已经注意到,在遍历列表的过程中,lst[0] 和max_value进行比较,但max_value本就等于lst[0],这有必要么?从逻辑上讲,是没有必要的,但从代码实现上看,这是最舒服的一种写法,仅仅多了一次比较而已,没什么大不了,如果想减少一次比较,就必须这样写
lst = [8, 6, 1, 7, 4]
max_value = lst[0] # 先让lst[0] 登上宝座
# 接下来,剩余的数值争抢这个宝座
for i in range(1, len(lst)):
if lst[i] > max_value:
max_value = lst[i]
print(max_value)
这样写的确避免了lst[0] 与 max_value进行比较,但是代码写起来不舒服,可阅读性降低,为了减少一次比较而付出如此大的代价是不值得的。
前面的章节里,已经实现了两个数的比较,为何不结束max_value函数呢?
def max_value(x, y):
if x > y:
return x
return y
def max_of_three_int(x, y, z):
max_int = max_value(x, y)
max_int = max_value(max_int, z)
return max_int
max_int = max_of_three_int(4, 6, 8)
print(max_int)
编写函数的目的之一就是代码复用,新的功能借助之前已经实现的函数来实现,
QQ交流群: 211426309