“ 函数学习:有返回值的函数!”
Learn Python,Let's Go!
今天继续学习了有返回值的函数:
比如计算两个数相乘的这个例子:
#两数相乘def mul(num1,num2): res = num1 * num2 return res print(mul(1011111,99))
爸爸为了给我增加难度,让我把等差数列的求和问题实现一下:
我在草稿纸上画了一下、写出来是这样:
#连加加法公式def add(first,tail,d): t = (tail - first) / d + 1 total = (first + tail) * t / 2 return totalprint(add(1,100,1))
接着爸爸又给我出了一个难题:
把学而思里面学过的 “宝塔数求和” 写一下,返回 求和值,比如:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 6 + 5 + 4
1 + 3 + 5 + 7 + 9 + 11 + 9 +7
一般的宝塔数,知道 “头、尾,最中间”
程序如下:
#宝塔数求和def addTower(first,tail,mid,d): tf = (mid - first) / d + 1 tolf = (first + mid) * tf / 2 tt = (mid - d - tail) / d + 1 #宝塔数中公差不一定全部为1!!!!!!!!!! tolt = (tail + mid - d) * tt / 2 total = tolf + tolt return total #print(addTower(2,7,15,1)print('你要求和的宝塔数是:')TA = tuple(range(1,11+2,2))print(TA)TB = tuple(range(11-2,7-2,-2))print(TB)TAll = TA + TBprint(TAll)print(addTower(first = 1,tail = 7,mid = 11,d = 2))
运行结果是:
进一步学习有返回值函数时:
我居然发现了书上一个小的bug,于是把课本的代码改了一下,分享给大家:
问题是:给你一串数字,从中找出最大值:
书中的程序是:
def max(*nums1): max = 0 # 应该改成nums1[0] for num in nums1: if num > max2: max = num return maxmaxNum = max1(-111,-222,-222,-333,-444,-55,-5,-1.5)print('最大值是:')print(maxNum)
看出点啥问题没?
我想:聪明的你一定发现问题了!!!
1、max函数是内嵌函数,我觉得可以换个名字;
2、预设max=0不是很合理,假如所有的数字都比0小就出错了。
爸爸说:
Toby,你可以想一下,你们同学排队的时候,有没有这种情况:
找到一个同学站在第一位,如果下一个进入队伍的比这个同学高,就占到后面,如果再进来一个又比最后的一个同学高,他就要站在最后,那么全部比完了,最高的就是最后的。
要找最前面最矮的同学也可以一样操作。
这个是一种排序呢,你长大了要学习的。
我想了一下,觉得有点道理。
于是,在爸爸的建议和书上例子的启发下,我修改了一下代码:
def max1(*nums1): max2 = nums1[0] for num in nums1: if num > max2: max2 = num return max2print(max1(-111,-222,-222,-333,-444,-55,-5,-1.5))
类似地,我试着找了最小值,觉得程序可以写成这样:
def min1(*nums2): min2 = nums2[0] for num2 in nums2: if num2 < min2: min2 = num2 return min2print(min1(222,222,555,5,1.5,-58))
大家看对不对呢?
所以写书的人忽略了的地方应该是原先指定 max = 0 是不妥当的。
于是我给作者QQ留了个消息,希望他下一次出版时能纠正过来。
亲亲 !点个 在看 吧 !