前言

  • 参考的是慕课网提供的实战,自己编码
  • http://www.imooc.com/wiki/pythonlesson1/function2.html

什么是模块化程序设计

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

自顶向下

  • 在设计较复杂的程序时,一般采用自顶向下的方法,将问题划分为几个部分,各个部分再进行细化,直到分解为较好解决问题为止
  • 采用模块化设计编写程序时,不是一开始就逐条编写程序代码
  • 而是首先用主程序、子程序等框架把软件的主要结构和流程描述出来
  • 以功能块为单位进行程序设计,实现其求解的方法称为模块化

函数在模块化设计的作用

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

实战

功能简介

实现一个通讯录管理程序,使用函数来实现程序,采用模块化的程序设计方法:

  • 划分通讯录程序的功能模块,使用函数实现相应的功能
  • 首先实现整体框架,然后再细化每个功能细节
  • 最终的程序由多个函数构成,每个函数实现一个单一的功能,整个程序的结构清晰

通讯录功能简介

通讯录包含若干联系人,每个联系人包括:姓名、地址、电话 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):

主程序包含以下功能

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

用什么数据结构来描述一个联系人

  • 字典最佳
  • 因为联系人可能会有很多个属性
  • 假设联系人有三个属性
姓名 地址 电话
张三 南京 12306

字典表示联系人

{
"name": "张三",
"address": "南京",
"phone": "12306"
}

那么这是一个联系人

用什么数据结构来描述一个通讯录

通讯录会有多个联系人,所以会有多个字典,可以通过列表来表示通讯录

zhangSan = {'name': '张三', 'address': '南京', 'phone': '12306'}
liSi = {'name': '李四', 'address': '北京', 'phone': '10086'}
persons = [zhangSan, liSi]

一个函数对应一个功能

功能模块 对应的函数
增加联系人 create_person
列出联系人 list_person
查询联系人 query_person
删除联系人 delete_person
主控模块 main

总的代码结构

# 通讯录
persons = [] # 添加联系人
def create_person():
pass # 列出联系人
def list_person():
pass # 查出联系人
def query_person():
pass # 删除联系人
def delete_person():
pass # 主函数
def main():
pass main()

主函数代码实现

  1. 获取用户输入的选择
  2. 根据选择执行对应的功能
  3. 不断重复第一步
# 主函数
def main():
while True:
# 获取用户输入
input_str = input("1. create person\n"
"2. list all persons\n"
"3. query person\n"
"4. delete person\n"
"5. quit\n"
"Enter a number(1-5): "
) if input_str == "1":
create_person()
elif input_str == "2":
list_person()
elif input_str == "3":
query_person()
elif input_str == "4":
delete_person()
elif input_str == "5":
break
else:
print("无效选择")

添加联系人代码实现

# 添加联系人
def create_person():
name = input("请输入姓名:")
address = input("请输入地址:")
phone = input("请输入手机:") if name and address and phone:
person = {
"name": name,
"address": address,
"phone": phone
}
persons.append(person)

列出联系人代码实现

# 列出联系人
def list_person():
for person in persons:
print(person)

查出联系人代码实现

# 查出联系人
def query_person():
name = input("请输入需要查找的姓名:")
for person in persons:
if name == person["name"]:
print(person)

删除联系人代码实现

# 删除联系人
def delete_person():
name = input("请输入需要查找的姓名:")
for person in persons:
if name == person["name"]:
persons.remove(person)

运行效果

1. create person
2. list all persons
3. query person
4. delete person
5. quit
Enter a number(1-5): 1
请输入姓名:poloyy
请输入地址:广州荔湾区
请输入手机:13501111111 1. create person
2. list all persons
3. query person
4. delete person
5. quit
Enter a number(1-5): 2
{'name': 'poloyy', 'address': '广州荔湾区', 'phone': '13501111111'} 1. create person
2. list all persons
3. query person
4. delete person
5. quit
Enter a number(1-5): 3
请输入需要查找的姓名:poloyy
{'name': 'poloyy', 'address': '广州荔湾区', 'phone': '13501111111'} 1. create person
2. list all persons
3. query person
4. delete person
5. quit
Enter a number(1-5): 4
请输入需要查找的姓名:poloyy 1. create person
2. list all persons
3. query person
4. delete person
5. quit
Enter a number(1-5): 2 1. create person
2. list all persons
3. query person
4. delete person
5. quit
Enter a number(1-5): 5 Process finished with exit code 0

