上一篇:有关运算的魔法方法 | 手把手教你入门Python之五十四
下一篇:面向对象案例讲解 | 手把手教你入门Python之五十六
本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。
函数案例讲解
1.编写函数,求1+2+3+......+N的和
def get_sum(n):
sum = 0
for i in range(int(n)):
sum += i
return sum
print(get_sum(100)) # 4950
2.编写一个函数,求多个数中的最大值
def get_max(*args):
x = args[0]
for arg in args:
if arg > x:
x = arg
return x
print(get_max(1, 9, 6, 3, 4, 5)) # 9
3.编写一个函数,实现摇骰子的功能,打印N个骰子的点数和
import random
def get_sum(n):
m = 0
for i in range(n):
x = random.randint(1, 6)
m += x
return m
print(get_sum(5)) # 23
4.编写一个函数,交换指定字典的key和value
例如:dict1={'a':1, 'b':2, 'c':3} --> dict1={1:'a', 2:'b', 3:'c'}
def swap(dict1):
dict = {}
for k, v in dict1.items():
dict[v] = k
return dict
dict1 = {'a': 1, 'b': 2, 'c': 3}
print(swap(dict1))
5.编写一个函数,提取指定字符串中的所有字母,然后拼接在一起产生一个新的字符串
例如:传入'12a&bc12d-+' -->'abcd'
def get_alphas(word):
new_str = ''
for w in word:
if w.isalpha():
new_str += w
return new_str
print(get_alphas('hello123good456')) # hellogood
6.写一个函数,求多个数的平均值
def get_averange(*args):
x = 0
for arg in args:
x += arg
return x / len(args)
print(get_average(1, 2, 3, 4, 5, 6)) # 3.5
7.写一个函数,默认求10的阶乘,也可以求其他数字的阶乘
def get_factorial(n=10):
x = 1
for i in range(1, n+1):
x *= i
return x
print(get_factorial(4)) # 24
8.写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母
例如:'abc' -> 'Abc' '12asd' --> '12asd'
def my_capitalize(word):
c = word[0]
if 'z' >= c >= 'a':
new_str = word[1:]
return c.upper() + new_str
return word
print(my_capitalize('hello')) # Hello
print(my_capitalize('34hello')) # 34hello
9.写一个自己的endswith函数,判断一个字符串是否以指定的字符串结束
例如:字符串1:'abc231ab' 字符串2:'ab' 函数结果为:True
字符串1:'abc231ab' 字符串2:'ab1' 函数结果为:False
def my_endswith(old_str, str1):
return old_str[-len(str1):] == str1
print(my_endswith('hello', 'llo')) # True
print(my_endswith('hello', 'lxo')) # False
10.写一个自己的isdigit函数,判断一个字符串是否是纯数字字符串
例如:'1234921' 结果:True
`'23函数' 结果:False`
`'a2390' 结果:False`
def my_digit(old_str):
for s in old_str:
if not '0' <= s <= '9':
return False
return True
print(my_digit('123hd90')) # False
print(my_digit('12390')) # True
11.写一个自己的upper函数,将一个字符串中的所有的小写字母变成大写字母
例如:'abH23好rp1' 结果:'ABH23好RP1'
# a==>97 A ==> 65 32
def my_upper(old_str):
new_str = ''
for s in old_str:
if 'a' <= s <= 'z':
upper_s = chr(ord(s) - 32)
new_str += upper_s
else:
new_str += s
return new_str
print(my_upper('hello')) # HELLO
print(my_upper('hel34lo')) # HEL34LO
12.写一个自己的rjust函数,创建一个字符串的长度是指定长度,原字符串在新字符串中右对齐,剩下的部分用指定的字符填充
例如:原字符:'abc' 宽度:7 字符:'^' 结果:'^^^^abc'
原字符:'你好吗' 宽度:5 字符:'0' 结果:'00你好吗'
def my_rjust(s, sub_str, num):
return sub_str * (num - len(s)) + s
print(my_rjust('aaa', 'r', 4)) # raaa
13.写一个自己的index函数,统计指定列表中指定元素的所有下标,如果列表中没有指定元素返回-1
例如:列表:[1, 2, 45, 'abc', 1, '你好', 1, 0] 元素:1 结果:0,4,6
列表:['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权'] 元素:'赵云' 结果:0,4
列表:['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权'] 元素:'关羽' 结果:-1
def index(string, s):
idxs=[]
for i, st in enumerate(string):
if st == s:
idxs.append(i)
return idxs if len(idxs) > 0 else -1
print(index('ststs', 's')) # [0,2,4]
print(index('ssss', 't')) # -1
14.写一个自己的len函数,统计指定序列中元素的个数
例如:序列:[1, 3, 5, 6] 结果:4
序列:(1, 34, 'a', 45, 'bbb') 结果:5
序列:'hello w' 结果:7
def my_len(l):
c = 0
for a in l:
c += 1
return c
print(my_len([ 1, 2, 1, 1])) # 4
15.写一个函数实现自己in操作,判断指定序列中,指定的元素是否存在
例如:序列:(12, 90, 'abc') 元素:'90' 结果:False
序列:[12, 90, 'abc'] 元素:90 结果:True
def my_in(it, ele):
for i in it:
if i == ele:
return True
else:
return False
print(my_in(['zhangsan', 'lisi', 'wangwu'], 'lisi')) # True
print(my_in(['zhangsan', 'lisi', 'wangwu'], 'jack')) # False
print(my_in({'name': 'zhangsan', 'age': '18'}, 'name')) # True
16.写一个自己的replace函数,将指定字符串中指定的旧字符串转换成指定的新字符串
例如:原字符串:'how are you? and you?' 旧字符串:'you' 新字符串:'me' 结果:'how are me? and me?'
def my_replace(all_str,old_str,new_str):
return new_str.join(all_str.split(old_str))
print(my_replace('how you and you fine you ok','you','me')) # how me and me fine me ok
第二种解法:
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
print(my_replace('how you and you fine you ok','you','me')) # how me and me fine me ok
1.写一个自己的max函数,获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值
例如:序列:[-7, -12, -1, -9] 结果:-1
序列:'abcdpzasdz' 结果:'z'
序列:{'小明':90, '张三':76, '路飞':30, '小花':98} 结果:98
def get_max2(seq):
if type(seq) == dict:
seq = list(seq.values())
x = seq[0]
for i in seq:
if i > x:
x = i
return x
print(get_max2([2, 4, 8, 1, 9, 0, 7, 5])) # 9
print(get_max2({'x':10, 'y':29, 'z':32, 'a':23, 'b':19, 'c':98})) # 98
2.写四个函数,分别实现求两个列表的交集、并集、差集、补集的功能
# 交集
def intersection(list1: list, list2: list):
"""
求两个列表中的交集
:param list1:第一个列表
:param list2:第二个列表
:return:两个列表的公共部分
"""
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:第二个列表
:return:并集
"""
return list(set(list1 + list2))
# 差集
def difference_set(list1: list, list2: list):
"""
求两个列表中的差集
:param list1:第一个列表
:param list2:第二个列表
:return:差集
"""
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:第二个列表
:return:对称差集
"""
new_list = []
for item in list1+list2:
if (item in list1 and item not in list2) or (item in list2 and item not in list1):
new_list.append(item)
return new_list