Python学习之模块化程序设计示例详解

目录
  • 关于模块化程序设计
  • 水果仓库功能简介
    • 主功能实现与程序入口
    • 实现添加功能
    • 实现列出所有信息功能
    • 实现查询信息功能
    • 实现删除信息功能
  • 完整程序如下

关于模块化程序设计

什么是模块化程序设计?

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

模块化设计程序的方法?

  • 一般在针对实现比较复杂程序的情况下,采用的是自上而下的方法。将复杂的场景划分为几个部分,每一个部门再进行针对性的细化,直到分解为比较好的解决方案为止。
  • 采用模块化设计程序,并不是一开始就逐条的编写程序代码,而是首先用主程序、子程序等框架把软件的主要结构和流程描述出来,以功能划分的模块为单位进行程序设计。
  • 利用函数,不仅可以实现程序的模块化,使得程序设计更加简单和直观,从而提高了程序的易读性和可维护性,而且还可以把程序中经常用到的一些计算或操作编写成通用函数,以供随时调用。

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

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

水果仓库功能简介

编写程序 fruits_warehouse 模拟 水果仓库 的一个简单管理系统,水果仓库 包含若干水果,每种水果包括:名称、重量、日期 3 项内容。程序提供 4 项基本功能:

  • 添加水果: 用户输入水果的名称、重量、日期信息,将信息保存在一个列表中
  • 列出当前所有水果: 打印输出当前所有水果的信息
  • 查询水果: 用户输入水果的名称,打印输出该水果的信息
  • 删除水果: 用户输入水果的名称,删除该水果的信息

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

1: 添加水果信息
2: 显示所有水果
3: 查询水果信息
4: 删除水果信息
5: 退出
请根据提示的数字 1-5 输入要执行的操作:

所以我们定义一个 获取选项的函数,如下:

def get_option():
    print('1: 添加水果信息')
    print('2: 显示所有水果')
    print('3: 查询水果信息')
    print('4: 删除水果信息')
    print('5: 退出')
    option = input('请根据提示输入要执行的操作: 数字 1-5 ')
    return option

get_option()

# >>> 执行结果如下:
# >>> 1: 添加水果信息
# >>> 2: 显示所有水果
# >>> 3: 查询水果信息
# >>> 4: 删除水果信息
# >>> 5: 退出
# >>> 请根据提示的数字 1-5 输入要执行的操作:

主功能实现与程序入口

总共有 5 个选项,用户输入对应的数字选择相应的功能,如下表所示:

数字选项 对应功能
1 : add_fruit 添加水果信息
2:search_all_fruits 列出当前所有水果信息
3:query_fruit 查询水果信息
4:del_fruit 删除水果信息
5:quit 退出

编写对应的函数,这里我们先写出函数的定义,暂时使用 pass 占位,代码如下

def add_fruit():			# 添加水果信息
    pass

def search_all_fruits():	# 列出当前所有水果信息
    pass

def query_fruit():			# 查询水果信息
    pass

def del_fruit():			# 删除水果信息
    pass

def main():					# 主程入口
    pass

接下来我们就实现以下 主程入口与获取用户的输入

fruits =[] 					# 创建一个空列表 fruits,fruits 记录所有水果的信息

def get_option():			# 获取用户输入
    print('1: 添加水果信息')
    print('2: 显示所有水果')
    print('3: 查询水果信息')
    print('4: 删除水果信息')
    print('5: 退出')
    option = input('请根据提示输入要执行的操作: 数字 1-5 ')
    return option

def add_fruit():			# 添加水果信息
    pass

def search_all_fruits():	# 列出当前所有水果信息
    pass

def query_fruit():			# 查询水果信息
    pass

def del_fruit():			# 删除水果信息
    pass

def main():					# 主程入口
    while True:
        option = get_option()

        if option == '1':
            add_fruit()
        elif option == '2':
            search_all_fruits()
        elif option == '3':
            query_fruit()
        elif option == '4':
            ddel_fruit()
        elif option == '5':
            break
        else:
            print('输入错误!请重新输入!')

main()

实现添加功能

def add_fruit():                # 添加水果信息
    name = input('name: ')
    weight = input('weight: ')
    date = input('date: ')
    fruit = {'name': name, 'weight': weight, 'date': date}
    fruits.append(fruit)

实现列出所有信息功能

