开发者学堂课程【Python入门 2020年版:函数习题讲解2】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10373
函数习题讲解2
内容介绍:
一、必做题16
二、选做题
三、在求最大数中的疑惑
一、必做题16
写一个自己的 replace 函数,将指定字符串中指定的就字符串转换成指定的新字符串
(1)方法1
加入代码:
def my_repalce(all_str,old_str,new_str):
print(all_str.split(old_str))
print(my_replace(‘how you and you fine you ok’,’you’,’me’))
整体代码内容为:
def get_max(*args):
x = args[0]
for arg in args:
if arg > x
x = arg
rerurn x
def get_num(n)
m=0
for i in range(n):
x = random.randint(1,6)
m += x
return m
def get _alphas(word):
rgs):
x = 0
for arg in args :
x += arg
return x / len(args)
def my_captalize(word):
c = word[0]
if
‘z’>= c >= ‘a‘:
new_str = word[1:]
return c.upper() + new_str
return word
else :
return False
def my_repalce(all_str,old_str,new_str):
print(all_str.split(old_str))
print(get_max(1,9,6,3,4,5))
print(get_sum(5))
print(get_alpha(
‘hello123good456’))
print (get_factorical(4))
print(get_average(1,2,3,4,5,6))
print(my_capitalize(
‘hello’))
print(my_endswith(
‘hello’,’lxo’))
print (my_digit(
‘123hd90’))
print(my_upper(
‘hello’))
print(my_in([
‘zhangsan’,’lisi’,’wangwu ’],’lisi’))
my_replace(
‘how you and you fine you ok’,’you’,’me’)
运行结果为:
切完之后会变成一些列名,并且每一个之间还有空行,是用you来切的。
如何再讲切完后的字符串重新拼接起来?
在之前学到的想把[‘zhangsan’,’lisi’,’wangwu’]
转换为
zhangsan_lisi_wangwu
的形式,是用的_来改变的。
类似的,在这题中就是用me来连接,用新的语句来改正:return new_str.join(all_str.split(ols_str))
整体代码内容为:
def get_max(*args):
x = args[0]
for arg in args:
if arg > x
x = arg
rerurn x
def get_num(n)
m=0
for i in range(n):
x = random.randint(1,6)
m += x
return m
def get _alphas(word):
new_str =
‘ ’
for w in word :
c = word[0]
if
‘z’>= c >= ‘a‘:
new_str = word[1:]
return c.upper() + new_str
return word
def my_endswith(old_str,str1):
old_str[-len(str1):] == str1
def my_digit(old_str):
upper_s = chr(ord(s)
– 32)
else:
new_str += s
return new_str
def my_in(it,ele):
for i in it:
if i == ele
Return True
else :
return False
def my_repalce(all_str,old_str,new_str):
return new_str.join(all_str.split(old_str))
print(get_max(1,9,6,3,4,5))
运行后的结果是:
(2)方法2
这个思想是先查you,用一次查三个的方法,如果此时对上了you,就替换成新的字,如果没有对上就把这个字一个一个加进来。
如果 temp 不等于旧的字符串,result 就只加一个,只加一个的原因是,如果一下搜三个,就会出现只加一个而不加三个的疑问。
如果加上的是旧字符串的长度,一上来就是how,它不等于you,就会把字符串加到新的上面。
在进行下一次取三个的时候,可能会把原来的you拆开,导致无法正常查询到you,所以不可以一下加入多个,一次只能加一个。
当它正好等于you的时候,要进行替换并一下跳过这个的长度
写法:
def my_replace(all_str,old_str,new_str):
result =
‘’
i = 0
while I < len(all_str):
temp = all_str[i:i + len(old_str)]
if temp != old_str:
result += all_str[i]
i += 1
else
:
result +=new_str
i += len(old_str)
return result
整体代码内容为:
def get_max(*args):
x = args[0]
for arg in args:
if arg > x
x = arg
rerurn x
def get_num(n)
m=0
for i in range(n):
x = random.randint(1,6)
m += x
return m
def get _alphas(word):
new_str = ‘ ’
for w in word :
if w.isalpha():
new_str += w
return new_str
def get_factorical(n=10):
x = 1
for i in range(1,n+1):
x *= i
return x
def get_avergae(*args):
x = 0
for arg in args :
x += arg
return x / len(args)
def my_captalize(word):
c = word[0]
if
‘z’>= c >= ‘a‘:
new_str = word[1:]
return c.upper() + new_str
return word
def my_endswith(old_str,str1):
old_str[-len(str1):] == str1
def my_digit(old_str):
eturn new_str
def my_in(it,ele):
for i in it:if i == ele:
Return True
else :
return False
def my_repalce(all_str,old_str,new_str):
运行后的结果是:
二、选做题
(1) 写一个自己的max函数,获取指定序列中元素的最大值,如
果序列是字典,取字典的最大值。
加入代码:
def get_max2(it):
x = sqe[0]
for i in sqe:
if i > x:
x =1
return x
print(get_max2([2,4,8,1,9,0,7,5
]))
整体代码内容为:
def get_max(*args):
x = args[0]
for arg in args:
x = arg
rerurn x
def get_num(n)
m=0
for i in range(n):
x = random.randint(1,6)
m += x
return new_str.join(all_str.split(old_str))
def get_max2(it):
x = sqe[0]
for i in sqe:
if i > x:
x =1
return x
print(get_max(1,9,6,3,4,5))
运行后的结果是:
现在的问题是字典的话,求字典的最大值。
如果之间加入语句print(get_max({‘x’:10,’y’:29,’z’:32,’a’:23,’b’:19,’c’:98}))
运行后的结果直接会崩溃
原因是字典中不可以通过下标来取值,所以要把def get_max2()函数修改为:
def get_max2(seq):
if type (seq) == dict:
seq = seq.values()
x = sqe[0]
for i in sqe:
if i > x:
x =1
return x
打印后发现结果是空。
现在加入print(seq)
来查出问题,此时在运行的结果为:
之前说dict_values
是可以像字典一样遍历,但没有说可以像字典一样取值。
既然可以像列表一样遍历,就可以通过list转换为一个列表,语句内容为:seq =
list(seq.values())
此时运行后得到的结果是:
注意:
之前中拿到的是dict_values
的数据,它和列表有区别,不能直接取值,所以就可以直接变为列表取值就可以。
(1) 写四个函数,分别实现求两个列表的交集、并集、差集、补集
的功能
答案如下:
def intersection(list1:list,list2:list):
“””
求两个列表中的交集
:param list1: 第一个列表
:param list2: 第二个列表
:reutrn: 两个列表的公共部分
““”
new_list = []
for item in list1:
if item in list2:
new_list.append(item)
return new_list
#交集
def union_set(list1:list,list2:list)
“””
求两个列表中的并集
:param list1:
第一个列表
:param list2:
第二个列表
:reutrn:
并集
““”
return list(set(list1 + list2))
#差集
def difference_set(list1:list,list2:list):
“””
求两个列表中的差集
:param list1:
第一个列表
:param list2:
第二个列表
:reutrn:
差集
““”
new_list = []
for item in list1:
if item in list2 and item not in new_list:
new_list.append(item)
return new_list
#对称差集
def symmetry_diff_set(list1:list,list2:list):
求两个列表中的对称差集
:param list1:
第一个列表
:param list2
: 第二个列表
:reutrn
:对称差集
““”
new_list = []
for item in list1+list2:
if
(item in list1 and item not in list2)or (item in list
and item not in list1):
new_list.append(item)
return new_list
主要要明白交并补差集的关系,了解代码内容
三、在求最大数中的疑惑
怎样判断是否是一个字典?
一个是用它的type和字典去比较,也就是之前讲的过程中涉及到的语句,if type(seq) == dict
。
除此之外,答案中用的是instance(seq,dict)
,是面向对象的一种语法,就是看 seq 是否是通过dict类创建出来的实例