python_内置函数_练习3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本练习的重点:通过实现与内置函数相同功能的函数来达到锻炼提升编码能力的目的。
1.abs(x)函数
返回一个数的绝对值。 参数可以是一个整数或浮点数。 如果参数是一个复数,则返
回它的模。 如果 x 定义了 abs(),则 abs(x) 将返回 x.abs()。
2.class complex([real[, imag]]) 函数
返回值为 real + imag*1j 的复数,或将字符串或数字转换为复数。如果第一个形参
是字符串,则它被解释为一个复数,并且函数调用时必须没有第二个形参。
当从字符串转换时,字符串在 + 或 的周围必须不能有空格。例如 complex('1+2j')
是合法的,但 complex('1 + 2j') 会触发 ValueError 异常。
3.isinstance(object, classinfo) 函数
如果参数 object 是参数 classinfo 的实例或者是其 (直接、间接或 虚拟) 子类则返回
True。 否则返回 False。 如果 classinfo 是类型对象元组(或由其他此类元组递归
组成的元组),那么如果 object 是其中任何一个类型的实例就返回 True。 如果
classinfo 既不是类型,也不是类型元组或类型元组的元组,则将引发 TypeError 异
常。
In [25]:print(abs(1))
print(abs(1.212))
print(abs(complex('1+2j'))) # 返回 sqrt(1+4)
a = complex('1+2j')
1
1.212
2.23606797749979
请实现下面的函数,模仿abs函数的功能,返回数字的绝对值。
In [23]:import math
# 方法1
def my_abs_1(number):
if type(number) == int or type(number) == float:
if number < 0:
return number*(1)
else:
return number
elif type(number) == complex:
return math.sqrt(number.real**2 + number.imag**2)
#方法2
# 判断变量类型,可以使用isinstance函数,
# 该函数的第一个参数是需要检查类型的对象,
# 第二个参数可以是数据类型,也可以是一个元组,
# 元组里是多个数据类型,只要满足其中一个就返回True
def my_abs_2(number):
if isinstance(number, (float,int)):
if number < 0:
return number*(1)
else:
return number
elif isinstance(number, complex):
return math.sqrt(number.real**2 + number.imag**2)
if __name__ == "__main__":
print(abs(1), end = " ")
print(abs(1.212), end = " ")
print(abs(complex('1+2j')), end = " \n")
print(my_abs_1(1), end = " ")
print(my_abs_1(1.212), end = " ")
print(my_abs_1(complex('1+2j')), end = " \n")
print(my_abs_2(1), end = " ")
print(my_abs_2(1.212), end = " ")
print(my_abs_2(complex('1+2j')), end = " ")
1 1.21
2 2.23606797749979
1 1.21
2 2.23606797749979
4. sum(iterable, /, start=0)函数
从 start 开始自左向右对 iterable 的项求和并返回总计值。 iterable 的项通常为数
字,而 start 值则不允许为字符串。
对某些用例来说,存在 sum() 的更好替代。 拼接字符串序列的更好更快方式是调用
''.join(sequence)。 要以扩展精度对浮点值求和,请参阅 math.fsum()。 要拼接一
系列可迭代对象,请考虑使用 itertools.chain()。
sum 函数可以获取列表所有数据的总和,模仿这个功能实现下面的函数In [48]:sum ((1.1,2,3))
# sum([1,2,3, [1,2,3]])In [43]:def my_sum (lst):
'''
返回列表里所有数据的总和
:param lst:
:return:
'''
sum = 0
if not isinstance (lst, (list , tuple , set )):
return None
for i in lst:
if isinstance (i, (float , int )):
sum += i
else :
print ("error!!!")
return
return sum
if __name__ == "__main__":
print (sum ([1.1,2,3]), sum ((1.1, 2, 3)), sum ({1.1,2,3}))
print (my_sum([1.1,2,3]), my_sum((1.1, 2, 3)), my_sum({1.1,2,3})) #print(sum([1.1,2,3, [1,2,3]]))
#print(my_sum([1.1,2,3,[1,2,3]]))
5. max(iterable, [, key, default]) max(arg1, arg2,
args[, key]) 函数1 1.212 2.23606797749979
Out[48]: 6.1
6.1 6.1 6.1
6.1 6.1 6.1