使用Python的Turtle库绘制森林的实例


Posted in Python onDecember 18, 2019

这是由一个小作业引发的对Python的Turtle库的学习

下面是官方手册:

PS:还尝试了用pip安装jupyter等,发现没有VS2008的支持无法编译一部分文件,改变python的编译器也没效果,只好放弃 = =(反正不是自己电脑hhh)

2.Turtle绘制森林代码

这段代码结合了随机函数来使森林更多样化,同时设置了颜色的渐变。几乎每句都有注释,还有不懂的函数可以到官方手册查

另外老师的示例中的yield语句和pass语句的用法非常精髓,可以再研究一下

# -*- coding: utf-8 -*-
from turtle import Turtle, mainloop
from time import clock
import random
 
def tree(plist, l, a, f):
 """ 
 plist 是turtle箭头的列表
 l 是初始树枝的长度
 a 是两根树枝之间夹角的一半
 f 是每层树枝之间长度的因数.
 """
 r = random.randint(2,3)
 if l > 3:
  lst = []
  for p in plist:
   if l < 50:
    p.color(34,int(200-3*l),34)
    p.pensize(3)
   p.forward(l)
   #沿当前方向前进l
   q = p.clone()
   #创建一个副本
   if(r==3):
    m = p.clone()
    m.left(random.randint(-5,5))
    lst.append(m)
   p.left(a+random.randint(-10,10))
   #原本左转a度
   q.right(a+random.randint(-10,10))
   #副本右转a度
   lst.append(p)
   lst.append(q)
   #将p,q分别加到列表后
  for x in tree(lst, l*f, a, f):
   yield None
def maketree(l,a,f,x,y):
 '''这个函数用来初始化箭头的参数
 l 是初始树枝的长度
 a 是两根树枝之间夹角的一半
 f 是每层树枝之间长度的因数
 x和y是树根位置,(0,0)在屏幕中心
 '''
 p = Turtle()    
 #创建一个Turtle类的对象
 p.getscreen().colormode(255)
 # 获得屏幕句柄,可以对其进行操作
 #颜色模式改为255,可以使用RGB颜色
 p.pencolor(139,69,19)
 #p.color('brown')   
 #Turtle的颜色为棕色
 p.pensize(6)
 #笔的大小为6
 p.setundobuffer(None)  
 #不设置撤销缓冲区
 p.hideturtle()    
 #隐藏箭头
 p.speed(0)     
 #设置速度,0-10,0是最快的
 p.getscreen().tracer(5000,0)
 # 获得屏幕句柄,可以对其进行操作
 # 每5000次操作将屏幕刷新,延时为0
 p.left(90)
 # 将Turtle的前进方向左转90度,使方向竖直向上
 p.penup()
 # 把笔抬起来
 p.goto(x,y)
 #p.forward(-210)
 # 笔向前移动-210个单位(向后移动210个像素)
 p.pendown()
 # 把笔放下
 #这三条语句是一个组合相当于先把笔收起来再移动到指定位置,再把笔放下开始画
 #否则turtle一移动就会自动的把线画出来
 t = tree([p], l, a, f)
 for x in t:
  pass
 #print(len(p.getscreen().turtles()))
 #输出箭头总数
def main():
 a=clock()
 maketree(100,35,0.6375,-100,-210)
 maketree(110,60,0.67,-400,-100)
 maketree(120,30,0.6,500,-160)
 maketree(145,45,0.65,150,-80)
 b=clock()
 return "done: %.2f sec." % (b-a)
if __name__ == "__main__":
 msg = main()
 print(msg)
 mainloop()
 # 确保不会自动退出

使用Python的Turtle库绘制森林的实例

以上这篇使用Python的Turtle库绘制森林的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
基于进程内通讯的python聊天室实现方法
Jun 28 Python
Python实现快速多线程ping的方法
Jul 15 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
利用python画一颗心的方法示例
Jan 31 Python
Django实现简单分页功能的方法详解
Dec 05 Python
对Django外键关系的描述
Jul 26 Python
Django的Modelforms用法简介
Jul 27 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
python制作英语翻译小工具代码实例
Sep 09 Python
python中的django是做什么的
Jul 31 Python
python实现进度条的多种实现
Apr 29 Python
python3 requests库实现多图片爬取教程
Dec 18 #Python
在notepad++中实现直接运行python代码
Dec 18 #Python
简单了解python装饰器原理及使用方法
Dec 18 #Python
修改Pandas的行或列的名字(重命名)
Dec 18 #Python
Python3直接爬取图片URL并保存示例
Dec 18 #Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 #Python
Python谱减法语音降噪实例
Dec 18 #Python
You might like
php下过滤HTML代码的函数
2007/12/10 PHP
php自定义函数之递归删除文件及目录
2010/08/08 PHP
PHP调用JAVA的WebService简单实例
2014/03/11 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
微信小程序实现表单校验功能
2020/03/30 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
Python中实现三目运算的方法
2015/06/21 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
python调用摄像头拍摄数据集
2019/06/01 Python
解决yum对python依赖版本问题
2019/07/05 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
护士自荐信范文
2013/12/15 职场文书
音乐教学反思
2014/02/02 职场文书
社区敬老月活动总结
2015/05/07 职场文书
家属联谊会致辞
2015/07/31 职场文书
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android