Python - 函数实战的更多相关文章

  1. Python基础入门-函数实战登录功能

    ''' 函数实战: .加法计算器 .过滤器 .登录功能实战 ''' def add(a,b): return a+b def login_order(): return 'asdfasdfdasfad ...

  2. python机器学习实战(一)

    python机器学习实战(一) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7140974.html  前言 这篇notebook是关于机器 ...

  3. python机器学习实战(二)

    python机器学习实战(二) 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7159775.html 前言 这篇noteboo ...

  4. python机器学习实战(三)

    python机器学习实战(三) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7277205.html  前言 这篇notebook是关于机器 ...

  5. python机器学习实战(四)

    python机器学习实战(三) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7364317.html 前言 这篇notebook是关于机器学 ...

  6. selenium2 python自动化测试实战(回归测试)

    selenium2 python自动化测试实战 最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重 ...

  7. Python爬虫实战四之抓取淘宝MM照片

    原文:Python爬虫实战四之抓取淘宝MM照片其实还有好多,大家可以看 Python爬虫学习系列教程 福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢? 本篇目标 1. ...

  8. Python接口测试实战1(上)- 接口测试理论

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  9. Python接口测试实战4(上) - 接口测试框架实战

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

随机推荐

  1. ArcGIS连接Postgres 数据库

    ArcGIS连接Postgres 数据库 此前在使用ArcGIS的过程中,一般使用文件方式对数据进行管理,后面也有使用 GeoDatabase 数据库对数据进行管理,但是这种管理方式也存在一些弊端,特 ...

  2. 5、SpringBoot整合之SpringBoot整合MybatisPlus

    SpringBoot整合MybatisPlus 目录(可点击直接跳转,但还是建议按照顺序观看,四部分具有一定的关联性): 实现基础的增删改查 实现自动填充功能 实现逻辑删除 实现分页 首先给出四部分完 ...

  3. 企业实施CRM系统 创造更多利润 - Zoho CRM

    对企业来说,客户关系是一种投资.我们都知道企业的资源是有限的,因此必须要将这些有限的资源投入到能够带来持续价值的客户身上.而只有良好的客户关系才能够提高客户的忠诚度,多次购买甚至溢价购买企业的产品,持 ...

  4. [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构

    [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构 目录 [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构 0x00 摘要 ...

  5. jenkins pipeline构建后返回构建结果给gitlab

    jenkins pipeline构建后返回构建结果给gitlab 使用场景 gitlab 合并请求时要求管道任务必须成功,否则无法执行合并操作,又不想使用gitlab ci 工具. 实现方法 1.Ge ...

  6. Centos6.7 minimal安装GitLab8.3.4配置LDAP、发邮件以及升级到GitLab8.5.4

    建议使用非root账户安装,先同步系统时间: ntpdate cn.pool.ntp.org 1.创建用户gitlab 注意:centos下,adduser和useradd的命令效果是一样的,但ubu ...

  7. docker进入容器所在虚拟机的指令

    sudo docker inspect -f {{.State.Pid}} 44fc0f0582d9 在拿到该进程PID之后我们就可以使用nsenter命令访问该容器了. $ sudo nsenter ...

  8. Acunetix在SDLC中的安全性测试

    DevOps只是害怕尝试新事物.它们用于Selenium测试,这些测试占用了管道并提供了难以解释的结果,但是与此同时,它们经常避开了DAST测试,这远没有那么麻烦. 由于他们的应用程序是完全用Java ...

  9. 访问其他人的vue项目

    本地git拉取项目 git clone git@git路径 项目clone到本地后 1.工具命令行切换到此项目路径下 cd 路径名称 2.首先要下载项目所需要的资源包  npm install 这里会 ...

  10. 远程连接Linux上的MongoDB服务

    1.Linux环境上安装好MongoDB,并配置好环境变量 2.启动MongoDB 注:mongod /opt/michael/mongodb/mongodb-linux-x86_64-4.0.5/d ...