Python学习笔记(五)——  函数和代码复用

一、函数

  1、函数的定义:函数是一段代码的表示

    

      

   2、函数的调用

    

   3、函数的参数传递

    3.1 参数个数

    

    

             

    

    

       3.2 参数传递的两种方式:按照位置或名称方式传递

      

    4、函数的返回值

     

    5、局部变量和全局变量

    

    例子:

    

      5.1 局部变量和全局变量是不同变量

        

        例子:

        

                            

      5.2 局部变量为组合数据类型且未创建,等同于全局变量

        

            

        

     6、lambda 函数

      6.1 lambda 函数概述  

        

      6.2 格式

            

      6.3 例子

        

      6.4 注意事项

        

二、函数递归

  1、定义:函数定义中调用自身的方式

  2、函数递归的调用过程

    2.1 递归的实现:函数 + 分支语句

      

    2.2 递归的调用过程图示

      

      

   3、函数递归实例解析

    3.1 字符串反转

      

    3.2 斐波拉契数列

      

               

    3.3 汉诺塔

      

      

 三、函数应用场景

  1、七段数码管绘制时间

    1.1 绘制样式

      

    1.2  基本思路

      

       1.3  绘制单个数码管

      

      代码:       

print()

     1.4 获取一段数字,绘制多个数码管

      

      代码:  

      

       1.5 获取当前系统时间,绘制对应的数码管

        1.5.1 增加七段数码管之间的线条间隔

          

        代码:     

#绘制数码管间隔
def drawGap():
    turtle.penup()
    turtle.fd(5)

        1.5.2 获取当前时间

        

      代码:   

  1. def drawDate(date):
  2.     turtle.pencolor("red")
  3.     for in date:
  4.         if ='-':
  5.             turtle.write('年',font=("Arial"18"normal"))
  6.             turtle.pencolor("green")
  7.             turtle.fd(40)
  8.         elif ='=':
  9.             turtle.write('月',font=("Arial"18"normal"))
  10.             turtle.pencolor("blue")
  11.             turtle.fd(40)
  12.         elif ='+':
  13.             turtle.write('日',font=("Arial"18"normal"))
  14.         else:
  15.             drawDigit(eval(i))

      

      

     1.6 七段数码管完整代码:     

  1. #SevenDigitsDrawV2.py
  2. import turtle, time
  3. def drawGap(): #绘制数码管间隔
  4.     turtle.penup()
  5.     turtle.fd(5)
  6. def drawLine(draw):   #绘制单段数码管
  7.     drawGap()
  8.     turtle.pendown() if draw else turtle.penup()
  9.     turtle.fd(40)
  10.     drawGap()
  11.     turtle.right(90)
  12. def drawDigit(d): #根据数字绘制七段数码管
  13.     drawLine(Trueif in [2,3,4,5,6,8,9else drawLine(False)
  14.     drawLine(Trueif in [0,1,3,4,5,6,7,8,9else drawLine(False)
  15.     drawLine(Trueif in [0,2,3,5,6,8,9else drawLine(False)
  16.     drawLine(Trueif in [0,2,6,8else drawLine(False)
  17.     turtle.left(90)
  18.     drawLine(Trueif in [0,4,5,6,8,9else drawLine(False)
  19.     drawLine(Trueif in [0,2,3,5,6,7,8,9else drawLine(False)
  20.     drawLine(Trueif in [0,1,2,3,4,7,8,9else drawLine(False)
  21.     turtle.left(180)
  22.     turtle.penup()
  23.     turtle.fd(20)
  24. def drawDate(date):
  25.     turtle.pencolor("red")
  26.     for in date:
  27.         if ='-':
  28.             turtle.write('年',font=("Arial"18"normal"))
  29.             turtle.pencolor("green")
  30.             turtle.fd(40)
  31.         elif ='=':
  32.             turtle.write('月',font=("Arial"18"normal"))
  33.             turtle.pencolor("blue")
  34.             turtle.fd(40)
  35.         elif ='+':
  36.             turtle.write('日',font=("Arial"18"normal"))
  37.         else:
  38.             drawDigit(eval(i))
  39. def main():
  40.     turtle.setup(800350200200)
  41.     turtle.penup()
  42.     turtle.fd(-350)
  43.     turtle.pensize(5)
  44. #    drawDate('2018-10=10+')
  45.     drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
  46.     turtle.hideturtle()
  47.     turtle.done()
  48. main()

  2、科赫雪花小包裹

    2.1 问题描述

       

    2.2 绘制n阶科赫曲线

       代码:   

  1. #KochDrawV1.py
  2. import turtle
  3. def koch(size, n):
  4.     if =0:
  5.         turtle.fd(size)
  6.     else:
  7.         for angle in [060-12060]:
  8.            turtle.left(angle)
  9.            koch(size/3, n-1)
  10. def main():
  11.     turtle.setup(800,400)
  12.     turtle.penup()
  13.     turtle.goto(-300-50)
  14.     turtle.pendown()
  15.     turtle.pensize(2)
  16.     koch(600,3)     # 0阶科赫曲线长度,阶数
  17.     turtle.hideturtle()
  18. main()

        

     2.3 科赫曲线到科赫雪花的绘制

      代码:  

import turtle
def koch(size, n):
    if n == 0:
        turtle.fd(size)
    else:
        for angle in [0, 60, -120, 60]:
           turtle.left(angle)
           koch(size/3, n-1)
def main():
    turtle.setup(600,600)
    turtle.penup()
    turtle.goto(-200, 100)
    turtle.pendown()
    turtle.pensize(2)
    level = 3      # 3阶科赫雪花,阶数
    koch(400,level)
    turtle.right(120)
    koch(400,level)
    turtle.right(120)
    koch(400,level)
    turtle.hideturtle()
main()

    

      运行结果:

      

      

       

    

    

    

      

 

01-19 06:31