当前位置:首页>python>Python教程(20)turtle库综合案例:五彩斑斓写意画

Python教程(20)turtle库综合案例:五彩斑斓写意画

  • 2026-10-11 06:03:59
Python教程(20)turtle库综合案例:五彩斑斓写意画

你好,我是雨霖八珞,同名B站UP主。关注合集不迷路。以下内容为个人教学,真诚分享,欢迎交流。

在前面的海龟库学习中,我们知道了:

  • turtle.fd() 向前走

  • turtle.bk() 向后走

  • turtle.right() 右转

  • turtle.left() 左转

如果让小海龟在画布上任意直走,然后转弯,再直走,再转弯……循环下去,会发生什么?

脑补一下,会出现什么情况?

从随机漫步说起

如果直走的步数和转弯的角度都是固定的,比如每次都是往前走50步,每次都右转90度,那就画出一个正方形,我们已经会了。

但如果步数和角度都是随机的呢?

运行后,你会发现小海龟像喝醉了一样,在画布上走出了一条蜿蜒曲折的线。每走一步,方向都在变,步长也在变。

最后形成了一幅抽象写意画。

这就是五彩斑斓写意画的雏形。

补充说明:因为每次都需要循环1000次,要等着程序全部运行完看效果非常浪费时间,所以可以加上这两行语句。

解释:

tracer 的默认参数是 True,也就是每执行一条绘图指令,就立刻在屏幕上显示出来。这样我们能看见每一步的绘制过程

tracer(False) 相当于告诉海龟:“你先别急着画,等全部画完了再一起显示。”这样就能瞬间看到完整效果,不用盯着看1000步慢慢画。

用了 tracer(False) 之后,最后一定要加一句 turtle.update(),否则画面不会显示。

如何画曲线

前面是让海龟走直线,显得非常生硬,那么如何让海龟走出更加柔和的曲线呢?

先来看下面这个程序

运行效果如下图所示:

每一步只走2个像素,只转1度,360步之后正好走完一圈。你能看出它是由360条直线组成的吗?看不出来。因为线段太短了,拼接在一起就变成了圆。

曲线是怎么画出来的?本质上就是用无数条极短的直线拼出来的。

当你把每条线段画得足够短、每次转角足够小时,看起来就是一条光滑的曲线。

曲线版的写意画

将下面的程序代码
改成👇
主要有三个变化:
  • 每次走的步数变小了,从[1,50]的随机数变成[1,3]的随机数
  • 每次随机转的角度变大了,可以左右转也能掉头
  • 循环次数变得多得多了(因为每次只走1~3步,需要循环更多次)
补充说明turtle.right(angle)
  • 当angle的范围在(0,180],表示海龟向右转angle°
  • 当angle的范围在[-180,0),表示海龟向左转angle°
  • 当angle的值恰好为0时,表示直走,不转了
程序运行后效果如下:(是不是更加抽象派了?)

细心的你,会发现还有需要解决的问题

  • 怎么没有铺满屏幕,感觉没有循环50万次吧

  • 怎么全是黑色,不是说好的五彩斑斓呢?

下面,我们逐一来解决

为什么没有铺满屏幕

细心的你可能会发现:程序运行了很久,但画面并没有铺满整个屏幕 ——好像都集中在一个区域,四周空荡荡的。

原因很简单: 海龟有时走出屏幕之外了。它可能在屏幕外面走了很久,然后转着转着又回来了。在屏幕外面的内容是看不见的,所以那些区域永远是空的。

怎么解决呢?

可以设置一个安全区(显示范围),当海龟即将超出这个范围时,让它立马回到原点,再接着画。

这就需要用到if 语句来判断海龟是否在安全区了。

将下面的程序代码

改成👇

主要有三个变化:

  • 增加了设置窗口大小的语句,如①所示,这就是显示范围

  • 增加了设置边界语句,如②所示,定义安全区的边界,比窗口略小,留出余量

  • 增加判断海龟是否超出安全区的语句,如③所示,超出则回到原点

获取海龟当前的位置坐标

  • turtle.xcor():返回海龟当前的 x 坐标(水平位置)

  • turtle.ycor():返回海龟当前的 y 坐标(垂直位置)

画笔的抬起和落下

  • turtle.up()     # 抬笔

  • turtle.down()  # 落笔

程序运行后,如下图所示,是不是显示的内容变多了?

真正的五彩斑斓写意画

现在只差最后一步了,把黑色变成五彩斑斓。
将下面的程序代码
改成👇
主要对颜色进行设置:
设置背景为黑色(效果更出彩),设置颜色列表,随机抽一个颜色进入循环,每当海龟要返回原点前,都要再随机捞颜色画画。
程序运行后,效果如下图所示:(每次都会不一样)
可能喜欢动脑筋的小伙伴觉得程序不对,为什么不能这样写呢?
每次进入循环,都捞颜色,这样颜色不是更丰富吗?
我帮你们试过了,运行后很长时间都出不来效果。因为这个运算量很大,和电脑的运行速度也有关系。如果愿意挑战的伙伴可以自己试试。
从固定步长到随机漫步,从直线到曲线,从单色到五彩斑斓 
 我们就这样一步步把简单的小海龟,
变成了一个能画出抽象写意画的“数字画家”。
是不是很有趣?
本篇文章的完整代码比较长,提供下载。
可以关注本公众号,在后台回复关键词:写意画,即可获取下载链接。

本公众号内容均为原创。如需转载或引用,请先联系我。谢谢你的尊重。

觉得不错的话,伙伴们记得关注、在看、转发和点赞哈!

最新文章

随机文章