{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 实践11 程序的模块化编程 \n", "模块化设计同样是程序设计的重要思想。程序的模块化设计,简单地说就是程序的编写不是一开始就逐条编写计算机语句和指令,而是首先用主程序、函数等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系。再逐个实现每个模块的内部功能。模块化编程的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化。 \n", "1.理解程序的模块化设计方法 \n", "2.理解参数和返回值的意义 \n", "3.理解函数的执行过程 \n", "4.掌握功能模块设计和实现 \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. 画“工”字" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "【例4-2-1】用字符画一个“工”字。\n", "程序的功能是输入一个n值,画出的“工”字由2根2n+1个“8”组成的横线和1根n个“8”组成的竖线构成。\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "n=int(input(\"n=\"))\n", "for i in range(2*n+1):\n", " print(\"8\",end=\"\")\n", "print()\n", "for i in range(n): \n", " for j in range(n):\n", " print(\" \",end=\"\")\n", " print(\"8\")\n", "for i in range(2*n+1):\n", " print(\"8\",end=\"\")\n", "print()\n" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "【例4-2-2】设计两个构件模块:画横线和画竖线,再设计一个图形模块:画“工”字。改写后的程序如下所示。\n", "![image.png](attachment:image.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def hline(n):#画横线\n", " for i in range(2*n+1):\n", " print(\"8\",end=\"\")\n", " print()\n", "def vline(n):#画竖线\n", " for i in range(n):\n", " for j in range(n): \n", " print(\" \",end=\"\")\n", " print(\"8\")\n", "def figure(n):#画“工”字\n", " hline(n)\n", " vline(n) \n", " hline(n) \n", "def draw():#画指定n值的“工”字\n", " n=int(input(\"n=\"))\n", " figure(n)\n", "draw() #主程序启动 \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "【例4-2-3】在例4-2-2的hline函数、vline函数、figure函数增加参数ch,传递用户输入的字符。" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def hline(n,ch):\n", " for i in range(2*n+1):\n", " print(ch,end=\"\")\n", " print()\n", "def vline(n,ch):\n", " for i in range(n):\n", " for j in range(n):\n", " print(\" \",end=\"\")\n", " print(ch)\n", "def figure(n,ch):\n", " hline(n,ch)\n", " vline(n,ch) \n", " hline(n,ch)\n", " \n", "def draw():\n", " n=int(input(\"n=\"))\n", " ch=input(\"ch=\")\n", " figure(n,ch)\n", "draw() \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 程序的开发过程\n", "\n", "(1)自顶向下、逐步求精是分析问题的基本方法,具体的做法是把一个大任务分割成小的更容易控制的任务,再继续细分为更小的任务,直到所有的小任务都能很容易实现。\n", "(2)自顶向下的设计是创建层次化的模块结构的过程,从程序实现和测试的角度看,最好从模块结构图的底层开始实现、运行、测试每一个函数,然后逐步上升,实现上层模块,自底向上直至主程序得到实现。" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "【例4-2-3的程序框架结构】\n", "def hline(n,ch):\n", " pass\n", "def vline(n,ch):\n", " pass\n", "def figure(n,ch):\n", " pass\n", "def draw():\n", " pass\n", "draw() \n" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "### 小试身手(1)\n", "(1)修改例4-2-3的程序:如果程序要求当输入一个偶数,图形用*绘制,输入一个奇数,图形用@绘制,应该修改哪个函数?如何修改?\n", "![image.png](attachment:image.png)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#【例4-2-3】\n", "def hline(n,ch):\n", " for i in range(2*n+1):\n", " print(ch,end=\"\")\n", " print()\n", "def vline(n,ch):\n", " for i in range(n):\n", " for j in range(n):\n", " print(\" \",end=\"\")\n", " print(ch)\n", "def figure(n,ch):\n", " hline(n,ch)\n", " vline(n,ch) \n", " hline(n,ch)\n", " \n", "def draw():\n", " n=int(input(\"n=\"))\n", " ch=input(\"ch=\")\n", " figure(n,ch)\n", "draw() " ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "(2)修改例4-2-3的程序:如果要输出下面图形,应该修改哪个函数?如何修改?\n", "![image.png](attachment:image.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#【例4-2-3】\n", "def hline(n,ch):\n", " for i in range(2*n+1):\n", " print(ch,end=\"\")\n", " print()\n", "def vline(n,ch):\n", " for i in range(n):\n", " for j in range(n):\n", " print(\" \",end=\"\")\n", " print(ch)\n", "def figure(n,ch):\n", " hline(n,ch)\n", " vline(n,ch) \n", " hline(n,ch)\n", " \n", "def draw():\n", " n=int(input(\"n=\"))\n", " ch=input(\"ch=\")\n", " figure(n,ch)\n", "draw() " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.素数问题" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "【4.3.1】 判断一个数n是不是素数" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "算法:\n", "1 输入一个数n\n", "2 i=2\n", "3 循环当if1,f3=>f2\n", " 3.3 n 减一\n", "4.返回 f3" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def fib (n):\n", " if n<=2:\n", " return 1\n", " _____(1)_____\n", " while n>=3:\n", " f3=_____(2)_____\n", " f1,f2=_____(3)_____\n", " n=_____(4)_____\n", " return _____(5)_____\n", "n=int(input(\"n=\"))\n", "print(fib(n))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## (2) 列表实现" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "使用列表 FL 存放费波那契数列 \n", "\n", "1.如果n=1,2 返回1\n", "2.FL置初值[1,1]\n", "3.下标 i 置初值 2 ,指向第三项\n", "4.循环当 i 小于 n\n", " 4.1 追加 FL[i-1]+ FL[i22] 到 FL\n", " 4.2 i=i+1 \n", "5.返回列表最后一项" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def fib (n):\n", " if n<=2:\n", " return 1\n", " FL= _____(1)_____\n", " i=2\n", " while i添加到字典dic\n", " 3.2 a为b,b为a和b之和\n", "4.返回字典" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def fib(n):\n", " a=0\n", " b=1\n", " dic=_____(1)_____ #定义字典\n", " for i in range(n):\n", " dic[i]=_____(2)_____ #把添加斐波那契数到字典\n", " a,b=b,a+b\n", " return _____(3)_____\n", "\n", "#调用函数生成斐波那契数列中的前20个斐波那契数\n", "fibonac= _____(4)_____\n", "for key in fibonac.keys():\n", " print(fibonac[key],end=\",\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## (4)递归函数\n", "\n", "递归函数是直接或者间接调用自身的函数。 \n", "注意:可以学完实践13,再做以下两题" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "如果n等于1或2 则返回1\n", "否则返回 Fib(n-1)+Fib(n-2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def Fib(n):\n", " if n==1 or n==2:\n", " return _____(1)_____\n", " _____(2)_____\n", " return m\n", "n=int(input(\"n=\"))\n", "print(Fib(n))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## (5) 优化的递归函数" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "定义一个全局字典变量d_fib 保存费波那契数列系数\n", "\n", "如果 n 存在在字典关键字中\n", " 则 \n", " 1.1 返回字典值 \n", " 否则 \n", " 1.2 计算递归公式获得第 n 项费波那契数列系数 m\n", " 1.3 将新的键值对追加到字典\n", " 1.4 返回 m" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "d_fib=_____(1)_____\n", "def Fib(n):\n", " if n in d_fib:\n", " return _____(2)_____\n", " m= _____(3)_____\n", " d_fib[n]=_____(4)_____\n", " return m\n", "\n", "n=int(input(\"n=\"))\n", "print(Fib(n))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" } }, "nbformat": 4, "nbformat_minor": 2 }