Python零基础学习7.1—Python自定义函数的定义和调用

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但我们也可以自己创建函数来实现一些功能,这被叫做用户自定义函数。

下面来看几个例题:

第1关:闰年的判断函数

任务描述

本关任务:编写一个函数,能判断年份n是否是闰年,并调用该函数判断输入的年份是否为闰年。

相关知识

为了完成本关任务,你需要掌握:1.如何定义函数,2.如何调用函数,3.如何判断年份是闰年。

函数的定义

def 函数名([形式参数列表]):

        函数体

        [return 返回值列表]

函数的调用三种形式

(1)作为语句形式出现(直接写在一行中) 

扫描二维码关注公众号,回复: 17288968 查看本文章

(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

1001 alice

代码解析

#自定义函数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]}")

猜你喜欢

转载自blog.csdn.net/HkSwaggyD/article/details/130060442