python的turtle绘图

turtle绘图

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

python的turtle绘图_第1张图片

我也搜到很多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的turtle绘图_第2张图片

还有一些简单好玩的小例子我放在下面,下面这几个是看了嵩天老师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()

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

来源于知乎,没明白原答案中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()

你可能感兴趣的:(python,python)