函数习题讲解2| 学习笔记

简介: 快速学习函数习题讲解2

开发者学堂课程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))

运行后的结果是:

image.png

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):

运行后的结果是:

image.png

二、选做题

(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())

此时运行后得到的结果是:

image.png

注意:

之前中拿到的是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 list2or (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类创建出来的实例

相关文章
|
3月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
72 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
|
5月前
|
IDE 编译器 开发工具
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
39 0
|
6月前
|
存储 安全 编译器
【C++初阶】10 .习题①
【C++初阶】10 .习题①
64 2
|
程序员 C语言
初阶函数经典例题(2)
初阶函数经典例题(2)
|
存储 算法 C语言
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
|
自然语言处理 C语言 C++
C进阶习题(下)
C进阶习题(下)
【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(一)
【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(一)