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

(课程相关的所有资料代码,已上传至CSDN,请自行下载

https://download.csdn.net/download/qq_34243930/10764180 )

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

• 案例描述

• 案例分析

• 上机实验

• turtle库

注意:调用turtle.exitonclick图形窗口才会停在那里!!!

向右转60度是直走方向的右手边右转60度!

关于五角星的角度

则应该右拐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()

代码二:简化版代码

"""

作者: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()

• 怎么绘制重复不同大小的五角星?

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

关于代码,我一开始犯错误了,我没有吧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()

**代码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()

详细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()

对比图:

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

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

自己调用自己——>这是递归!

要注意终止条件的构建,否则递归无法正常返回结果

又犯错误了我,我一开始没加终止条件 if size <= 100:,结果它一直在画五角星

recursive adj. 递归的;循环的

"""

作者: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()

递归函数

编写递归函数必备两条因素为:重复单元、停止条件

(开始条件、参数不是必备因素)

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

分形树绘制

• 案例描述

• 案例分析

• 分形树绘制分析

确定长度和角度:

分形树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()

分形树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()

分形树3.0

起始设置为100

分形树变很大,超出了窗体能见范围

修改:把开始落笔处往下移

"""

作者: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()

思考:

• 判断如果是树枝末端,将画笔颜色更改为绿色,绘制出树叶的效果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值