python的turtle绘图

turtle绘图

今天学到了python的turtle绘图,感觉还蛮好玩的。在知乎python123上看到很多大佬的绘图,感觉很有意思,看到有些结合了random库、time库画出来的二叉树很美、很神奇。

在这里插入图片描述

我也搜到很多turtle绘图的教程,比如CSDN上发的Python海龟绘图法详细介绍,结果发现CSDN这篇文章是从官网turtle库中文介绍搬运而来,直接去看官网文档就好了。
官网上说:“海龟绘图很适合用来引导孩子学习编程。…… 最初来自于 Logo 编程语言。” turtle库画图虽然上手简单,但是也不要小看了,结合一些其他库(random库、time库)和函数递归就能画出很复杂炫酷的图。

python自带了一些turtle画图的demo在Command Prompt敲下面的代码就可以打开啦,这里有别人放的demo

python -m turtledemo

这里也可以演示单独的脚本,就可以直接看到画出的图,bytedesign是演示脚本名,可以根据文档中提供的清单换成其他的demo。这些demo有些还挺复杂的,融合python其他的知识,乍一看可能看不懂,先mark一下。

python -m turtledemo.bytedesign
名称描述相关特性
bytedesign复杂的传统海龟绘图模式tracer(), delay, update()
chaos绘制 Verhulst 动态模型,演示通过计算机的运算可能会生成令人惊叹的结果世界坐标系
clock绘制模拟时钟显示本机的当前时间海龟作为表针, ontimer
colormixer试验 r, g, b 颜色模式ondrag() 当鼠标拖动
forest绘制 3 棵广度优先树随机化
fractalcurves绘制 Hilbert & Koch 曲线递归
lindenmayer文化数学 (印度装饰艺术)L-系统
minimal_hanoi汉诺塔矩形海龟作为汉诺盘 (shape, shapesize)
nim玩经典的“尼姆”游戏,开始时有三堆小棒,与电脑对战。海龟作为小棒,事件驱动 (鼠标, 键盘)
paint超极简主义绘画程序onclick() 当鼠标点击
peace初级技巧海龟: 外观与动画
penrose非周期性地使用风筝和飞镖形状铺满平面stamp() 印章
planet_and_moon模拟引力系统复合开关, Vec2D
round_dance两两相对并不断旋转舞蹈的海龟复合形状, clone shapesize, tilt, get_shapepoly, update
sorting_animate动态演示不同的排序方法简单对齐, 随机化
tree一棵 (图形化的) 广度优先树 (使用生成器)clone() 克隆
two_canvases简单设计两块画布上的海龟
wikipedia一个来自介绍海龟绘图的维基百科文章的图案clone(), undo()
yinyang另一个初级示例circle() 画圆

colormixer

这是demo中的 colormixer,用来试验 r, g, b 颜色模式 结合了ondrag() 实现鼠标拖动的交互功能,蛮神奇的!!
在这里插入图片描述

还有一些简单好玩的小例子我放在下面,下面这几个是看了嵩天老师python课程的初学者就能搞定的,上面那些可能还要琢磨琢磨,我暂时就搞不定。

粉色小爱心

from turtle import *
color('pink')
begin_fill()
left(135)
fd(100)
right(180)
circle(50,-180)
left(90)
circle(50,-180)
right(180)
fd(100)
end_fill()
hideturtle()
done()

在这里插入图片描述
七段数码管绘制
嵩天老师七段数码管绘制的案例,涉及到函数的使用、time库、turtle库的知识,是个蛮有意思的小案例。
在这里插入图片描述
科赫雪花绘制
涉及函数递归的思想和方法,就是一个函数调用自己,好像很简单,但是又有点绕 = = 汉诺塔的递归方法求解就让人摸不着头脑
在这里插入图片描述
树的代码

来源于知乎,没明白原答案中turtle为啥import两次,这里改动了一下,还是可以正常运行。


import random
import turtle as t

 # 树的主体
def tree(branchLen):
    if branchLen > 3:
        if branchLen < 8:     # 最短的树枝部分
            if random.randint(0, 1) == 0:
                t.color('snow')
            else:
                t.color('lightcoral')   # 珊瑚色
            t.pensize(branchLen / 2)
        elif 8 <= branchLen <= 12:
            if random.randint(0, 2) == 0:
                t.color('snow')
            else:
                t.color('lightcoral')
            t.pensize(branchLen / 3)
        else:  # 表示树干部分 >12
            t.color('sienna')  # 赭色
            t.pensize(branchLen / 10)

        t.forward(branchLen)
        a = 1.5 * random.random()
        t.right(20*a)
        b = 1.5 * random.random()
        tree(branchLen-10*b)  # 递归 树枝变细
        t.left(40*a)
        tree(branchLen-10*b)
        t.right(20*a)
        t.up()
        t.backward(branchLen)
        t.down()


def petal(m):  # 树下花瓣
    for i in range(m):
        a = 200 - 400 * random.random()
        b = 10 - 20 * random.random()
        t.up()
        t.forward(b)
        t.left(90)
        t.forward(a)
        t.down()
        t.color("lightcoral")
        t.circle(1)
        t.up()
        t.backward(a)
        t.right(90)
        t.backward(b)


def main():
    t.getscreen().tracer(5, 0)
    t.screensize(bg='wheat')
    t.left(90)
    t.up()
    t.backward(150)
    t.down()
    t.color('sienna')
    tree(60)
    petal(100)
    t.ht()
    t.exitonclick()


main()

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值