def search_all_fruits():        # 列出当前所有水果信息
    if len(fruits) == 0:
        print('**************')
        print('当前仓库没有水果')
        print('**************')
    else:
        for fruit in fruits:
            print(f'%s,%s,%s' % (fruit['name'], fruit['weight'], fruit['date']))

实现查询信息功能

def query_fruit():              # 查询水果信息
    name = input('name: ')
    if len(fruits) == 0:
        print('***************')
        print('当前仓库没有水果')
        print('***************')
    else:
        for fruit in fruits:
            if fruit['name'] == name:
                print(f'%s,%s,%s' % (fruit['name'], fruit['weight'], fruit['date']))

实现删除信息功能

def del_fruit():                # 删除水果信息
    name = input('name: ')
    if len(fruits) == 0:
        print('***************')
        print('当前仓库没有水果')
        print('***************')
    else:
        for fruit in fruits:
            if fruit['name'] == name:
                fruits.remove(fruit)
                break

完整程序如下

注意:这个完整程序的功能其实并不算完整,只能说是实现了一个基础功能;比如一个场景,当我们要查询、删除的水果并不在 fruits 列表 的时候,这里并没有做校验,只是校验了当前水果列表是否存在水果(长度判断)。

所以大家可以自己动手完善一下。

# coding:utf-8

"""
    @Author:Neo
    @Date:2020/1/14
    @Filename:fruits_warehouse.py
    @Software:Pycharm
"""

fruits = []                     # 创建一个空列表 fruits,fruits 记录所有水果的信息

def get_option():               # 获取用户输入
    print('1: 添加水果信息')
    print('2: 显示所有水果')
    print('3: 查询水果信息')
    print('4: 删除水果信息')
    print('5: 退出')
    option = input('请根据提示 数字 1-5 输入要执行的操作: ')
    return option

def add_fruit():                # 添加水果信息
    name = input('name: ')
    weight = input('weight: ')
    date = input('date: ')
    fruit = {'name': name, 'weight': weight, 'date': date}
    fruits.append(fruit)
    print(fruits)

def search_all_fruits():        # 列出当前所有水果信息
    if len(fruits) == 0:
        print('              ')
        print('**************')
        print('当前仓库没有水果')
        print('**************')
        print('              ')
    else:
        for fruit in fruits:
            print(f'%s,%s,%s' % (fruit['name'], fruit['weight'], fruit['date']))

def query_fruit():              # 查询水果信息
    name = input('name: ')
    if len(fruits) == 0:
        print('              ')
        print('**************')
        print('当前仓库没有水果')
        print('**************')
        print('              ')
    else:
        for fruit in fruits:
            if fruit['name'] == name:
                print(f'%s,%s,%s' % (fruit['name'], fruit['weight'], fruit['date']))

def del_fruit():                # 删除水果信息
    name = input('name: ')
    if len(fruits) == 0:
        print('              ')
        print('**************')
        print('当前仓库没有水果')
        print('**************')
        print('              ')
    else:
        for fruit in fruits:
            if fruit['name'] == name:
                fruits.remove(fruit)
                break

def main():  # 主程入口
    while True:
        option = get_option()

        if option == '1':
            add_fruit()
        elif option == '2':
            search_all_fruits()
        elif option == '3':
            query_fruit()
        elif option == '4':
            del_fruit()
        elif option == '5':
            break
        else:
            print('输入错误!请重新输入!')

main()

