函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但我们也可以自己创建函数来实现一些功能,这被叫做用户自定义函数。
下面来看几个例题:
第1关:闰年的判断函数
任务描述
本关任务:编写一个函数,能判断年份n是否是闰年,并调用该函数判断输入的年份是否为闰年。
相关知识
为了完成本关任务,你需要掌握:1.如何定义函数,2.如何调用函数,3.如何判断年份是闰年。
函数的定义
def 函数名([形式参数列表]):
函数体
[return 返回值列表]
函数的调用三种形式
(1)作为语句形式出现(直接写在一行中)
(2)在表达式中出现(此时函数需要有返回值)
(3)作为另一个调用函数的实际参数出现(此时函数需要有返回值)
如何判断闰年
能被4整除却不能被100整除或能被400整除的年份是闰年
测试说明
平台会对你编写的代码进行测试:
测试输入: 2021
预期输出: False
测试输入:
2020
预期输出:
True
代码解析
def isleapyear(n):
if (n%4 == 0 and n%100 != 0) or n %400 == 0:
return True
else:
return False
n=int(input())
print(isleapyear(n))
第2关:匿名函数的应用1
任务描述
本关任务:输入学生数据列表,要求:
(1)按年龄降序排列输出
(2)按姓名降序排列输出
相关知识
为了完成本关任务,你需要掌握:1.列表排序方法sort,2.lambda函数。
排序方法sort
list.sort( key=None, reverse=False )
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
lambda函数
lambda匿名函数:用于定义简单的、能够在一行内表示的函数,返回一个函数类型。 格式如下: 函数名 = lambda 形式参数列表: 表达式
测试说明
平台会对你编写的代码进行测试:
测试输入:
请输入若干个学生姓名与年龄字典[{'name':'Tom','age':20},{'name':'Rose','age':22}]
测试输出:
[{'name': 'Rose', 'age': 22}, {'name': 'Tom', 'age': 20}]
[{'name': 'Tom', 'age': 20}, {'name': 'Rose', 'age': 22}]
代码解析
lst = eval(input("请输入若干个学生姓名与年龄字典"))
lst1 = sorted(lst,key = lambda x: x['age'],reverse = True)
lst2 = sorted(lst,key = lambda x: x['name'],reverse = True)
print(lst1)
print(lst2)
题目中说用list.sort()应该也可以,那就是这样:
print(lst.sort(key = lambda x: x['age'],reverse = True))
print(lst.sort(key = lambda x: x['name'],reverse = True))
第3关:匿名函数的应用2
任务描述
本关任务:
(1)从键盘输入一个数字列表list1
(2)计算列表list1所有元素的平方,组成新的列表list2
(3)选取列表list1中的所有偶数,组成新的列表list3
测试说明
平台会对你编写的代码进行测试:
测试输入:
输入一个列表:[1,2,3,4,5,6]
预期输出:
[1, 4, 9, 16, 25, 36]
[2, 4, 6]
代码解析
这里我们可以使用map()函数:
map()函数
map() 函数会根据提供的函数对指定序列做映射,与lambda函数类似,也是可以自定义的一种匿名函数,不过一般要用到诸如list()这类的函数来强制转化生成一个你所需要的序列
我们先来看这一题的代码再来对map()函数进行更详细的解释:
lst = eval(input("输入一个列表:"))
l = []
for x in lst:
if x%2 == 0:
l.append(x)
print(list(map(lambda x: x**2,lst)))
print(l)
当我们输出第一个列表时,我们希望将lst列表里的每一个元素都平方处理,那么map()函数的第一个参数就可以是进行平方操作的lambda自定义函数,第二个参数就是你要操作的可迭代对象lst。
关于map()函数详情还请看下一章内容。
第4关:统计字符个数函数
任务描述
本关任务:编写函数,计算字符串中的数字、字母、空格以及其他字符的个数。调用函数,传入从键盘上输入的任意字符串,求其中数字、字母、空格和其他字符的个数。
相关知识
为了完成本关任务,你需要掌握:1.函数的定义,2.函数的调用,3.字符判断与统计。
字符判断与统计
统计数字、字符、空格和其他字符的问题实质是累加问题。 遍历字符串中的字符,判断是否数字、字符和空格可以采用字符串的方法isdigit()、isalpha()和isspace()。
测试说明
平台会对你编写的代码进行测试:
测试输入: 4WOcUT$DL7E lG@5
预期输出:
数字3
字母10
空格1
其他字符2
代码解析
#自定义函数统计字符串s中数字、字母、空格及其他字符的个数
def statistics(s):
sum_number = 0
sum_char = 0
sum_space = 0
sum_other = 0
for x in s:
if 48<=ord(x)<=57:
sum_number += 1
if 65<=ord(x)<=90 or 97<=ord(x)<=122:
sum_char += 1
if ord(x) == 32:
sum_space += 1
if 33<=ord(x)<=47 or 58<=ord(x)<=64 or 91<=ord(x)<=96 or 123<=ord(x)<=126:
sum_other += 1
return "数字{}\n字母{}\n空格{}\n其他字{}".format(sum_number,sum_char,sum_space,sum_other)
#从键盘输入一字符串
s1=input()
#调用自定义函数,实参为s1。输出结果
print(statistics(s1))
这个是用的ASCII码来做判断。题目要求要用字符串的方法,当然会更加简单,这里就不做赘述了。
第5关:字典键值对调
任务描述
本关任务:编写函数reverse_dict(),功能是交换字典的key值和value值(不允许重复),并按照key值降序输出新字典的内容,返回新的字典。
测试说明
平台会对你编写的代码进行测试:
测试输入:
请输入一个字典: {"alice":1001,"john":1003,"kate":1002}
预期输出:
1003 john
1002 kate
文章来源:https://www.toymoban.com/news/detail-762370.html
1001 alice
文章来源地址https://www.toymoban.com/news/detail-762370.html
代码解析
#自定义函数reverse_dict,交换字典dic的键和值
def reverse_dict(dic):
new = {}
for key,val in dic.items():
new[val] = key
return new
#从键盘接受一个字典,存入dic字典变量
dic = eval(input("请输入一个字典:"))
#调用函数
new = reverse_dict(dic)
new = sorted(new.items(),key = lambda x: x[0],reverse = True)
for x in new:
print(f"{x[0]} {x[1]}")
到了这里,关于Python零基础学习7.1—Python自定义函数的定义和调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!