函数的定义、调用、嵌套、递归

{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Funcion函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1、函数的定义"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "def JiuJiuKouJue():\n",
    "    for i in range(1,10):\n",
    "        for j in range(1,i+1):\n",
    "            print('{}*{}={}'.format(j,i,j*i),end = '\\t')\n",
    "        print('\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2、函数的调用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1*1=1\t\n",
      "\n",
      "1*2=2\t2*2=4\t\n",
      "\n",
      "1*3=3\t2*3=6\t3*3=9\t\n",
      "\n",
      "1*4=4\t2*4=8\t3*4=12\t4*4=16\t\n",
      "\n",
      "1*5=5\t2*5=10\t3*5=15\t4*5=20\t5*5=25\t\n",
      "\n",
      "1*6=6\t2*6=12\t3*6=18\t4*6=24\t5*6=30\t6*6=36\t\n",
      "\n",
      "1*7=7\t2*7=14\t3*7=21\t4*7=28\t5*7=35\t6*7=42\t7*7=49\t\n",
      "\n",
      "1*8=8\t2*8=16\t3*8=24\t4*8=32\t5*8=40\t6*8=48\t7*8=56\t8*8=64\t\n",
      "\n",
      "1*9=9\t2*9=18\t3*9=27\t4*9=36\t5*9=45\t6*9=54\t7*9=63\t8*9=72\t9*9=81\t\n",
      "\n"
     ]
    }
   ],
   "source": [
    "JiuJiuKouJue()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 案例一:编写函数求三角形的面积"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "请输入三角形的底边a=2\n",
      "请输入三角形的高h=8\n",
      "此三角形的面积S=8.00\n"
     ]
    }
   ],
   "source": [
    "def S(a,h):\n",
    "    S = 1/2*a*h\n",
    "    return S\n",
    "aa = float(input ('请输入三角形的底边a='))\n",
    "hh = float(input('请输入三角形的高h='))\n",
    "area = S(aa,hh)\n",
    "print('此三角形的面积S={:.2f}'.format(area))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3、函数的嵌套"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 案例二:P112、例5—1 求(1!)**+(2!)**+...+(6!)**之和"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前6个整数的阶乘之和: 533417\n"
     ]
    }
   ],
   "source": [
    "def main():\n",
    "    sumFac = 0\n",
    "    i=1\n",
    "    while i<=6:\n",
    "        sumFac=sumFac+squareFac(i)\n",
    "        i=i+1\n",
    "    print('前6个整数的阶乘之和:',sumFac)\n",
    "def squareFac(n):\n",
    "    return factorial(n)*factorial(n)\n",
    "def factorial(k):\n",
    "    fac = 1\n",
    "    i = 1\n",
    "    while i<=k:\n",
    "        fac=fac*i\n",
    "        i=i+1\n",
    "    return fac\n",
    "main()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4、函数的递归"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 案例三:P113、例5—2 通过函数的递归调用就n!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "请输入一个整数n:9\n",
      "362880\n"
     ]
    }
   ],
   "source": [
    "def main():\n",
    "    n = int(input('请输入一个整数n:'))\n",
    "    if n<0:\n",
    "        print('输入错误!')\n",
    "    else:\n",
    "        print (factorial(n))\n",
    "def factorial (k):\n",
    "    if (k==1 | k==1):\n",
    "        return 1\n",
    "    else:\n",
    "        return k*factorial(k-1)\n",
    "main()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 案例4:365天,一周(7天)5天工作日,dayup增长1%(+0.01),2天休息,dayup减少1%(-0.01),请问一年之后的进退情况(初始值为1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "一年之后进步了4.72\n"
     ]
    }
   ],
   "source": [
    "dayup = 1\n",
    "for i in range(1,366):\n",
    "    if i%7 not in [0,6]:\n",
    "        dayup = dayup*(1+0.01)\n",
    "    else:\n",
    "        dayup = dayup*(1-0.01)\n",
    "print('一年之后进步了%.2f'%dayup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### dayup保持不变,2天游戏,dayup减少1%(-0.01),三天工作,2天休息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "一年之后进步了1.68\n"
     ]
    }
   ],
   "source": [
    "dayup = 1\n",
    "for i in range(1,366):\n",
    "    if i%7  in [1,2,3]:\n",
    "        dayup = dayup*(1+0.01)\n",
    "    elif i%7 in [0,6]:\n",
    "        dayup = dayup\n",
    "    else:\n",
    "        dayup = dayup*(1-0.01)\n",
    "print('一年之后进步了%.2f'%dayup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 拓展:假如需要一年创收不小于37.78倍(每天创收1%),又想‘三天打鱼两天晒网’,请问每周三天需要创收多大比例?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def DayUp():\n",
    "    dayup = 1\n",
    "    for i in range(1,366):\n",
    "        if i%7  in [1,2,3]:\n",
    "            dayup = dayup*(1+0.01)\n",
    "        elif i%7 in [0,6]:\n",
    "            dayup = dayup\n",
    "        else:\n",
    "            dayup = dayup*(1-0.01)\n",
    "    print('一年之后进步了%.2f'%dayup)\n",
    "    \n",
    "    \n",
    "DayUp()\n"
   ]
  }
 ],
 "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.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值