一般来说,讲Python中的循环,会从用turtle画正方形开始,或者画花儿开始,那么有没有更加有趣好玩的例子呢?本文讲解了用turtle绘制简单的视错觉图案,并介绍了视错觉在生活中的应用,可以帮你正确的搭配衣服哦。
形状错觉
正方形?还是圆形?注意文中的命令我都使用了缩写,相信教过logo的老师都懂。
以正方形为例
很多情况下,我们会先用8条命令画一个正方形,代码如下:
from turtle import *
fd(100)
rt(90)
fd(100)
rt(90)
fd(100)
rt(90)
fd(100)
rt(90)
然后我们用for循环简化,代码如下:
from turtle import *
speed(0)
for i in range(4):
fd(100)
rt(90)
运行结果
这里存在的问题是,引入for循环,range没有讲,只好笼统的告诉学生,想要循环几次,就在range里写几,照葫芦画瓢。因为这里还没有将变量,所以讲while的话会更麻烦一些。然后就可以将定义函数了,其实函数的定义不一定放到变量、循环判断后面讲,我们把函数看做是命令的集合,就像是刷牙包含很多不同的动作一样,学生照样是可以理解的不是吗?
from turtle import *
speed(0)
def square():
for i in range(4):
fd(100)
rt(90)
接下来就可以用循环调用这个函数了,这样可以避免循环嵌套,代码如下:
正方形的旋转
又或者,在讲for的时候为了不讲函数,绘制正方形可以不用for表示:
from turtle import *
speed(0)
for i in range(12):
fd(100)
rt(90)
fd(100)
rt(90)
fd(100)
rt(90)
fd(100)
rt(90)
rt(30)
用这种方法同样可以绘制出相同的图案,理解并不难,用一正方形的纸作为实物演示都是可以的。
以圆为例子+++++++
告诉学生,turtle模块中有一个circle命令可以以特定的直径画圆,代码如下:
from turtle import *
speed(0)
circle(100)
然后就可以用for循环画圆了:
from turtle import *
speed(0)
for i in range(18):
rt(20)
circle(100)
运行程序,结果如图所示:
花
比绘制正方形有趣一点。
螺旋正方形
from turtle import *
speed(0)
for i in range(360):
fd(i)
rt(91)
运行程序,结果如下图:
螺旋正方形
当然后面学生学了模运算或者列表,还可以给图形上色,在《教孩子学编程》一书中就是用列表保存不同的颜色,然后绘制不同颜色的螺旋正方形。
修改角度
或者可以修改每次循环右转的角度值,形成不同的图形,比如每次循环右转61°:
旋转61°
旋转21°
旋转21°
这很好玩,然后就没什么了,这里绘制的图形都是用基本图形的平移变换实现的,小学数学已经讲解了这方面的内容,其实合理利用平移变换的思路还可以绘制出弧形,在绘制饼图的时候比较有帮助。
这样绘制出的图形很好看,然后也就没有什么了,螺旋正方形的图形还有点不好跟学生解释的,而且这些旋转形成的图形,很多学生都是见过的,所以,我们来想一些更有趣的例子。
当然除了我们设计的例子,学生完全可以把turtle当做普通的画笔,然后一点点的尝试绘制不规则的图形,比如有人绘制出了玫瑰花:
玫瑰花
视错觉
我们知道,熟练掌握编程后,编程可以是创作和表达的工具,我们看书的时候,也可以用编程验证我们的想法,比如我们在阅读《平面构成》一书的时候就想,我能不能把这里面提到的东东用编程来表达呢,点线面的排列尤其是规则的排列,完全可以用循环表示。
平面构成
里面有很多有趣的视错觉图案是用非常简单的方法画出来的。
形状错觉
形状错觉
文章开头的图就是一个很经典的例子,你扪心自问,是不是非常不像是正方形和圆形呢,然而这时货真价实的正方形和圆形,这个时候冲突产生了,我们就可以带领学生通过编程来验证到是我们看错了,还是图画错了。
这里绘制的程序就很简单了,你看有规律的斜线的绘制,就是从中心点到边界上的点画直线,就不是单纯的运用循环了,当然了,要绘制这样的图形,肯定是以前面的指示单为基础了,通过绘制这个图形,学生能够更深刻的领会,哪些是需要重复的部分,turtle没有line函数,在没有讲goto函数的情况下,我们就用前进命令fd和后退命令bk好了。
我们可以让学生先尝试绘制放射状的直线:
from turtle import *
speed(0)
for i in range(36):
fd(500)
bk(500)
rt(10)
当然了,无论是这里,还是前面,旋转的次数和旋转角度的乘积都刻意的是360°,开Python一般是小学高年级的学生,理解起来并没有困难。
运行程序,结果如下图:
放射线
绘制原理
h
然后,我们就需要在不同的位置绘制正方形和圆形了,这里就可以引入抬笔penup命令和落笔pendown命令了,当然goto命令也是可以引入的,相比如forward和backward加上旋转命令left和right,goto的话,需要引入的新知识点比较多,而不用goto的话,学生需要靠旋转,大家觉得那个更好呢?欢迎大家把自己的想法留言。
绘制正方形
在窗口左侧绘制正方形,代码如下:
from turtle import *
speed(0)
for i in range(36):
fd(500)
bk(500)
rt(10)
pu() # penup的缩写
bk(200)
pd() # pendown的缩写
lt(90)
fd(75)
rt(90)
for i in range(4):
fd(150)
rt(90)
ht() # 隐藏乌龟
运行程序结果如下:
正方形
绘制圆形
然后在右侧画一个圆,要提醒学生注意circle命令绘制圆形并不以所在的位置为圆心的。
from turtle import *
speed(0)
for i in range(36):
fd(500)
bk(500)
rt(10)
pu() # penup的缩写
bk(200)
pd() # pendown的缩写
lt(90)
fd(75)
rt(90)
for i in range(4):
fd(150)
rt(90)
ht() # 隐藏乌龟
pu()
fd(320)
rt(90)
fd(150)
lt(90)
pd()
circle(75)
程序的运行结果如下图:
绘制圆
学生绘制完之后,亲身验证了这种形状错觉,对于形状错觉和for循环的运用,已经pd、fd、rt和lt都有了比较详细的掌握。
注意,在绘制完背景的放射线和正方形,我都用pd、fd、rt和lt调整了乌龟的位置,路线如下图:
绘制
小结
实际上,设计课程的时候,我们可以先确定一个大的主题或者概念,然后再考虑用程序实现,比如这里的视错觉,通过本节课学生既可以掌握for循环的使用,又加深了对于视错觉的理解,并通过动手(编程)实际验证了视错觉。
拓展
其余的好玩的视错觉还有很多,比如:
线条弯曲错觉
这个可以用循环绘制,不过一节课的话,估计要相对比较优秀的学生才可以绘制出来呢。
缪勒-莱伊尔错觉
这个错觉的话,其实不用循环就可以的。
平行错觉
像这种平行错觉也很容易用循环绘制的。
卡搭二维码
茶叶
牙膏
要知道大红也好,红配绿也好,都是很俗的好嘛!
衣服
原理
瘦
image.png
image.png
衣服能让你看起来更高?加一个帽子的差别有多大?
image.png
image.png
更多原文请直接看知乎上相关问题,长按二维码就可以访问了:
二维码
如果觉得有帮助可以点可以分享给其他人
更多推荐
pythonturtle嵌套循环_给小朋友讲Python循环的一些有趣好玩的例子更有超级实用的穿搭技巧等着你哦!...
发布评论