加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Python 函数实战分析

发布时间:2023-06-27 10:33:53 所属栏目:教程 来源:
导读:模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一个确定的功能,并在这些模块之间建立必要的联系,通过模块的互相协作完成整个功能的程序设计方法。

在设计较
模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一个确定的功能,并在这些模块之间建立必要的联系,通过模块的互相协作完成整个功能的程序设计方法。

在设计较复杂的程序时,一般采用自顶向下的方法,将问题划分为几个部分,各个部分再进行细化,直到分解为较好解决问题为止。

采用模块化设计编写程序时,不是一开始就逐条编写程序代码,而是首先用主程序、子程序等框架把软件的主要结构和流程描述出来。以功能块为单位进行程序设计,实现其求解算法的方法称为模块化。

利用函数,不仅可以实现程序的模块化,使得程序设计更加简单和直观,从而提高了程序的易读性和可维护性,而且还可以把程序中经常用到的一些计算或操作编写成通用函数,以供随时调用。

本小节实现一个通讯录管理程序。在前面章节中,程序的各项功能代码全部集中在一个代码段中,程序的结构不清晰。本小节使用函数来实现程序,采用模块化的程序设计方法:

划分通讯录程序的功能模块,使用函数实现相应的功能

首先实现整体框架,然后再细化每个功能细节

最终的程序由多个函数构成,每个函数实现一个单一的功能,整个程序的结构清晰

1. 通讯录功能简介
编写程序 addr-manage.py 实现通讯录管理系统,通讯录包含若干联系人,每个联系人包括:姓名、地址、电话 3 项内容。程序提供 4 项基本功能:

增加联系人: 用户输入姓名、地址、电话等信息,将信息保存在一个列表中

列出联系人: 打印输出所有联系人的信息

查询联系人: 用户输入联系人姓名,打印输出该联系人的信息

删除联系人: 用户输入联系人姓名,从通讯录中删除该联系人

通过命令行界面实现以上功能,程序 addr-manage.py 运行时首先打印一个菜单,如下所示:

C:\> python addr-manage.py
1. create person
2. list all persons
3. query person
4. delete person
5. quit
Enter a number(1-5):
总共有 5 个选项,用户输入对应的数字选择相应的功能,如下表所示:

数字选项    功能描述
1. create person    增加联系人
2. list all persons    列出联系人
3. query person    查询联系人
4. delete person    删除联系人
5. quit    退出通讯录程序

2. 程序框架
2.1 数据结构

程序使用字典描述一个联系人,假设某个联系人的信息如下:

姓名    地址    电话
张三    南京    12306
使用字典描述该联系人如下:

>>> person = {'name': '张三', 'address': '南京', 'phone': '12306'}
字典有三个键:name、address、phone

对应的值分别为:张三、南京、12306

程序将所有联系人信息存储在列表中,即通讯录是一个列表、列表的元素是字典。假设通讯录中有两个人,它们的信息如下所示:

姓名    地址    电话
张三    南京    12306
李四    王五    10086
使用列表描述通讯录如下:

>>> zhangSan = {'name': '张三', 'address': '南京', 'phone': '12306'}>>> liSi = {'name': '李四', 'address': '北京', 'phone': '10086'}>>> persons = [zhangSan, liSi]
在第 1 行,变量 zhangSan 的类型是一个字典,描述了张三的信息

在第 2 行,变量 liSi 的类型是一个字典,描述了李四的信息

在第 3 行,persons 是一个列表,存储了 zhangSan 和 liSi 两个联系人

上面的代码为了易于理解,使用了 3 行代码描述了通讯录。也可以使用 1 行代码描述该通讯录,代码如下:

>>> persons = [{'name': '张三', 'address': '南京', 'phone': '12306'}, {'name': '李四', 'address': '北京', 'phone': '10086'}]
2.2 划分功能模块

分析通讯录的功能需求,初步将程序划分为 5 个功能模块,如下表所示:

功能模块    对应的函数
增加联系人    create_person
列出联系人    list_person
查询联系人    query_person
删除联系人    delete_person
主控模块    main
编写对应的函数,这里先写出函数的定义,暂时忽略实现,代码如下:

persons = []def create_person():passdef list_person():passdef query_person():passdef delete_person():passdef main():passmain()
在第 1 行,定义全局变量 persons,persons 是一个列表,保存了所有联系人的信息

在第 3 行,定义函数 create_person,该函数实现 “增加联系人” 的功能

在第 6 行,定义函数 list_person,该函数实现 “列出联系人” 的功能

在第 9 行,定义函数 query_person,该函数实现 “查询联系人” 的功能

在第 12 行,定义函数 delete_person,该函数实现 “删除联系人” 的功能

在第 15 行,定义函数 main,该函数控制程序的流程,被称为主控函数,他读取用户的选择,调用相应的功能,实现对通讯录的增、删、查的操作

在第 18 行,程序启动后,首先执行主函数 main

2.3 主功能模块
本节完成程序的主功能模块 main,函数 main 的功能逻辑如下:

获取用户输入的选择

根据用户的选择执行对应的功能

重复执行第 1 步的操作

函数 main 的实现代码如下:

persons = []def get_choice():passdef main():while True:choice = get_choice()if choice == '1':create_person()elif choice == '2':list_person()elif choice == '3':query_person()elif choice == '4':delete_person()elif choice == '5':breakelse:print('Invalid choice')  main()
在第 1 行,创建一个空列表 persons,persons 记录所有联系人的信息

在第 3 行,定义了函数 get_choice,该函数打印功能菜单并读取用户的选择

在第 6 行,定义了函数 main,该函数读取用户选择,并执行相应功能

在第 7 行,创建一个 while 死循环

在第 8 行,使用 get_choice() 函数获取用户输入的选择

在第 10 行至第 21 行,根据 choice 选择执行相应的功能

在第 19 行,如果 choice == ‘5’,则执行 break 退出程序

2.4 获取用户输入
编写函数 get_choice 获取用户的选择,代码如下:

def get_choice():print('1. create person')print('2. list all persons')print('3. query person')print('4. delete person')print('5. quit')choice = input('Enter a number(1-5):')  return choice
在第 2 行到第 6 行,打印功能菜单

在第 7 行,使用 input() 函数获取用户输入的选择

在第 8 行,返回用户的选择 choice

3. 增加联系人
本小节实现增加联系人的功能,如下所示:

def create_person():name = input('name: ')address = input('address: ')phone = input('phone: ')person = {'name': name,  'address': address, 'phone': phone}persons.append(person)
在第 1 行,定义函数 create_person,该函数实现增加联系人的功能

在第 2 行,获取用户输入的 name

在第 3 行,获取用户输入的 address

在第 4 行,获取用户输入的 phone

在第 5 行,根据用户输入的 name、address、phone 创建一个字典,用于描述该联系人

在第 6 行,将联系人加入到 persons 中


 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章