前言

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

什么是模块化程序设计

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

自顶向下

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

函数在模块化设计的作用

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

实战

功能简介

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

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

通讯录功能简介

通讯录包含若干联系人,每个联系人包括:姓名、地址、电话 3 项内容。程序提供 4 项基本功能:

  • 增加联系人: 用户输入姓名、地址、电话等信息,将信息保存在一个列表中
  • 列出联系人: 打印输出所有联系人的信息
  • 查询联系人: 用户输入联系人姓名,打印输出该联系人的信息
  • 删除联系人: 用户输入联系人姓名,从通讯录中删除该联系人

主程序入口

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

  1. C:\> python addr-manage.py
  2. 1. create person
  3. 2. list all persons
  4. 3. query person
  5. 4. delete person
  6. 5. quit
  7. Enter a number(1-5):

主程序包含以下功能

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

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

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

字典表示联系人

  1. {
  2. "name": "张三",
  3. "address": "南京",
  4. "phone": "12306"
  5. }

那么这是一个联系人

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

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

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

一个函数对应一个功能

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

总的代码结构

  1. # 通讯录
  2. persons = []
  3.  
  4. # 添加联系人
  5. def create_person():
  6. pass
  7.  
  8. # 列出联系人
  9. def list_person():
  10. pass
  11.  
  12. # 查出联系人
  13. def query_person():
  14. pass
  15.  
  16. # 删除联系人
  17. def delete_person():
  18. pass
  19.  
  20. # 主函数
  21. def main():
  22. pass
  23.  
  24. main()

主函数代码实现

  1. 获取用户输入的选择
  2. 根据选择执行对应的功能
  3. 不断重复第一步
  1. # 主函数
  2. def main():
  3. while True:
  4. # 获取用户输入
  5. input_str = input("1. create person\n"
  6. "2. list all persons\n"
  7. "3. query person\n"
  8. "4. delete person\n"
  9. "5. quit\n"
  10. "Enter a number(1-5): "
  11. )
  12.  
  13. if input_str == "1":
  14. create_person()
  15. elif input_str == "2":
  16. list_person()
  17. elif input_str == "3":
  18. query_person()
  19. elif input_str == "4":
  20. delete_person()
  21. elif input_str == "5":
  22. break
  23. else:
  24. print("无效选择")

添加联系人代码实现

  1. # 添加联系人
  2. def create_person():
  3. name = input("请输入姓名:")
  4. address = input("请输入地址:")
  5. phone = input("请输入手机:")
  6.  
  7. if name and address and phone:
  8. person = {
  9. "name": name,
  10. "address": address,
  11. "phone": phone
  12. }
  13. persons.append(person)

列出联系人代码实现

  1. # 列出联系人
  2. def list_person():
  3. for person in persons:
  4. print(person)

查出联系人代码实现

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

删除联系人代码实现

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

运行效果

  1. 1. create person
  2. 2. list all persons
  3. 3. query person
  4. 4. delete person
  5. 5. quit
  6. Enter a number(1-5): 1
  7. 请输入姓名:poloyy
  8. 请输入地址:广州荔湾区
  9. 请输入手机:13501111111
  10.  
  11. 1. create person
  12. 2. list all persons
  13. 3. query person
  14. 4. delete person
  15. 5. quit
  16. Enter a number(1-5): 2
  17. {'name': 'poloyy', 'address': '广州荔湾区', 'phone': '13501111111'}
  18.  
  19. 1. create person
  20. 2. list all persons
  21. 3. query person
  22. 4. delete person
  23. 5. quit
  24. Enter a number(1-5): 3
  25. 请输入需要查找的姓名:poloyy
  26. {'name': 'poloyy', 'address': '广州荔湾区', 'phone': '13501111111'}
  27.  
  28. 1. create person
  29. 2. list all persons
  30. 3. query person
  31. 4. delete person
  32. 5. quit
  33. Enter a number(1-5): 4
  34. 请输入需要查找的姓名:poloyy
  35.  
  36. 1. create person
  37. 2. list all persons
  38. 3. query person
  39. 4. delete person
  40. 5. quit
  41. Enter a number(1-5): 2
  42.  
  43. 1. create person
  44. 2. list all persons
  45. 3. query person
  46. 4. delete person
  47. 5. quit
  48. Enter a number(1-5): 5
  49.  
  50. 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. 为什么PMOS比NMOS的沟道导通电阻大,速度慢,价格高-透彻详解

    原文地址点击这里: 在前一节,我们对PMOS与NMOS两种增强型场效应管的开关电路作了详细的介绍, 并且还提到过一种广为流传的说法:相对于NMOS管,PMOS管的沟道导通电阻更大.速度更慢.成本更高等 ...

  2. Java进阶 | Proxy动态代理机制详解

    一.Jvm加载对象 在说Java动态代理之前,还是要说一下Jvm加载对象的过程,这个依旧是理解动态代理的基础性原理: Java类即源代码程序.java类型文件,经过编译器编译之后就被转换成字节代码.c ...

  3. c#在类中使用session

    先要继承页面的System.Web.UI.Page using System; using System.Collections.Generic; using System.Linq; using S ...

  4. 我是如何用 ThreadLocal 虐面试官的?

    我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. Thr ...

  5. 深度学习的优化器(各类 optimizer 的原理、优缺点及数学推导)

    深度学习优化器 深度学习中的优化器均采用了梯度下降的方式进行优化,所谓炼丹我觉得优化器可以当作灶,它控制着火量的大小.形式与时间等. 初级的优化器 首先我们来一下看最初级的灶台(100 - 1000 ...

  6. mysql字符集utf8和utf8mb4区别

    1.起因 公司游戏项目上线第一天,出现单个区服异常宕机的问题,根据日志排查下来,连接数据的时候报错,后面排查是因为有玩家插入Emoji 等表情导致无法存储如数据库,数据库字符集编码为utf8,后续改成 ...

  7. MySQL数据库快速入门与应用实战(阶段一)

    MySQL数据库快速入门与应用实战(阶段一) 作者 刘畅 时间 2020-09-02 实验环境说明: 系统:centos7.5 主机名 ip 配置 slavenode3 172.16.1.123 4核 ...

  8. 精尽Spring Boot源码分析 - 日志系统

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  9. 最新的.NET 热重载介绍

    今天,我们很高兴的向您介绍 Visual Studio 2019 版本 16.11(预览版 1)和 .NET 6 中的 dotnet watch 命令行工具(预览版 4)中的 .NET 热重载体验的可 ...

  10. Flask(7)- request 对象

    Flask 中很重要的 request 对象 浏览器访问服务端时,向服务端发送请求 Flask 程序使用 request 对象描述请求信息 当你想获取请求体.请求参数.请求头数据的时候,就需要靠 re ...