3.内置函数篇

3.1 abs

abs函数返回数字的绝对值,请实现下面的函数,模仿abs函数的功能,返回数字的绝对值

def my_abs(number):

​ pass

代码:

def my_abs(number):

​ if not isinstance(number, (float, int)):

​ return number

​ if number < 0:

​ number *= -1

​ return numbe

思路:

处于程序健壮性考虑,要对传入的number参数进行检查,判断其类型是否为数字类型,float和int是比较常用的数据类型,复数类型基本接触不到,因此不考虑。
判断变量类型,可以使用isinstance函数,该函数的第一个参数是需要检查类型的对象,第二个参数可以是数据类型,也可以是一个元组,元组里是多个数据类型,只要满足其中一个就返True
如果number的数值小于0,乘以-1就得到了绝对值

3.2 sum

sum函数可以获取列表所有数据的综合,模仿这个功能实现下面的函数

def my_sum(lst):

​ “””

​ 返回列表⾥所有数据的总和

​ 如果列表⾥有⾮数字类型的数据,忽略不管

​ :param lst:

​ :return:

​ “””

​ pass

代码:

def my_sum(lst):

sum_res = 0

if not isinstance(lst, list):

​ return sum_res

for item in lst:

​ if isinstance(item, (float, int)):

​ sum_res += item

return sum_res

思路:

①对传入的参数lst,要进行类型检查

②遍历列表,遇到数字类型的数据就进行加和操作

3.3 max

max函数返回序列中的最大值,传入的参数可以是列表,也可以是元组,实现下面的函数,实现同样的功能,如果序列里有非数字类型的数据,可以忽略,如果序列是空的,可以直接返回None

def my_max(seq):

​ “””

​ 返回序列⾥的最⼤值

​ :param lst:

​ :return:

​ “””

代码:

def my_max(seq):

​ max_value=None

​ if not isinstance(seq,(list,tuple)):

​ return max_value

​ if len(seq)=0:

​ return max_value

​ max_value=seq[0]

​ for item in seq:

​ if not isinstance(item,(int,float)):

​ continue

​ if item>max_value:

​ item=max_value

​ return max_value

思路:

①对传入的参数seq需要进行类型检查,如果既不是列表也不是元组,那么就返回None

②如果序列是空的,也直接返回None

③ 遍历序列中的元素,如果数据的类型不属于数字类型,那么就忽略跳过

3.4 min

min函数返回序列中的最小值,传入的参数可以是列表,也可以是元组,实现下面的函数,实现同样的功能,如果序列里又非数字类型的数据,可以忽略

def my_min(seq):

​ “””

​ 返回序列⾥的最⼩值

​ :param lst:

​ :return:

​ “””

​ pass

代码(与max类似):

def my_min(seq):

​ min_value=None

​ if not isinstance(seq,(list,tuple)):

​ return min_value

​ if len(seq)=0:

​ return min_value

​ min_value=seq[0]

​ for item in seq:

​ if not isinstance(item,(int,float)):

​ continue

​ if item<min_value:

​ item=min_value

​ return min_value

思路(与max一致):

①对传入的参数seq需要进行类型检查,如果既不是列表也不是元组,那么就返回None

②如果序列是空的,也直接返回None

③ 遍历序列中的元素,如果数据的类型不属于数字类型,那么就忽略跳过