Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件

(课程相关的所有资料代码,已上传至CSDN,请自行下载
https://download.csdn.net/download/qq_34243930/10764180 )
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第1张图片

分形树绘制 1.0–五角星的绘制

• 案例描述
• 案例分析
• 上机实验
turtle库
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第2张图片
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第3张图片
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第4张图片
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第5张图片

Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第6张图片
注意:调用turtle.exitonclick图形窗口才会停在那里!!!
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第7张图片
向右转60度是直走方向的右手边右转60度!
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第8张图片

关于五角星的角度

Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第9张图片
则应该右拐180-36=144度
代码一:

"""
    作者:xpt
    功能:五角星(pentagram)的绘制
    版本号:1.0
    日期:08/11/2018
"""

import turtle


def main():
    """
    主函数
    """
    # 第1条边
    turtle.forward(100)
    # 第2条边
    turtle.right(144)
    turtle.forward(100)
    # 第3条边
    turtle.right(144)
    turtle.forward(100)
    # 第4条边
    turtle.right(144)
    turtle.forward(100)
    # 第5条边
    turtle.right(144)
    turtle.forward(100)

    turtle.exitonclick()


if __name__ == '__main__':
    main()

Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第10张图片
代码二:简化版代码

"""
    作者:xpt
    功能:五角星(pentagram)的绘制
    版本号:1.0
    日期:08/11/2018
"""

import turtle


def main():
    """
    主函数
    """
    # 计数器
    count = 1
    while count <= 5:
        turtle.forward(100)
        turtle.right(144)
        count = count+1

    turtle.exitonclick()


if __name__ == '__main__':
    main()

Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第11张图片
• 怎么绘制重复不同大小的五角星?

分形树绘制2.0–重复不同大小五角星的绘制

Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第12张图片

Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第13张图片
关于代码,我一开始犯错误了,我没有吧count放进循环里!初始条件都没放进循环里,真是欠打!
代码1:

"""
    作者:xpt
    功能:五角星(pentagram)的绘制
    版本号:2.0
    日期:11/11/2018
    新增功能:加入循环操作绘制重复不同大小的图形
"""

import turtle


def main():
    """
    主函数
    """

    size = 50
    while size <= 100:
        # 计数器
        count = 1

        while count <= 5:
            turtle.forward(size)
            turtle.right(144)
            count = count+1

        size = size + 10
    turtle.exitonclick()


if __name__ == '__main__':
    main()


Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第14张图片

**代码2:**封装进函数使程序更简洁

"""
    作者:xpt
    功能:五角星(pentagram)的绘制
    版本号:2.0
    日期:11/11/2018
    新增功能:加入循环操作绘制重复不同大小的图形
"""

import turtle


def draw_pentagram(size):
    """
    绘制五角星
    """
    # 计数器
    count = 1
    while count <= 5:
        turtle.forward(size)
        turtle.right(144)
        count = count + 1


def main():
    """
    主函数
    """
    size = 50
    while size <= 100:
        # 调用函数
        draw_pentagram(size)
        size = size + 10

    turtle.exitonclick()


if __name__ == '__main__':
    main()


Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第15张图片
详细API请参考:https://docs.python.org/3.0/library/turtle.html

设置turtle一些参数:

注意! 颜色传进去的是字符串
注意!设置语句写在主函数main里

"""
    作者:xpt
    功能:五角星(pentagram)的绘制
    版本号:2.0
    日期:11/11/2018
    新增功能:加入循环操作绘制重复不同大小的图形
"""

import turtle


def draw_pentagram(size):
    """
    绘制五角星
    """
    # 计数器
    count = 1
    while count <= 5:
        turtle.forward(size)
        turtle.right(144)
        count = count + 1


def main():
    """
    主函数
    """
    # 抬笔
    turtle.penup()
    # 笔往左移动300像素
    turtle.backward(300)
    # 落笔
    turtle.pendown()
    # 更改宽度
    turtle.pensize(2)
    # 更改颜色
    turtle.pencolor('red')

    size = 50
    while size <= 100:
        # 调用函数
        draw_pentagram(size)
        size = size + 10

    turtle.exitonclick()


if __name__ == '__main__':
    main()


对比图:
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第16张图片

• 能否将循环和函数整合在一个函数中?

分形树绘制 3.0–函数与循环的结合(递归函数)

Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第17张图片
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第18张图片
自己调用自己——>这是递归!

要注意终止条件的构建,否则递归无法正常返回结果
又犯错误了我,我一开始没加终止条件 if size <= 100:,结果它一直在画五角星

recursive adj. 递归的;循环的
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第19张图片

"""
    作者:xpt
    功能:五角星(pentagram)的绘制
    版本号:3.0
    日期:11/11/2018
    新增功能:加入循环操作绘制重复不同大小的图形
    新增功能:函数与循环的结合(递归函数)
"""

import turtle


def draw_recursive_pentagram(size):
    """
    迭代绘制五角星
    """
    # 计数器
    count = 1
    while count <= 5:
        turtle.forward(size)
        turtle.right(144)
        count = count + 1
    # 五角星绘制完成,更新参数
    size += 10
    if size <= 100:
        draw_recursive_pentagram(size)

def main():
    """
    主函数
    """
    # 抬笔
    turtle.penup()
    # 笔往左移动300像素
    turtle.backward(300)
    # 落笔
    turtle.pendown()
    # 更改宽度
    turtle.pensize(2)
    # 更改颜色
    turtle.pencolor('red')

    size = 50

    # 调用函数
    draw_recursive_pentagram(size)

    turtle.exitonclick()


if __name__ == '__main__':
    main()


Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第20张图片

递归函数

编写递归函数必备两条因素为:重复单元、停止条件
(开始条件、参数不是必备因素)
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第21张图片

• 利用递归函数绘制分形树?

分形树绘制

• 案例描述
• 案例分析
• 分形树绘制分析

Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第22张图片
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第23张图片
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第24张图片
确定长度和角度:
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第25张图片

分形树1.0

一定要单步调试感受一下过程!!很重要

"""
    作者:xpt
    功能:利用递归函数绘制分形树
    版本号:1.0
    日期:12/11/2018

"""

import turtle


def draw_branch(branch_length):
    """
    绘制分形树
    """
    if branch_length > 5:
        # 起始树干
        turtle.forward(branch_length)
        # 绘制右侧树枝
        turtle.right(20)
        draw_branch(branch_length-15)
        # 绘制左侧树枝
        turtle.left(40)
        draw_branch(branch_length - 15)
        # 返回树枝节点
        turtle.right(20)
        turtle.backward(branch_length)


def main():
    """
    主函数
    """
    turtle.left(90)
    # 调用函数
    draw_branch(40)
    turtle.exitonclick()


if __name__ == '__main__':
    main()


Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第26张图片

分形树2.0

加入print语句,来帮助你理解程序过程

"""
    作者:xpt
    功能:利用递归函数绘制分形树+输出语句理解程序
    版本号:2.0
    日期:12/11/2018

"""

import turtle


def draw_branch(branch_length):
    """
    绘制分形树
    """
    if branch_length > 5:
        # 起始树干
        turtle.forward(branch_length)
        print('向前',branch_length)
        # 绘制右侧树枝
        turtle.right(20)
        print('右转20度')
        draw_branch(branch_length-15)
        # 绘制左侧树枝
        turtle.left(40)
        print('左转40度')
        draw_branch(branch_length - 15)
        # 返回树枝节点
        turtle.right(20)
        print('右转20度')
        turtle.backward(branch_length)
        print('向后', branch_length)


def main():
    """
    主函数
    """
    turtle.left(90)
    # 调用函数
    draw_branch(40)
    turtle.exitonclick()


if __name__ == '__main__':
    main()


Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第27张图片

分形树3.0

起始设置为100
分形树变很大,超出了窗体能见范围
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第28张图片
修改:把开始落笔处往下移
Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第29张图片

"""
    作者:xpt
    功能:利用递归函数绘制分形树+输出语句理解程序+改变落笔定位
    版本号:3.0
    日期:12/11/2018

"""

import turtle


def draw_branch(branch_length):
    """
    绘制分形树
    """
    if branch_length > 5:
        # 起始树干
        turtle.forward(branch_length)
        print('向前',branch_length)
        # 绘制右侧树枝
        turtle.right(20)
        print('右转20度')
        draw_branch(branch_length-15)
        # 绘制左侧树枝
        turtle.left(40)
        print('左转40度')
        draw_branch(branch_length - 15)
        # 返回树枝节点
        turtle.right(20)
        print('右转20度')
        turtle.backward(branch_length)
        print('向后', branch_length)


def main():
    """
    主函数
    """
    turtle.left(90)
    
    turtle.penup()
    turtle.backward(100)
    turtle.pendown()
    # 调用函数
    draw_branch(100)
    turtle.exitonclick()


if __name__ == '__main__':
    main()


Python入门基础-五、案例2 分形树绘制 #怎么用Python绘制图形#turtle库#递归函数注意终止条件_第30张图片
思考:
• 判断如果是树枝末端,将画笔颜色更改为绿色,绘制出树叶的效果。

你可能感兴趣的:(python,Python入门基础)