使用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 相关文章推荐
Python正则表达式匹配HTML页面编码
Apr 08 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
在Python中使用Neo4j的方法
Mar 14 Python
python绘图模块matplotlib示例详解
Jul 26 Python
python中open函数的基本用法示例
Sep 07 Python
python 6.7 编写printTable()函数表格打印(完整代码)
Mar 25 Python
Python openpyxl 插入折线图实例
Apr 17 Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 Python
Python实现快速大文件比较代码解析
Sep 04 Python
通过实例了解python__slots__使用方法
Sep 14 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
Python实现查询剪贴板自动匹配信息的思路详解
Jul 09 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
给多个地址发邮件的类
2006/10/09 PHP
php 设计模式之 工厂模式
2008/12/19 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
Node 代理访问的实现
2019/09/19 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
Python面向对象类的继承实例详解
2018/06/27 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
提高EJB性能都有哪些技巧
2012/03/25 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
学生党员思想汇报
2013/12/28 职场文书
社区中秋节活动方案
2014/01/29 职场文书
欢迎领导标语
2014/06/27 职场文书
小学语文教研活动总结
2014/07/01 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
开会通知
2015/04/20 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
公积金贷款承诺书
2015/04/30 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python
简单介绍Python的第三方库yaml
2021/06/18 Python
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS