计算机二级练习仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

867 lines
118 KiB

{
"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 循环当i<n\n",
" 3.1如果n能被i整除则跳出\n",
" 3.2 i=i+1\n",
"4 如果i==n 则输出n是素数\n",
" 否则输出n不是素数\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"说明: \n",
"这个算法的循环结构有两个出口:一个是“循环当i<n”不满足条件;一个是“如果n能被i整除则跳出”;两个出口分别代表不同的结论。第一个出口结束循环,n是素数;第二个出口结束循环,n不是素数。 \n",
"两个出口都汇聚到算法的第4步。在此,如何要区分两种不同的情况? \n",
"仔细观察程序循环结构的执行,结束循环时,i的值是不同的。循环正常结束,i的值是等于n;在循环体中如果n能被i整除,跳出循环,i的值在2到n-1之间。利用i值的不同可以区分n是不是素数。 \n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"n=int(input(\"n=\")) \n",
"i=2\n",
"while i<n:\n",
" if n%i==0 :\n",
" break\n",
" i=i+1\n",
"if i==n:\n",
" print(n,\"是素数\")\n",
"else:\n",
" print(n,\"不是素数\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"【例4-3-2】用for语句实现判断一个数n是不是素数"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#算法失败的示例\n",
"n=int(input(\"n=\")) \n",
"for i in range(2,n):\n",
" if n%i==0 :\n",
" break\n",
"if i==n:\n",
" print(n,\"是素数\")\n",
"else:\n",
" print(n,\"不是素数\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"说明: \n",
"本算法是根据i的终值来判断是否为素数。for语句实现的程序和while语句实现的程序的不同在于:for循环正常执行结束(即不从break跳出)时,i值是n-1,而while循环正常结束时i值是n。也就是说一个素数执行for循环结束后,i值为n-1。例如n=3,for语句迭代运行i=2,n%i==0不满足,不执行break语句,迭代结束退出for语句。\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#使用flag修正上例错误\n",
"n=int(input(\"n=\")) \n",
"flag=True\n",
"for i in range(2,n):\n",
" if n%i==0 :\n",
" flag=False\n",
" break\n",
"if flag:\n",
" print(n,\"是素数\")\n",
"else:\n",
" print(n,\"不是素数\")\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#使用 for...else 修正错误\n",
"n=int(input(\"n=\")) \n",
"for i in range(2,n):\n",
" if n%i==0 :\n",
" print(n,\"不是素数\")\n",
" break\n",
"else:\n",
" print(n,\"是素数\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"【例4-3-3】模块化编程实现判断一个数n是不是素数"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#【函数代码】\n",
"def isPrime(n):\n",
" if n<2:\n",
" return False\n",
" \n",
" flag=True\n",
" for i in range(2,n):\n",
" if n%i==0 : \n",
" flag=False\n",
" break\n",
" return flag\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#【函数优化代码】\n",
"def isPrime(n):\n",
" if n<2:\n",
" return False\n",
" for i in range(2,n):\n",
" if n%i==0 :\n",
" return False\n",
" return True\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#【函数优化代码】\n",
"from math import sqrt \n",
"def isPrime(n):\n",
" if n<2:\n",
" return False\n",
" m=int(sqrt(n))\n",
" for i in range(2,m+1):\n",
" if n%i==0 :\n",
" return False\n",
" return True\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
" #主程序代码\n",
"n=int(input(\"n=\"))\n",
"if isPrime(n):\n",
" print(n,\"是素数\")\n",
"else:\n",
" print(n,\"不是素数\")\n"
]
},
{
"attachments": {
"image-2.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiAAAADlCAYAAABqM0wyAAAgAElEQVR4Ae2dC9gVVfXGKfOf1ZPV08XM7l6ym5WmmVpmXvN+TU1T0/BaKZmpmHhBJU0TL6gIAqJ4CRRFDExEhEiJVJIAhVAUvKAgCooi5P4/v41r3Ge+mXPmnO+c78w5867nmW9m9szs2fvda6/97rXXnK+bkwgBIdBwBJ5euMRNemyeGzL2YXdq/7GuR7+7tbUABrQVbUbb0YYSISAE6odAt/plpZyEgBBIQmDA6Kluux4DtbUBBrTlipWrkppZaUJACFSJgAhIlYDpdiGQFYFly1e4E/qO8sSDPbPo5xcvy/q47ssJAouXLndTZs33HiuI5OF9RjjSJEJACHQOARGQzuGnp4VAKgIX3jzRkw9c+JL2QGDYuGm+TXsPHd8eFVIthEATERABaSL4enX7InDfI3M1ULVp8xqxxKMlEQJCoHYEREBqx05PCoFUBM4cdK/b+ZTBjmUYSXshQJvStrSxRAgIgdoREAGpHTs9KQRSESBOgLgPSXsiQNvSxhIhIARqR0AEpHbs9KQQSESAGTLBiv3ueCjxuhJbHwHaljaWCAEhUDsCIiC1Y6cnhUAiAnzpwuCk4NNEeNoikbYVAWmLplQlmoiACEgTwder2xMBEZD2bNewViIgIRo6FgK1ISACUhtuekoIpCIgApIKTdtcEAFpm6ZURZqIgAhIE8HXq9sTARGQ9mzXsFYiICEaOhYCtSEgAlIbbnpKCKQiIAKSCk3bXBABaZumVEWaiIAISBPB16vbEwERkPZs17BWIiAhGjoWArUhIAJSG256SgikIiACkgpN21wQAWmbplRFmoiACEgTwder2xOBPBOQk08+2R166KHtCXwX1koEpAvB1qvaFgERkLZtWlWsWQjkmYDsueeebvPNN3dvv/12s+Bpi/eKgLRFM6oSTUZABKTJDaDXtx8CeSYg7Yd2c2okAtIc3PXW9kJABKS92lO1yQECnSUgb775pjvjjDPcggUL3F133eV233131717d/fkk0/62t1+++0+7aijjnJz5swpqfHUqVPdiSee6HbZZRe3zz77uNtuu63k+k033eSuvvrqKG3w4MH+Ht515JFHut12280NGDAguq6DZAREQJJxUaoQqAYBEZBq0NK9QiADAp0lIC+//LJbY4013GabbeY23XRTd/zxx7tPfvKTbsMNN3QnnXSS3x977LHu05/+tFtvvfUc9yMzZ870afvvv7/r1auXO/DAA123bt3cDTfcEJV6hx12cBtttFF0vuuuu7p1113XfeMb3/CxIQcddJB/pk+fPtE9OuiIgAhIR0yUIgSqRUAEpFrEdL8QqIBAZwnIK6+84j74wQ968rF06VL/tunTp3tisMkmmziuI7NmzfJpI0as/q+spM+fP7+kdNtuu63beuuto7R9993XbbHFFtE5AalrrrmmGzduXJR2wAEHuHXWWUdxIhEiHQ9EQDpiohQhUC0CIiDVIqb7hUAFBOpBQN73vve5IUOGRG9644033Pvf//4SbwZpeEouuOCC6D4OVqxY4WbPnu1mzJjh9tprLx90ajfECQjXt9xyS7vs91deeaV/1+uvv16SrpN3ERABeRcLHQmBWhEQAakVOT0nBFIQqAcBwStx7bXXRm9YtmyZW2uttdx1110XpeEdgYCce+65UdpFF13kNthgA+892WabbdzHP/5xt/3220fX4wRk77337kBArrjiCu9ZWbhwYfScDkoREAEpxUNnQqAWBERAakFNzwiBMgjUi4D0798/eosRkIEDB0ZpRkB69+7t04YNG+aJw8iRI93y5ct92hFHHOFjSeyhJALyve99zy77/eWXX+7zefHFF0vSdfIuAiIg72KhIyFQKwIiILUip+eEQAoCzSIgfBWz9tprl5Rqq622KvFwiICUwFPziQhIzdDpQSEQISACEkGhAyFQHwQ6S0CWLFniPRCXXXZZVCC8HXzRQnyGyauvvurTTj/9dJ90zz33+HM+p+VTWn50jGDW0MOx4447uq985SuWhV+e2XjjjaNzDljG4V0vvPBCSbpO3kVABORdLHQkBGpFQASkVuT0nBBIQaCzBITfAeEz24kTJ0ZvILD0uOOOc5MmTYrS3nrrLX/f2LFjozSWX3baaSfH57bEi0BKzj///Oj6NddcU3LOb4KE17lxwoQJ7phjjomWcaKHdRAhIAISQaEDIVAzAiIgNUOnB4VAMgKdJSDJuSo1TwiIgOSpNVSWVkVABKRVW07lzi0CIiC5bZq6FUwEpG5QKqMCIyACUuDGV9Ubg4AISGNwzVOuIiB5ag2VpVUREAFp1ZZTuXOLgAhIbpumbgUTAakblMqowAiIgBS48VX1xiAgAtIY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P9xDDz3UYXvwwQfdH/7wBzdz5sySQoHxggULHJ073E477TS39dZbu6effjpKf/zxxx3pKHkoEKThw4f7JN6/wQYb+METovf73//ep/PuT3/605kH0zD/rjzOAwF5+OGH3VprreVxfumll9zhhx/u9Z+2ShN0Fj2G5IeCLgwePNhdcMEF7sILL4z60I9//GM3evTo8NbE41GjRrkvfvGLbvHixR2ulzNy6HioJ/TXY445pkMeaQkvvvhipHeml0xYPvWpT7l//vOfJdcuueQS95e//KXEjjDA0L+effZZ/4qvf/3r7u677/bH3bt395MXiEe3bt3cuHHj0oqR2/S8EpAJEya4T37yk4n6wmQJvGmXWuRnP/uZ+93vflfLoyXP/PrXv3aMA0mSptP0PQg0EwKEMetzn/tc5rrQP9FF02Xbo7vf+MY3fF+xNMaT008/3U2fPr2kiMuWLfPjIe/+73//69+/ZMkST+ioE+nXXHON+8AHPuDoP60iDSEgDGrxwZBGP+OMM6LBEWLxox/9yBsUDOVll13mvvWtb0XAAyiGr0ePHu6Xv/ylwxizHX/88a5Pnz5eGWhYvBfMrNlg4DQczybJz3/+czdo0KDoEmz4kEMOic7/+te/uh/+8Ifum9/8poOdxoXyPPnkk9H7bEZP+W655ZaSdMpFHvEZLMZys802c3hf8JywcRzfMOAoGgM/TJu6mqDMlBVD+7Wvfc0bYDCHCNxzzz0dNgamj370ow4DEQodCqWl7JTLtsMOO8zttNNO0fntt9/uIEM9e/Z0eEdCAWuM+sknn+zrsPfee/vL5AFpRLbffvvoOHw2b8d5ICAYIPTDdAsS+P73v98TiDS8xo4d677zne94fYOU4kFBaF90dptttnG9evXy/QcPwne/+13fVtxD+z366KMOkko/ZIBnjz5ChiDXTATQZdIhAujCZz7zGXfFFVck9jXIJn3C5NBDD3WQ/azCIAVxMn1kz6Rgo402csOGDYvS6QPYAq7FvZgQC/ox9d1tt93cCy+84PsHeolH8brrrvM6nrVMebovbwQE28SGfWDSgV1CV2zCgy7TFkxK8HqjW+WE52ywt/uYhDH5DIUxJiS6dg2vsOkz+mobtha9+tKXvuQeeeQR969//ctfo6y9e/d26623ntd/y8f29EnIkxF8+swWW2zhbbfdU26Plx9vG30z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"
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"【例4-3-4】求解【a,b】区间以内的孪生素数。 \n",
"孪生素数(twin prime number),指的是相差为2的两个素数,例如3和5。孪生素数有其特殊的规则,除了第一对孪生素数(3,5)之外,其他的孪生素数都可以写成(6k-1,6k+1)的形式。找一找有哪些是孪生素数。\n",
"![image-2.png](attachment:image-2.png)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"【例4-3-4框架结构代码】\n",
"def isPrime(n):# 判断n是否素数\n",
" pass\n",
"def getPrimes(start,end):# 获取指定区间素数\n",
" pass\n",
"def getTwinPrimes(L):# 求解孪生素数组\n",
" pass \n",
"def printTwinPrimes(L):# 输出孪生素数\n",
" pass\n",
"def main():\n",
" L=getPrimes(2,3000)\n",
" TwinL=getTwinPrimes(L)\n",
" printTwinPrimes(TwinL)\n",
" \n",
"if __name__ == \"__main__\":\n",
" main()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def getPrimes(start,end):\n",
" L=[]\n",
" for n in range(start,end+1):\n",
" if isPrime(n):\n",
" L.append(n)\n",
" return L\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def getTwinPrimes(L):\n",
" TwinL=[]\n",
" for i in range(len(L)-1):\n",
" if L[i+1]-L[i]==2:\n",
" TwinL.append((L[i],L[i+1]))\n",
" return TwinL\n",
" \n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def printTwinPrimes(L):\n",
" n=0\n",
" for x in L:\n",
" print(\"({:4d},{:4d})\".format(x[0],x[1]),end=\"\\t\")\n",
" n=n+1\n",
" if n%5==0:\n",
" print()\n",
" \n",
" print(\"\\n共{}组孪生素数\".format(n))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#主程序"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"【例4-3-4完整代码】\n",
"\n",
"from math import sqrt\n",
"def isPrime(n):\n",
" if n<2:\n",
" return False\n",
" m=int(sqrt(n))\n",
" for i in range(2,m+1):\n",
" if n%i ==0:\n",
" return False\n",
" return True\n",
"\n",
"def getPrimes(start,end):\n",
" L=[]\n",
" for n in range(start,end+1):\n",
" if isPrime(n):\n",
" L.append(n)\n",
" return L\n",
"def getTwinPrimes(L):\n",
" TwinL=[]\n",
" for i in range(len(L)-1):\n",
" if L[i+1]-L[i]==2:\n",
" TwinL.append((L[i],L[i+1]))\n",
" return TwinL\n",
" \n",
"def printTwinPrimes(L):\n",
" n=0\n",
" for x in L:\n",
" print(\"({:4d},{:4d})\".format(x[0],x[1]),end=\"\\t\")\n",
" n=n+1\n",
" if n%5==0:\n",
" print()\n",
" \n",
" print(\"\\n共{}组孪生素数\".format(n))\n",
"def main():\n",
" a,b=input(\"请输入区间范围a,b:\").split(\",\")\n",
" a,b=int(a),int(b)\n",
" L=getPrimes(a,b)\n",
" print(\"【{},{}】之间的素数有{}个\".format(a,b,len(L)))\n",
" TwinL=getTwinPrimes(L)\n",
" printTwinPrimes(TwinL)\n",
" \n",
"if __name__ == \"__main__\":\n",
" main()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 小试身手"
]
},
{
"attachments": {
"image.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAOYAAAEPCAYAAABWVrhFAAAgAElEQVR4Ae2dvWsbS9vG58/Y1uDiNZwi7qzSglNEkOIRuDgCF0Y8RRApDiJFWNKYxUUQKYJ4iiBSHJCLgFIE5OKA3ATkIiAXAbsIyEUKFS62SLFFiutlZvZjdnZ2pLVsaxXdBqPZr9nZa+bemZ255zcM9EcKkAKlU4CVLkWUIFKAFAAZJhUCUqCECpBhljBTKEmkABkmlQFSoIQKkGGWMFMoSaQAGeZvWQYCjI4b6JzP1ubppv800T69gn/PKZ68bcA7HWP2a7mIZ5/aaH/Iieemj9bffVzdY+LJMJfLr3JeHYzgOgzOYReT23ImMZ2qCTpPGNhBD9MlDSgdLzA+ZmCvRvpuuX0zwdVP8yHcjjFQXmyz0zrYi2H44pii/982+teBuDj4tw3GKvC+3J9lkmHm5Ms67w7OXTisjv4Py1PcjuD+3b93Q7DcMfeQ/7kl0ts77aJzIQt77smZAz7G7zvovDH/t54ysKctw/E2avzl9ayDidE4A4yPK6iejMFTJAzzeCzvftnB7p6HcWiH42MHzquROC+TvDvuKKVh+ucuOhd3fKJ7umz6wbMXbJ5Z5x00/nDAmIOdvzoYWVqORc6d9wjB9cBQ0JKCKQrjfhNeTmHtvHHR3GNgjNeqvUytMTvvovVsBw5jYM4Oqkcehjf5qeLP1twPz9+uof1pmn+yfuTnGO4Thvo//JoAo1dNDGwvFP16vh348HPsWdSYkUHF1waY/VigdvveQy18wSWG6WP4qq3oMUXvTwfePZfX0himf9ETha39l8zg+37QOE8sgelnXrhdtJ5ugc2pcaanDThOA71vMoNnZy4qTgN9QwEucq4lealDQV5JvOygwmrofU+dvvDG1Ycado56SRM4mGH4qgLmNAwGI2uVyot+cv65C8Z24S1U88nrncM+YlP+OUJ738PYWIvlP0bey8pUY7pHFdn0nJvGKfovZdoiwwy+9DHgeXzry2YtN94nHUwMSZtdT+9ci5bGMIMfE4zORxi+b2GXsXt/Axl0y+zyr0ciDYPjmt0wb4doOQzNT+pbN8DopQPnefQdEkZf5NxMiorumKF/wO7erPKHaPEXUublIr8Bd9+mix//tnIOFKPiyf3WRYVtwf2SU4UpjxR8cbFreJkFFx6qhppcudQYNL2szDWm8fJ4p8nI3cNdpUksm8GV4zGu/qkr+5NWS+fvGhzmoPH+6k7GWRrDjFXBGN6KDDNOw48+6pYac/qBG24bI63syU6A9LddkXPj+98xMPvIa/EWhpYOn+BWfZloN7rwRG1nMqrxawZ2OEDSWp+i95Sh/a8mghZl7uZNH43tGjqX4fVfPFSVnk3eytjadzFMbpgble3AfMMMML3O3kQ1ctHi4c36zHckfxHuoplquvsYPmeon2bjtKVTP0aGqSvCt62GOcPgkIHpNSO/bjZAgzG0PkeFv8i5poQU2McLusPArN+W/E3voHo8Ng9L8Np9m6Hy7ipzY2GY6rfaTfjyytSumUuzO26GaO0rRsnPEC+FFoZxEzbA5C2vdSpoGYcpAlx9UmqonO9pU1NW7SiSzVoHjdO4MZ1OL3/OPQ/9d7xXtoPOQQW1l335Xf69h8abAfqnYaeQuFK2Wu78wgrvToaZzga5ZTVMWaMztZDGcchjSZOvyLlxJHcITEUTdt53McLWiPul6C14U9aBe57UjrJ10MLQB6ZnXtgJxrC110THMmwQXPfQfGaoCYVhelCLOE/l9FMLFV5bbdfQejfA5MZPmoa/AvixISfPFPwYwfuriubrYdLr/PMKvcMqWqnaLbnGGOIvu30Xo1u1V3aK/qGD+ukUk7dt0ToZn6otiQk8x4H31RjjwjvJME1S2QwzGKHN8poqmiEWOdeUjoX2TTE4qsH9dwDX0vyWUcn0Fe1Y40a4pXbQRMMHzEX/tIn6yQgzYbNBaEgVeF8TI5b39nF12kbrTU5tnWOY/Nrguo/2vgPm1OCejjA1GCN+zTA566N73EX/yxVmt1NMzmWfweh8AO+Zg62DDobXUWvGLi5/gbSeJz3WUeePuOrnBKPPPXQ/yebq5F036fwR3+kNDJZryZZxdoml8IjMk938vKs/779owctkkc0wxbEFDbPIuZlELLLDx+h1IxzY5rrtovHK1rxroVb0+50PZzzL9pJOTuQwUTTOl6SWD3k4YEeDuLnsfxug+7+h3TPGYpgybh8zaf3JrVIh/s3rYOdZC53TIUYXV5j5M1x99tB41kTvwgd+5g+rqFFNzzrofFQ7baYYvu6KmjM6j3+rR6+e2Uc36QXnY5w5vbTRtYv8Uo1pUslmmEVqwSLnmtJh2/eLd+W3Zde9OI8bZrrjKXu55aWXPRngzb+/k4F09RTRqcKaGJg6mr7wIRPZzFWvsYbnGqb16sxB/7KP9kFdc/MLMH5zB9e/7z1U2S7a/+bUtpcdtMLOHt4Bx14u72xAhpnJ0nmdP7Jwr/Qb0x+j90b5fhLPcM+GaTFKfjvRtGPZb0KRFGFk814SmvD3YZi/Akwvemg/q2X9Wvn3qO/D96cY/r0DJ/x21FIhNv0vckw96iQSQyX/V0c77GDiHUZbR31MoyqTf7s/5y0EPmSmdv6ZYl9sHxmmSSdbjYkiPa1FzjUlpMg+bpj31JTltfHfqndLNh3cjS63s+nRDZPXhDXs8F5ptoPK0yqqf1ZRP2yguh265L3rY3g+wvh6Bt8fo7PH4Jykx2WTp+RGHFpdMIa3pzpXyCZz+0ytPXnzvY7eN97/kNOKSCJfKESGaZLJapiAGJt03JxxzHTGFDnXlJTF991XjTlF/6hpcDIAZhfjZBxTuKuZxzGl0bqZHlbrsyxZYwb/uqj81Ubv4wRXt3FVJp3YTT3ol114KeMyp276voba+2QohTs/7D7tJZ5K4WXcP7nyZPfuzh3a7ckwNUHE5hzDhM2bR/++KHKuKS0L77sPw+QucvUcd7opeq/VYQEfgyM+I0Tz/BH+rndw6l7SMKVMvnA8Fy5+4SwV1cFAePQcdxfumUVwhcFbF63nLrwPA4wuBvD2TD3OQOSEUP+f2mm0cOZlTiydYXIHdu6SV/9wdz/DzFMW3DH9UJceMHkf+3x8LfSV7X+Xb+fpx5ZwLzM5YBc5t2BSldOXN8zgq4c6H84Q32L8eyz6n2L8rgFHr3lCp4bKq2E8XGLzGVYSmw0ubZihUe630buYxT2mqmGKm/6aYXRSw9YfDXTOpnHPcTZB2p5ZH03mYGvbwdbTFrrKlLDp5xYqey5GXwdobjuovZ0sHq92m2izNIYpOxMMQyB6YYhS/gC/sqcxm4Y89yp9xsjY1EMZprPIuXd7tHHuOGbsXvZrBNcyXJKbB+HQlFGH2Qgd3hkiztlC7XkXNh1yn20Zw/w1xeBFDc0PcqJ1/LwAMh5LYQJ83vQVs2v0Gj+bQv9bD829Orpf5Xclz8v6dhW9ax+Tt3XUuCthNLYavqyc/Tb6l+p3aDZe257SGKYtkXRsAQUsze/Z5QCdAz5jhr90CvaWLnDreznljobJx0jdl+kpd3wyQv+4Hr4sGGofkm9ENa3+Fw8Vix7cg6jz3wZcg0tg8K2HFv+mvTB4EtwMpUOE8FbKcahQE2IIk2EaRFnLXT8G8PK8asQDBRi+qlvd5Vb53LPPnmhaJt02C6TmZoLJj/wrpu/rqL0cJG55hij97/onk4/peR/dt30MLpMmcXzp7RUGH7oYmAwyPgnArymmd/EjDuMgw1TFpDApUBIFyDBLkhGUDFJAVYAMU1WDwqRASRQgwyxJRlAySAFVATJMVQ0KkwIlUYAMsyQZQckgBVQFyDBVNX6bMJHYo6wkEnukBP2uXgEiscd5ILy5iMQe60GBFSpAJPaE4pAP4/qNSeyLENP9b320BUCZYetpG/0QkGwrt4vEa7v+zsf8KwyOm6jwOXyMg6XqaH3Id0jW/V9zSezccfpNQ84XdHbQeDNaapEbE/c0mtTLfx+bxC709kdw3+oorQVygkjsRpEKf2MWIabzuWsVVoF7Jv0JuTNww6kYpxUVidf4JMvuvOUE8KpIa+Tk5V/y9DJUTibxbIXoNtGMkfkkdklVE0sRcJ/mX5JsnqKPR5EW+FUdtVOXPSaJXZAUOui8DF86hSccEIk9lXfKRmHDXJyYPhGzxHffpGeJ84mnbC+LlF88XiX19xicvN0Fe5194/ufmll+jW2OpcablQvmpCdPgy8D4DgKf/a+HuRxSewIZpJEd9ZDi6/WVdAwicSen++FDTOJis//y1/KQH7nVBN6WHShABvZFmGxxxtFc7+/skBnJ/0CEGDjNCd0cbq6pJVn4UySDcPvZ5ibcOdHe1wSezqZmXmP6cPZLT49ikjsWV3CPQ9mmAJvaMT4cSAuQwJF1tO2CsMEJu+qcnkBfQpdRByPV6AqwPHJkNmTZxU0taIkueTybCicB/hoJHYtBYUMk0jsmnrZzQcyzKQGytYI4TGtyZckbTWGmdw/HRJN2RTjRabP3GyTx+KXjphjmNOqEMd20blM3+9uW49PYtfTuahhEoldV868/UCGydcMzPvmsBktT2SZDJM3RbXOqgKsWNMiQ3E22Iw2PmmRwGpI7HrK5hsmkdh1zWzbD2SYtlplCcMMC3MegT3avzSJPVRs+k8ju9iMIAUsRmKXqI4cYsC9GObqSOx6obIZJpHYdbXmbz+QYa5/jcmZMG2xyrEmYllqzBWT2DVV8jGR+ol52+JFlQOQzrvGsn+DSey2JqetViz/N2auUYqCYGsNyGMP/o1ZAhK7bhO2GlM/17h9H4ZJJHYurc0wgXXrlY0KCwc0Nd9mHQqi4yhCYn/MXlmRH49HYk/0kKHVGiaR2JX8sBumHMes5Yxj2noj7fEqCbj3IPdUqh+PM14+CCYYf4v8gYqQ2OU4ppNZiTgcx1RWxFr+YbhuOd+zceSLaLsgiT2OUwZWa5gAkdjjDJmXyRbPn9TwQxxhGJgXr37+PW3f9NHkC8UYouMvmY66EKnN80cjsds8f5ZddTid1PswzCIkdu3ux3m98OnzcrfuoykLIrFjEWJ65CvrnctRe/9rBzVmRsxHGbZIvNG59/fLnQZa6N9E5PHkd3Y9gLuXrYkiX9n5JPbIVzZcHYrDiZ/vwjlUlxu4jydZ3jALk9ijZHMHdu6Sd9BTVsCKDi74u7RhbjiJPZfWneMnmZldcp00CdUsKxqveu3yYVlLR8Mt2V9zb6E+uySXQJ6ZXXI3CLD9OVdAYg+HjhbVy5r+ZQyTSOxWaengKhUgEnusPpHYYykosHIFiMSeyQIisWckoR2kACmwjAJLeP4sc1u6lhQgBWwKkGHa1KFjpMCKFCDDXJHwdFtSwKYAGaZNHTpGCqxIATLMFQlPtyUFbAqQYdrUWdtjRGKPso5I7JES9Lt6BYjEHueBcK4nEnusBwVWqACR2DeRxM79Pt+1UPvDEbRy548qmsfD3HXuM76yZSax347RfV6TxHS2hcqRh+FNvoXpvrK/C4k9fuIF6epch+b+DhzGwLZraH8yzdGJY00HiMSe1iPcKviNeYXesx00+bIBv2QMwY8h3D1mnC0RzS5ZCxL7jwEa2w30Iyf7Xz7Gb2twnAb6BuOMZpf8biR2FKKrS5J65UUfk9uwRJ27YGzXSNsPz1B+iMSuiJEKFjJMPreQ/ccwZ/Gyg12mT362zMcsIYl9+r5qeLacic62+ZgaltM2H7P1WYfYpvLmDhsS25KdmF0gqgJ0dU4BdA608vCtiwrbgvvFPItITQmR2FU10uFChik+pJ+4GP9MR8IxIy5jaHxMKLLrRWIPqQSsgUHyCOIhxTNrxPTflsSuZaudSiBfWnee7E0kdk3t9GYhw/TPWthiFXS/pSOJDFPFRq4j88e0UI8onKlJzb8xiV3LVqthRoR6QzNfiya7SST2rCbankKGqV2bbPKmrONiFLde1puSlzzYBJ0n+uI/4aRq48RweezBKXlJAsPQw5DYbYYpYdYtDH1geuahEXYGbu010fmS30QnEnsm84w77sEwOVhqSwMjrz9XNridoP+iiuqJBucqC1c2zs6HI7HbDFMSJ1z0T5uon4wwEy/lANNPLbH0ovc1fkuHKSUSe5xlCwSWNkz+AV/LkOVstYqtNuUplteqzeL4OQR+Qi4qm8VZJPuN18aRzAuEaWcMqd7G6LINIrHbDFN8qjAn++JCgNErB0whABKJPSo8i/8uZZi8WdI+MfFr1r/GROBjeu6htl1Nd/2XpcZ8BBK7zTDFMaat+xmVuy98yEQ2c6Ndc3+XYf4YIt9YEnu+UXKVbLVieEwbVki0tdSYyUmPFhJDAqnvZ1trQB578G/MxyCx87aLBUkpm7JmSBmEkWXJgtZMuw/D3HgS+00f7b+HRgZrJP769coG8DPDQADCpmsyLFDSXtn7JLGHmWgzTDGmnQeYfnTDJBK7WGHZDEaeYXyRDAKuF4k9/C5yDM2v0DBVZwAxjpmqRWVJlj2VavMux0GBf4e9ZKnvsOiFdvdfXlvPq6WKtUZshonvPdQYQ/LCSlIujdbFONk1P7RkjbnZJPafY3gHnsHBAOAZ5SoOBoDF86d0JPawFvyziyutCImmLNOWerB5/qw1iT398FbDhI/BEYc8a54/YedPYe+jJQ1TpnwjSewBJid1dC4SSrnvh+GbMbqHDvTe0MhXtvwkdkCk1WmgdxmNwQXwL3tobjvaUJAsApGv7O9EYk+Z5SJ09XB5+cqrYTxcMjtzUcnxL07Fr28sbZgbS2IPO234DALjv7kZlZldEjmJaxmzWhK7TAzv1veOKtgSz7eFykEL3fOkea4lGfrsknUnsYvnC5vu2TzO6eiZjdBRNKs97yJXB11AdXsZwyQSu6okhUulgDAo88txdjlA52ArfKGaz1n5s9zRMPnL1H3ZgTrljkjsK89NSkCsAJHYYymiAJHYIyXolxQgBe5FgaU8f+4lBRQJKUAKZBQgw8xIQjtIgdUrQIa5+jygFJACGQXIMDOS0A5SYPUKkGGuPg8oBaRARgEyzIwkv8MOIrFHuUgk9kgJ+l29AkRij/NA+PsSiT3WgwIrVIBI7JtIYv95hcFxE5Vt7jPrYOdZC72vkeN3tjRmfGXLTGLXki+YsEboljxR95VV3cJSUXF6/ZuGJLw7O2i8GWEWArNT5y24EVwP0HmTFD493HrKwPab8HLPcdHckz7PzmEPV6Z5qDwtRGJHLZxKJ3y5RVnwMXzVVgj9nNaRncCxYFbmnlbsGzOYwNurgM8WkaglBb50ocOXwhkbrIK1ILHrEv0coe0wsBzDjGaXEIm9kmYjEYk9Lkmz62loJ/GuhQOFDFNOBNYnwPJJvw5YZo6lZT5mCUnsacUCjF/vSqdvk2Ha5mNqyBQisaeVVbeIxK6qkQ4XM8xzFw5z4H1NR2Liv6wbiV19ouCrh8pBH/3X5hqTSOxcLSKxS7bVLpqpRZR8DJ8z1E/zpwuqZS0vXMgweSQmWrkwTMfDRLnL+jF/osRP0NmXCwmZZ/CXlPkTTlq2f1u2UXMcVI9NZMPo+ZNf8/OHx4nELqgdjTcD9E9ViIqct2xCriTKzg8VNsxslBIxUXmrmuX6UvL4VKHGqVxGzlwwS0DJy2QCkdhVSYIfI3h/VdF8rSwP+fMKvcMqWqnaTb3KEOYvu30Xo1sg6fyZon/ooH46xeRtG8NbYHw6QFI/TuA52ValIXbrruUM8+cUo5Mado4GGjFvTbmyPCOUdUqMhlkWrmycrURiF1L8mmFy1kf3uIv+lyvMbqeYnI8wEv8DeM8cbB10MLzOH0GIJeUtw+seWs+THuvEMAH8nGD0uYfuJ2mOk3fdpLXoD9EyLE6lxr1I+I6GmWBGdv7jYfRD75G11Sq22pQn2UJyE7Pc89AmyX6dPbSIEPx7YXDUxOBHcrbRMEP0hvkbIv3c8ts7hxgQPsvd0hql0cfodQOeWCuE33sXjVf5wyidNy1Btlv0nsbnD29NJPZoZAKYfXTR+x4Kw9fxedJJDDXKqoK/dzTM8C6/Aswu+2jtbaH5UV1FeP1qTN57qiIq+RMaC2ZZakwisVuL+saS2FOqCMaoini01YrhMW1YIYnPUmMmJ91v6OcI7osh9EaO0TDDGt08vinTTiR2D2wu41bLwjsyf1KxbDKJ3dQrGzU/q++TWnOtemUXaiJHlLiS9soSiV16VrEdVJ5WUf2zivphA1Xuofa0hc67PobnI4yvZ/D9MTp7DM6J2mGpmngA3w8/z4IxvL2G8onDh4kctM/U1zgHhtfR+zZCO289FzX6BcKFmrJy/M68cK3HGOKagn88izFPtRYNU/O9h2pmWXg1pSuoMdXbK2FzjRmuPk0kdiKxK2WFl/fKk10UBl0rcajBQoYpP/hbGOq+laIp68A9VzuBLJ4/GS8hNUnlN0zYPH+IxC6W4StcQO+jKYuNJLFDrFvScKTva2SCwc0Q7r6DSmaNzMRXdh1I7OqrQYZ9DF/w9UX6RofzyFeWSOwMRGJvobLnYvR1IMj9tbeTTH9FtnzZ9xSqMUVUsxG6z2the97BDp/F8OkqNyGZ2SUlJrFLqZKhoBSN/KCvDCKHZ553wiXOHez81cknkGdmlyzmeWPPOv3oGG5Oh0vcL/BrBJexzFIWqZiIxJ6Sg2/433po7tXRDWdR8VlF9e0qetc+Jm/rqP3dT2bohB5Yzn4b/Xi5jUyUc3cUN8y5UdIJK1GASOyx7ERij6WgwMoVIBJ7JguIxJ6RhHaQAqTAMgpQU3YZ9ehaUuCBFCDDfCBhKVpSYBkFyDCXUY+uJQUeSAEyzAcSlqIlBZZRgAxzGfXoWlLggRQgw3wgYVcbLZHYI/2JxB4pQb+rV4BI7HEeiIkIRGKP9aDAChUgEntCcRDwaz7tKwO/5mAyBudZBxN9UobIuwDj4wqqJ2PBhk2hRTilYM/DOJz5NT527m1WSVRslm/KXnYE6jGBEUVRy9+Mr2xpSew5PrKMI0taGKrT78JH3GwSu8Q0pvyJhVYh4kWjJqZLhbL1cwz3CUP9Hz6Xl89rTONdlDPzg4GPaPqkfpJ56l6A2Q9DhuoXi1lTEg2TGGYZSex6wkO2KDM4ePNTgwsPlbUhsc/Qf93Dle/Dz/xHc2kSAaLZJZtLYp+g86QC99MVZppes89tNBfiqspayTnsJzA3TsDf9zA21mKJ/noob9kIU43pHlXAWAWeYfWAdLxT9F/KtEWGGXzpY3AD4NaXEze48eYwfh6NxJ5ONDD9py5p5UbDtMzHLCWJfQzPRF3XH5pv2+ZjasiU35bE7g/hKcSKRKYpekeLwaiIxJ6opofu3pT9MUBjz0X/f3WYasz1I7EvbphEYgcwG2OsEAWjghX862agZtGx1C+fHrVdQ+cybI188VDl06fCFiZvkWztuxjmfSOlIsvfMDdl1fMDTK+zN4mnynHm/GkDDm+mvxppa5Hwz5+SkNjlI/Hvi6poCogq3lBjrhXzRzzUGF4uA0bNyJIyf8J5gI9GYlclicNT9A4XqC1vhmjtK0bJrxcEA5WOEWDytgaHVdD6MDZMVg9w9Snp5Ml27shjpqaseq5s1jox5Dt+lCjAifN7Hvrv6mAvOugcVFB7Gc6//N5DqUjsfHEhjtnn7zqzYYYdKQaDles9MDCtyRfpEIG9FmWfJtctGZoN4J1O4X/torm/I9+Q2zW0T6+0t6REn6yUkpd51McnsWeSwPsU/m2j/iEBshnPue6h+cxQE+agRaafWqjw2mq7hta7ASY3Cc8VvwL4hm/RzSSx8160Zx4mYQvEbJjrx5XFjz7ah02030/iHr7gxxDuHkNq+YeycGXjUr8aEnt8+zjA6XFNDG7jHVrAx9VpG603OfSGHMPkkQTXfbT3HTCnBvd0hKnBGLHZJPYAk5M6vK9JL6XZMG21iq025dlggXGJzAu749WueS18p9p2NoT7RrYC1BLFawFHHS4hErsqTxLmY3tHAyNixv82QPd/w/j7MblICVkMU57lYzZLyp1yZRiUWEm+kHLndIjRBe8tnuHqs4fGsyZ6Fz7wM39YRY1vetZB56PaUppi+Lor1jCJzgtuk5p79ST2yw7qqcWD8pqya1hjRorrv2ItCoWTU5Yac8Uk9rRMfPzRCcci00cW3pprmAvHJE7cIBK7uRvcXGPaasXwWNm+MXPzXdbgyVolttaAPBbzdcMa3liDi2O76Fzm3jj/gD9G742ykpU4k987Z52UOCaZPmN64nOSwPwezfBc8bJacoWr+zDMjSSx59LT1KZlUjDWrlfWn2J8YVqaWxbmZF2TkvbKPjKJPTFf2aPqzH0ppK7IbixlmAHGbyJy4waS2LNq5jVl143Ezod/+AvG0HkxG6ChkePFOOamk9iVwjB9Xy2+VolyvQguZZi8R9hF5a82eh8nuLpNvkVza/3LLrzUMgd6guT29H0NNcWRgnuz7RqA5SslsZuSbm7K8jMtnj+GB0viLtbcSq5bJhQa5ouhNjQC+J+aYLrLlc3zZ2NI7Ine49f8pZa0lpIjBUJLGqa806aS2A06X72rgj3xME5eUvFZka/sOpDYg68dVPddDK6T3jb/soeG4xg9WSJf2Y0msYucDvsMVm6YoVHut9G7mMUv2EyNyeHbJzVs/dFA52xq7EWOC7AamPXRZA62th1sPW2he554C00/l4HEHiZWPLA2TMFYtCJW8kSZ2SVlJrHrlPlnLXTForDJ86ghfXbJOG8M73cmsfO20bsqHMc8A0fVyxpepsb8NcXgRQ3ND3JFANWdTtTmBh9onzd9GUPKgT4ngURizxGGdi+gAJHYY5GIxB5LQYGVK0Ak9kwWEIk9IwntIAVIgWUUuPu0r2XuSteSAqSAVQEyTKs8dJAUWI0CZJir0Z3uSgpYFSDDtMpDB0mB1ShAhrka3emupIBVATJMqzzrepBI7FHOEYk9UoJ+V19a+F8AABqlSURBVK8AkdjjPBAeakRij/WgwAoVIBJ7AunKh3H9ZiR2s48sn11gnvSb8ZUtLYk9tCT/Cv2XdVS2+TM52Pmri0kOtFv3lR0lfs1ps8z4yo4M1Lf0JbatPLhxRH8ThXG/CS+zLEBUYF009/jzcV/RHq5MDB2eAH8E9+3YlhTtGJ9RVHCWCZHYNQ3lZuFvzPGxi6FG3o7I5foEk2h2iXsmSyx3Bm44ZgK2f9ET60u0/5KEukVn2Ruf6q47Q9apdx7NTpii9x9m5OZGs0s2l8SeFZnPXSw2/YtI7FkV5Z6ChjlD/7iPvIohfRPLfMxSktg5zGkX7hf19eJj+MKB8x8F4c8f0jYfU0Om/LYk9nRmA5y/KmYbLV5jEoldFzHZfjDDXDcSu0jvn71kDY1Eo0yISOy6JBy3UoH7Txf1RedlEoldFzG1XdwwTwYL1ZjrxvwR8/ZeL/I9VVLmzwpJ7LxVIADglqlnqVJHJPaUHKaNgoY5gXcyBm4GaB9UsMWbLs4OGhmI77pR8iRuU9Dt/Al6z2vxs8U4/Fg9iT4hEnsoiLo61wKGGRCJPS5JtkBBwxzDO2ig/XqY0LBvJ+gdOnBS31brxpWVxlb/Xx/eQQv9y7Ab9naMzjMHzqHSSigLVzbO1VWS2AOMX9cSALjVMInEHmfZAoGChjlB9/kg+x0mFvhUh0tstYqtNuUptsC4BH5CdvPnLpjKFDjzAgKIUwQJj8HZbqLP1z5U//RnE4WPIeHMqienn1uAyvK+ucJnWa732cfodQOewJ/we++i8SoaEjH9tlAroE+Gl6M+Kl+64KuH+skk5uvwZSZM35hEYteEW2CzoGHmxcgXMVUL65rVmKGx7b6ZGB5wiv5/GGKIc1lqzJWT2CfoHGgre+UYpkHU7K5lmD/Z2LBBJHbD08e7wlowhh7ZasXwWKrpG0dkrzHV0+41LGs6cy2oP1u6VkwnQx6LjdhWK4pjaisjHZN1qwQk9un7ZpYiv2rD3EgSOy8pfEWlc0kiSxccWXjjAsnJaSdOlscqLprAc5QaKB3RigxT1vjmDh3dMEvaK/uoJPZQkwwlMf2ZYX7RZTJc7liqxtxwEvvk7S4Y20Lnqy6uNLZkGYF1I7HLRXGYcRwzbKb/k6z7SCR2Pf/D7RXWmBtNYheG+WcXV3q+8CXYMssLWDx/SkdiByCeQff8ASA6f2rofVce2ub5s4Ek9liZFRqmTMOmkth/DND8o4EuX3znl5TCuLhrmFORr+w6kNgB6bfJnAZ68XCJHAqqhKtnxwUQQOQrSyR2RZVvXVTZLrwL1a1ROW4LLtWU5RFvOondv8LguBnOvmDY2mvC+6Qu8plWPzO7pMwkdsixttofjpx58UfD+mz67JJNJbEj7OTSh7AKDQUtY5hEYk8bHW2VSAFLM3J2OUDnYEu8bIrN/njE57ujYfIxUvdlB+qUOyKxP2K+0a3mKEAk9oxARGLPSEI7SAFSYBkF7snzZ5kk0LWkACmgK0CGqStC26RACRQgwyxBJlASSAFdATJMXRHaJgVKoAAZZgkygZJACugKkGHqivwW20Rij7KRSOyREvS7egWIxB7nAZHYYykosGoFiMSe0Bs2hsQuCp0gizdRDX1Kt562MdCRHGHpzPjKlpXELmaXpOcTqr6fjY9Zmq7uK6u6haWM8zcnsXMdmvsS1M22a2h/SqbIpXQwbRCJ3aQKin9j/hzD26ugdTqBH84wGb1iYE88jLVJBdHsknUgsQsw82EX4xsfEVle/k7QPcw+WzS7ZLNJ7HJGTuVFH5PbsHydu2K5jMVmmBCJ3WiVQFHDDDB66aCuTBrmEV+9q4Btu5phWuZjlpDEPnnnYWRYw4NPwFUngAshbfMxNWTK70xiD/5twznQKPXfuqiwLY1oby5+RGI368L3FqsxxaThNkZazWiKfr1I7AGuLhTaW/xAU/SONOAUn4v5ga/RkdWBF9T07A2+7AID0yZP87mfo5fmNVHiW98hMPvYgOO0MIxqL0McwW3OCkmGc+2UPPls7X8XKAyGuPmSCo3tGjqX4fVfPFT/7uMqTB5vkWztuxhmvyBMseXusz8DvyzA9Dp7k8BPnku0jjhG5dUoIQKKO3LEyi6aqaa7j+FzFUyXmzTrgUKGOf2nDqav45ET/Xoxf8wPwQ2t9UkvyCVl/jw2iV2sVVLP4j7NUqb3Eok9rYdhq4Bhhm953lT7NcXwuIEdh3eWbKFy1EF6knAIazowLUAUHtOafEnaJGmu0CTb5OJ7DPGVvlxD66AElLzMU07RP+B5MW9BH5l290smAuMOW20jWwctDH1geuahEXUE7jXREZxbY5QgErtZF31vAcMMDep1H/2jOuKl6oIpBi8qYHseJnHtv2ZcWV0V3sA5d1ExcWbLwpWN07waEruEWbvonzZRPxlhJvI+wPRTCxVWSejscTqJxB5LsUCggGFKEh5zqlmmSzig3YybfbZaxVab8hRbaswchIU6rMHDy9e2PgZHOcxXQQrI+4ZIP/fvTGIXnyrMQfVkrH13hcTBowGijwAisS9gidopBQwzLHSK4GpcYrWsuHm65jWm6ORyYVz7qyw15opJ7KKZmyEjhiXiCx8ykc1ctYxYw3dEi+TFuUEk9rCmi2nraUlERsXflLZaMTwWG3E6HmuNqZ/6QNvT91UwdSGh1H3StWLqUFjbx+DrsIY31uDiWE6tnI40u1UCErtsDXjml5d4tnnfu9pj3YdhbiaJXXYDs9j40sKmDXPdSOzqs9hfQEBJe2UflcQO8PHZ3M6mRzfMDSex543fcaYnH7thysKvchxTAyXz8v+9J9ijnUvVGNSw5RtTPe2hwmFT1bxcgrwpkdgjEDaDaRxTGm3Op0Bevi1ZY240iR23AzQZy3j+QHT+OHDP425ZvnoJOnsM+gpa0/c1sDKS2KMCI8bnGGyGCZvnj+ZMYPP8MRXqKBnFf/kLbV7zsdhLzzZcwl/GgyPpJJH2jJWdP05mMH7OEy1pmDL2TSWxRwRyVgH3f5U95DMMX1XgHGquWXzI4cKTXefnsn/O/9pBzdiVnmSaf+5ilxv/h6nW25ec86AhUUDmGGakg9PARpPYQ6eGyqthPFwyO3NR4brkTGrIzbulDXPTSewAxGyCvRAgvF1D69047hrXhc/MLik1iR0QteE2Q+VdZoUW/dGEDnJg3cHOX7qThXJ6ZnZJvl7KVQWDY7g5NWbsXvZrBHfecFI4HKQPQTGW09EzG6FzVMGWWPlrC7XnXc3ZZMHHWMYwicS+oMh02uMrQCT2WHMiscdSUGDlChCJPZMFRGLPSEI7SAFSYBkFCnj+LHMbupYUIAWKKECGWUQtOpcUeCQFyDAfSWi6DSlQRAEyzCJq0bmkwCMpQIb5SELTbUiBIgqQYRZRa23OJRJ7lFVEYo+UoN/VK0Ak9jgPhL/vq1G8nQrcTHBlICOKc27HGJwnkC4xze3FMPRwm6L/3zb6oRebxKxU4FmQKqn7LrBBNeYCIq3bKURi3zQSuz9ES/hEcvBT9t85mWTKcMZXtqwkdp7y2Qjd57UQMsawtdeE9+kq15meSOx6dvMZRfNmuGjXEIldE0RuFqsx+TICey4G1zONVj7D8GUT/R/pe0SzS9aBxC44pw6fNTNFEBLmg9sJeocOKsc61wYgEns6r/mWmNKX40ifPZvvIRK7WZeCwGf/s4fed0NU33tovtVrS8t8zNKR2OUcwtr79MxC8aRiDqpWC9jmY2rIFNt8zAzh3SBtsV2SvlB4LqR6k2CGyfkIo7MeWk/mT3+LL43msRYwTCKxx+plAoVqzNnFGMnncBQXL9RZ+vd6kdhlgTayeTBF/z9p8l4eyWGzSOxR/vNfjlupwP2ni/qihkkkdlXATLiQYWau5ju+99Aw8FfXi8QuYda7r7NNVkFieKLWmCVl/jw2iV0pDLxVUOXNfcvUM+V0gEjsKTlMG0saJi/QdUPzNgRaGcFd4TGtyZckrhj+IrluydBlBxXmoMbhxeE3Jo+RN7dqqW9MmT4zekQee3BKXuZRH5/EHifh5wjtfQ9jPuywgGESiT1WzhpYzjA5f9XImV1Prqz/tYv6NgPbrsM7HWF06qL1v0mazlAWrmycrashscvbBxi/riXUdathEok9zrIFAksZ5uQNX+ko4m2rd7PVKrbalMdhqTEjHo9hqEYdvjF/K6rpywnfDOC+6qH/roUaN1Cnlh00FoWPSOxcweCrh/qJskpajmESiT2nvFl2390whXdJ3mpPa1hj3vTRPFKAYpzTc1KDwxw0TpXe2rLUmCsmsYtv7wNticIcw7SUv+TQMsyfJJY4tEEk9viZRUD0QDoe9EESeZatVizjNyZf69FMRZdrIzYxiNectLUGHukbswQk9un7JjJs4FUb5maS2NOGOT52kEdl52euVa/sbIBGHgUOsvZvfIwGikraK/uoJPbw5Trnk6J+GmmWLjvGraVqzA0nsSeChk1VY6+rPGutSOziTZ+DZ4QshGohIxJ7UhJSoRXWmJtNYo9zgTNM5y1VbvH8KR2JfYLOk93s8oL8eflwgKM1c22ePxtDYo8LQxJYoWHKRGwwiV0IIDJgnmGuF4ld+PXyXtjzkDDPex0X8JXdaBJ7YpIy9K0r1qXxLtSlMvSTcraXasryOInELtYl6e47cOL5aTlic7m+9dF+KqntW0+TOWz6FXJZt+yMFfNAvn71PW0Lqnj1zrNL0svdK2n6nUns/DFzhrEKDVstY5hEYlcKGwXLpYClGTm7HKBzEC5psagv62M/3R0Nk4+Rui87GCn9TERif+zMo/vlK0Ak9ow2RGLPSEI7SAFSYBkF7u75s8xd6VpSgBSwKkCGaZWHDpICq1GADHM1utNdSQGrAmSYVnnoICmwGgXIMFejO92VFLAqQIZplWddDxKJPco5IrFHStDv6hUgEnucB0Rij6WgwKoVIBL7ppHYeYnzrzA4bqLC0RuMwfmjhta7cZqLo5TMjK9siUnswfUA3lEFW2Ke4RYqRx4G4foUyiPFwY0nsef4yPJyEQPJYrVyAkRiNwpT7Bvz5xjenoPG+wn8aALBzymGrypwDhUsR3irtSKxX3ZRFST2ZHaJf9lDw6kksClFQiKxS+d198zXqPzhdlQ+FM2yQSKxZzWRewoZJp8g7GjzDWU0fD6jg/RsAst8zNKR2H0Mjhh2DXxc/1MTTJ8/apuPqWE5f2cS++zUyyyLkVfQTPuJxG5SRe4rZJj8Q1qdya9GO36dPrZWJHaBFnHgfVWfKAyLhZTSE6WJxC61WcowicRuKGzJrkKGOX1fFZwfhRkXlV4Mn6drzLVi/limTEU4zdIzf1ZAYueGOVCmWyXFak6ISOxzBCq4qBDCJlzlRR9XKk6WF4rUN+aaUfKEYaZrxVi5EFeZLDFYAkpenLgosBoS++TEw5hPUn5ZDzsDHez81UHuhHFOhbjuofnMxVA36Jz5mNNPLVR4Z9w272QcYHLjJ8si/grgGxaeDX6M4P1VRfP1ENOIqv/zCr3DKlqfstVKpGLml5frfRejW0BM5D8e8zXN0D90UD+dYvK2jeEtMD4dKGv6TOA5Oa2vzA3ydxSqMUU0NwO09x0wp4rmuyHGZx20Xg0SAcRJ68aVHcNzGEyrfU0/1OHwgiEyhZesEdos3WxP5E0bbXaRoeTMaNZ/+rtcOb5wcHUk9vFxHY2/XQxvwp6eXz4m7xtwnOwiUxz9cXXaRutNTg9+jmFyGYLrfljmanBPR5gajBG/Zpic9dE97qL/5Qqz26lctYyvXHY+gPfMwdZBB8NrtUbJF5m/QFrPe/GK04lhcg7UBKPPPXQ/ybfL5F03wbiKT5/G3VoSSnKKG6Y/QfeFh96ph8YfDhiroHWqL+6aLqDK/cTKUP0DGy9IXmsssJbu+WVJ7GJtR6cKvpanKGaBj8mHJpqnfQkeiwwz5B2Zv7XTzy1xKeqCRIoS4bMYn1M5zR70MXrdCGnx/N67aLxKxvA6b/RwCzWWXrnMFr8YnI+e23Di5F0Lgxv9AGf0podLiMSuazR/u5hh8uGSg3ABGRE3fwvKpkZ6cdd1qzH5wwTijV4TLxs+PtuAdzYFRMcQQ/2fsAlUlhpz5ST2/MI1ebtrZQ4br7TUmMbz5+zcIBK7XNzVtFaJHK9Uv9HW7BvTlsl8FW3G0P43GphL14rpS+WxeHDdViuKY6pm6ZisWyUgsdvSJ1sKeZzenCvvwzA3k8TOP2pzmmWQ60smHSRrRmLPKSt8Nx+HZCmAFZHYI7lmlyNcxUtHRHvDjpIn2romyWFzaCnD3GgSO68N8gwT0L9H1orEbi4qonk7esnAtKUGicQOIGxJbBmcMsRQmeZokStxdGApwwQ2mMQuvWPMnR7yg7/1We3xsnj+6J40UeaIX9kcXK5TJBXhYhvfuqiwCrrflNP5+p/M4JJn8/zRPKNsnj9J81i5552D9henjLaYtvrLNpU0YZhVdK9TewVzuPOE5SzPqJ+rbC9pmDKmTSWxi0Fs3gs7gR+PD833lfXOpcH6Xzvmgq7kj3/uim+6+odpMl6lHH+w4FdPDItE39DB9wFaew6qJ6bl34HIV3ZzSewzDI520Hg3ToYvgpnwm2YGl8u5+ba0YW46id2/Qj8eUL7D7JKc2Rqyw2CVJPawVzacNbO110TnXB8FTxcvfXZJ7sD6b0ti93H1yUNzL4RJb1fQPB7EY39pteZsLWOYRGKfIy4dXp0CFrdCIrGbvX38Lx4qln4T7kHU+W8D7ocxZlELMczh4FsPrb/a6F0YXt43Q+kQIbyVchwq5pSUYuOYcyKjwytUgEjsGfGJxJ6RhHaQAqTAMgpQjbmMenQtKfBACpBhPpCwFC0psIwCZJjLqEfXkgIPpAAZ5gMJS9GSAssoQIa5jHp0LSnwQAqQYT6QsKuNlkjskf5EYo+UoN/VK0Ak9jgPhL/vq1G8nQrcTPK9lG7HGCieX8Iz7cUw5CdP0f9vG/3Qi02SKirhhPXUHe68QTXmnaUr74VEYk/IDa2nDOxpC1maQxs1h8F51sHEhCqBZN5GvtLCMCOaA3fg3/MwDudsjI8dOK9G9+rbXdwwb8foPq9hx+F+rQ52nrXQ/aLOKkkX2DKR2Kcf5nNQdf/XkcHjKnrChc/N+MqOMi5eUZyL/HJifLagaYVxvwkvgxaJznHR3AtJ+ocJ1yZzb38E9y0HUC36x2cU5U8NNMZCJHajLMUMk0932g5J7KHvYPBjCJfT2T9mS3AZSOzTz7wwumg95Y7W9kITzRjphcs4zM5cVJwG+hmuTTK7ZP65kqrmcAPg769fcgaGiVxvzKGcnUGMwtdOuOygwmrofdf2L7op6AgddF425Ms3qiUWuF5wk+ZonI6GSOxpPZKtQoY5ebObmTQsouJVu+NiFNE3xE7LfEzDtKDgxwSj8xGG71ti2td9zcf0rzklbYTBcc1umLY5lvqk3wLn2uZjpuevJply95BEuizVrApmki531kPriUIHnJeomz7qYs0X+8tPjYZI7Koa6XABw+RoEWasGQG+RAKDWtBKR2K3zL7gkixOVy9yrpxAzrTJ0xz8JcgIB32FR5rOmLtszT7moSOT2ILb/M+O5CwZsk6UTp3McSsVuP90UV+0xuRze7dr6FyGb/MvHqp/J7xi3nrZ2jfwZ1P3nb8x/xkCTK8NrT2lRSJaUvylk/mO5C/CXTRTrFofw+d5eNP56Y3OKGCYttnv4Zv6ZBLFi9KR2K2GWYDjgwLnhoQ99YUVCcSNiLEWhovbSXSp+VdMYmdg1m9L3uHhoHq82FSk+YVaJoW3CnicgVVjJdlEYlfEMAcLG6apkHE6de9PBnYYEalLSMmzFhr50omhzimt5LGYfIcC54rJvzkcV3HsjpS8VPr4xmpI7CIZP0do74dIU6vGMtFEYs9knnFHAcMMa8VMs0yCkLZ4L23cNCshV9ZWaAqwYonErpajAOPXtWSZQpvGRGJXhZsbLmCY3ADbcNgWmh9C5g/neJ65aJz00U3R1W21iq025emV1xo7f8IaSKWum8LGa22FRhzL+y7QnqXAuRKXktMZYqtN52ZbdMJqSezBVw/1k0kyfpejMZHYo/xa/LeQYfJo/S8dhfFSQ4sbKWTHEHsdjXlRjcm1etC1S1ZOYp+gc6CxY3MMc6HiKF5UBSHRlog3iMRuU2GIFmOovo/YKrZaMTymD0HE0VtqzPicOwSshUarFVPRy2Ol+sYsAYl9+r6JzmVKKMCqsXauvnkfhrmZJHZdSWVbMEZLvj6mtdAU6Gkta6+s+AR4rEWFwperGLc0kA3D/WYGsVJu1OBShrnRJHZVxXRYLGirIfFLR2K3GmY4Nplxkoiao00MlKUAiMSezv94a47G8XmmwFKGKTsgK5xa93GCq9vE0yV3yOeyC+9s/lgV92ZSl2fk3my7BmA5L++VJ7v35jNb7BuTr/3nOGipD8S7yx2TS57F88fwYEleraIpC0SL8kbAZ5ke7gjgwNF7om2eP9q5Ns+ftSaxJxmWhFZomDIRm0piDwfMd6P1Km7H6PAFQY8GiL4uk1wCIl/ZMpDY+QK0jO3C/Tf/LRn5ys6nqye+svPPjXxl+5jyFzmHEz/fhROP+aqKLRPmL7ScHuA42gIvPe7Azl3yDnoy3XEclsC3LqpsF95FUmNZzk4fWrLG5Avjjo8rcPYl6zVKQabG5BMKTmrY+qOBztk0nMaVTopxa9ZHkznY2naw9bSFrjIlbPq5hcqei9HXAZrbDmpveYfocn/FasywV1YuWCsp7O3TK2siMrNLHpnELjLG8C2U9/2jzxjJpavzJXjPO+HivXOWOM/MLlnM86ZY1o7h5hhm7PD+ayQW4TUOJ0U3E7We6bvR0mMqjCp7jfU+0f2i32UMk0jskYr0WzoFLM1IIrGb2nN86I9I7KUrx79dgojEnslSIrFnJKEdpAApsIwChb8xl7kZXUsKkAKLKUCGuZhOdBYp8KgKkGE+qtx0M1JgMQXIMBfTic4iBR5VATLMR5WbbkYKLKYAGeZiOtFZpMCjKkCG+ahy081IgcUUIMNcTCc6ixR4VAXIMB9VbroZKbCYAmSYi+lEZ5ECj6rA/wOc2rZThVWE2gAAAABJRU5ErkJggg=="
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"1.完整程序,程序功能实现统计1000以内每100个整数中素数的个数。\n",
"![image.png](attachment:image.png)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"from math import sqrt\n",
"def isPrime(n):\n",
" m=int(sqrt(n))\n",
" for i in range(2,m+1):\n",
" if n%i ==0:\n",
" return False\n",
" return True\n",
"def countPrimes(start,end):\n",
" ...\n",
"\n",
"#主程序\n",
"for start in range(1,1000,100):\n",
" print(f\"{start:3d}-{start+99:4d} 有{___________________}个素数\")\n",
" "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3.斐波那契数列\n",
"斐波那契数列(Fibonacci Sequence ),又称费氏数列、黄金分割数列。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## (1) 单变量实现"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"使用三个单变量 f1,f2,f3 ,表示每次计算需要的三个数。\n",
"\n",
"1.如果 n=1,2 返回 1\n",
"2.f1,f2 置初值 1\n",
"3.循环当 n 大于等于 3\n",
" 3.1 计算 f3=f1+f2\n",
" 3.2 f2=>f1,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<n:\n",
" FL._____(2)_____\n",
" i=i+1\n",
" return _____(3)_____\n",
" \n",
"n=int(input(\"n=\"))\n",
"print(fib(n))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## (3) 字典实现"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"使用字典存放费波那契数列\n",
"\n",
"1.a=0,b=1\n",
"2.创建空字典dic\n",
"3.循环i 从0到n-1 \n",
" 3.1 将键值对<i,a>添加到字典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
}