以上就是Python学习之模块化程序设计示例详解的详细内容,更多关于Python模块化程序设计的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解python代码模块化

    一.概念 1.模块化代码可以使代码易于维护和调试,并且提高代码的重用性: 2.函数可以用来减少冗余的代码并提高代码的可重用性.函数也可以用来模块化代码并提高程序的质量: 3.在python中,你可以将函数的定义放在一个被称为模块的文件中,这种文件的后缀名是.py: 4.一个模块可以包含不止一个函数,一个模块的每个函数都有不同的名字: 二.使用 1.pycharm新建模块文件夹,和模块 MFunction.py #函数进行模块化 #求最大值 def mymax(a,b): if a>b: ret=

  • 深入了解Python的类与模块化

    目录 学习目标 1. 面向对象编程:类 1.1 面向对象编程的基本概念 1.2 自定义类 1.3 再谈继承 2. 模块 2.1 导入模块 2.2 导入Python标准模块 2.3 单独导入模块中所需对象 2.4 导入模块中的所有对象 2.5 重命名导入模块或对象 2.6 导入第三方模块 学习目标 Python 是简洁.易学.面向对象的编程语言.它不仅拥有强大的原生数据类型,也提供了简单易用的控制语句.本节的主要目标是介绍 Python 中的面向对象编程范式以及模块化思想,为接下来的学习奠定基础,

  • Python程序设计入门(4)模块和包

    Python语言功能非常强大,除了类之外,还有模块和包的概念,这有点像perl,此处简单说说包和模块. 一.Python中的模块 模块--其实就是我们说的库(lib)的概念,不过它不仅只是可以包含一系列函数,也可以包含类,python里是没有像C语言之类,直接include某文件的,包正是这种类似的东西. Python 引入模块的方法有两种: 1.import 模块名(实际是对应的就是 文件名.py ) 2.模块名 = __import__("模块文件名(不带扩展名)") 也可以&qu

  • Python面向对象的程序设计详情

    1. 设计一个圆类,包括圆心位置.半径.颜色等属性.编写构造方法, 计算周长和面积. import math class Circle:     def __init__(self,o,r,colour):         self.o = o         self.r = r         self.colour = colour     def length(self): #周长         C = math.pi*self.r*2         return C     def

  • 详解Python模块化--模块(Modules)和包(Packages)

    目录 引言 Python Modules模块 导入模块 ①导入整个模块 ②导入模块中的特定函数 ③导入模块中的所有函数 给导入的模块一个别名 单独运行模块 加速模块加载 Python Packages包 引用包(Package)中的模块 引用包(Package)中子模块的函数或变量 利用相对路径引用包和模块 利用__all__提供包的显式索引 打包自己的Package并分发 安装python社区中的Package 总结 引言 在刚入门python时,模块化编程.模块.类库等术语常常并不容易理清.

  • Python面向对象程序设计示例小结

    本文实例讲述了Python面向对象程序设计.分享给大家供大家参考,具体如下: 示例1: #encoding:utf-8 '''example 1 class test: def __init__(self,year,**arg): self.year = year self.args = arg def kaka(self): if isinstance(self.year,str): print 'input\'s year is a string! Error' elif isinstanc

  • Python学习之模块化程序设计示例详解

    目录 关于模块化程序设计 水果仓库功能简介 主功能实现与程序入口 实现添加功能 实现列出所有信息功能 实现查询信息功能 实现删除信息功能 完整程序如下 关于模块化程序设计 什么是模块化程序设计? 程序设计的模块化指的是在进行程序设计时,把一个大的程序功能划分为若干个小的程序模块.每一个小程序模块实现一个确定的功能,并且在这些小程序模块实现的功能之间建立必要的联系,通过各个小模块之间的互相协作完成整个大功能实现的方法. 模块化设计程序的方法? 一般在针对实现比较复杂程序的情况下,采用的是自上而下的

  • Python人工智能学习PyTorch实现WGAN示例详解

    目录 1.GAN简述 2.生成器模块 3.判别器模块 4.数据生成模块 5.判别器训练 6.生成器训练 7.结果可视化 1.GAN简述 在GAN中,有两个模型,一个是生成模型,用于生成样本,一个是判别模型,用于判断样本是真还是假.但由于在GAN中,使用的JS散度去计算损失值,很容易导致梯度弥散的情况,从而无法进行梯度下降更新参数,于是在WGAN中,引入了Wasserstein Distance,使得训练变得稳定.本文中我们以服从高斯分布的数据作为样本. 2.生成器模块 这里从2维数据,最终生成2

  • python实现PCA降维的示例详解

    概述 本文主要介绍一种降维方法,PCA(Principal Component Analysis,主成分分析).降维致力于解决三类问题. 1. 降维可以缓解维度灾难问题: 2. 降维可以在压缩数据的同时让信息损失最小化: 3. 理解几百个维度的数据结构很困难,两三个维度的数据通过可视化更容易理解. PCA简介 在理解特征提取与处理时,涉及高维特征向量的问题往往容易陷入维度灾难.随着数据集维度的增加,算法学习需要的样本数量呈指数级增加.有些应用中,遇到这样的大数据是非常不利的,而且从大数据集中学习

  • python模块shutil函数应用示例详解教程

    目录 本文大纲 知识串讲 1)模块导入 2)复制文件 3)复制文件夹 4)移动文件或文件夹 5)删除文件夹(慎用) 6)创建和解压压缩包 本文大纲 os模块是Python标准库中一个重要的模块,里面提供了对目录和文件的一般常用操作.而Python另外一个标准库--shutil库,它作为os模块的补充,提供了复制.移动.删除.压缩.解压等操作,这些 os 模块中一般是没有提供的.但是需要注意的是:shutil 模块对压缩包的处理是调用 ZipFile 和 TarFile这两个模块来进行的. 知识串

  • 人工智能学习Pytorch张量数据类型示例详解

    目录 1.python 和 pytorch的数据类型区别 2.张量 ①一维张量 ②二维张量 ③3维张量 ④4维张量 1.python 和 pytorch的数据类型区别 在PyTorch中无法展示字符串,因此表达字符串,需要将其转换成编码的类型,比如one_hot,word2vec等. 2.张量 在python中,会有标量,向量,矩阵等的区分.但在PyTorch中,这些统称为张量tensor,只是维度不同而已. 标量就是0维张量,只有一个数字,没有维度. 向量就是1维张量,是有顺序的数字,但没有"

  • Python+matplotlib实现绘制等高线图示例详解

    目录 前言 1. 等高线图概述 什么是等高线图? 等高线图常用场景 绘制等高线图步骤 案例展示 2. 等高线图属性 设置等高线颜色 设置等高线透明度 设置等高线颜色级别 设置等高线宽度 设置等高线样式 3. 显示轮廓标签 4. 填充颜色 5. 添加颜色条说明 总结 前言 我们在往期对matplotlib.pyplot()方法学习,到现在我们已经会绘制折线图.柱状图.散点等常规的图表啦(往期的内容如下,大家可以方便查看往期内容) Python matplotlib底层原理解析 Python利用 m

  • Python学习之字符串函数使用详解

    目录 1 搜索字符串函数 2 设置字符串格式函数 3 改变字符串大小写函数 4 选定字符串函数 5 拆分字符串函数 6 替换字符串函数 Python的友好在于提供了非常好强大的功能函数模块,对于字符串的使用,同样提供许多简单便捷的字符串函数.Python 字符串自带了很多有用的函数,在字符串函数之前先介绍一个非常实用的dir()内置函数,因为对每一个初学者还是大佬级别的python程序员,都不能完全记住所有方法.而该函数可以查看所有这些函数,可调用 dir 并将参数指定为任何字符串(如 dir(

  • Python学习之直方图均衡化原理详解

    目录 1.点算子 2.线性灰度变换 3.直方图均衡化 4.代码实战 1.点算子 点算子是两个像素灰度值间的映射关系,属于像素的逐点运算,相邻像素不参与运算.点算子是最简单的图像处理手段,如:亮度调整.对比度调整.颜色变换.直方图均衡化等等. 2.线性灰度变换 线性灰度变换表达为: 其中rk.sk分别为输入.输出点像素灰度值. ▲图2.1 线性灰度变换 当a>1时,输出图像像素灰度范围扩大,图像对比度增强,当a<1时反之.这是因为人眼不易区分相近的灰度值,因此若图像灰度值范围较小,观感上细节不够

  • Python学习之包与模块详解

    目录 什么是 Python 的包与模块 包的身份证 如何创建包 创建包的小练习 包的导入 - import 模块的导入 - from…import 导入子包及子包函数的调用 导入主包及主包的函数调用 导入的包与子包模块之间过长如何优化 强大的第三方包 什么是第三方包 如何安装第三方包 总结 大家好,学完面向对象与异常处理机制之后,接下里我们要学习 包与模块 .首先我们要了解什么是包?什么是模块?接下来我们还要学习 如何自定义创建包.自定义创建模块以及如何导入包与模块.最后我们在学习如何使用第三方

  • Python学习之文件的读取详解

    目录 文件读取的模式 文件对象的读取方法 使用 read() 函数一次性读取文件全部内容 使用 readlines() 函数 读取文件内容 使用 readline() 函数 逐行读取文件内容 mode().name().closed() 函数演示 文件读取小实战 with open() 函数 利用with open() 函数读取文件的小实战 上一章节 我们学习了如何利用 open() 函数创建一个文件,以及如何在文件内写入内容:今天我们就来了解一下如何将文件中的内容读取出去来的方法. 文件读取的

随机推荐