点击蓝字 关注我们

哈喽,朋友们,又见面了!今天我们来学习一个超级有趣的Python项目吧?大家肯定都见过中国结,对吧?中国结是我们中国的传统手工艺品,象征着吉祥如意、幸福美满。今天我们就用Python的turtle模块来绘制一个漂亮的中国结吧!

真正的课程导入语:同学们!有没有想过用代码来绘制传统的中国结?今天的Python课堂,我们就要解锁超酷的"中国结绘制"项目!想象一下:你亲手编写的代码,让电脑画出一个红红的、漂亮的中国结,上面还写着"幸福中国结"几个大字。这一切都能在Python里实现!通过这节课,我们会学会turtle绘图、函数调用、循环语句这些核心编程技巧,更能锻炼逻辑思维和创造力。接下来,就让我们一起化身小小程序员,用代码编织属于自己的中国结,看看谁的中国结最漂亮!准备好开启这场编程艺术之旅了吗?现在,Let's code!
我希望你能通过作品效果,总结作品的关键操作步骤。

(扫码体验)
初始化画布和画笔
绘制中国结的核心部分
绘制中国结的小结部分
绘制中国结的外圈装饰
绘制中国结的绳子部分
绘制"幸福中国结"文字
完成绘制并显示结果
你总结的可能跟我不一样,但是大差不差,也许你的更好。
思考时间
turtle模块:Python的绘图模块,就像一支神奇的画笔,可以在屏幕上画出各种图形
中国结绘制逻辑├── 初始化设置│ ├── 导入turtle模块│ ├── 设置画布大小│ ├── 设置画笔粗细│ ├── 设置画笔颜色│ └── 设置绘制速度├── 绘制核心部分(jiexin函数)│ ├── 绘制左上到右下的线条│ └── 绘制右上到左下的线条├── 绘制小结部分(jiexiaoban函数)│ ├── 绘制左上角的小结│ ├── 绘制右上角的小结│ ├── 绘制右下角的小结│ └── 绘制左下角的小结├── 绘制外圈装饰(waiyuan函数)│ ├── 绘制右上角的外圈│ ├── 绘制左上角的外圈│ ├── 绘制右下角的外圈│ └── 绘制左下角的外圈├── 绘制绳子部分(shengzi函数)│ ├── 绘制上面的绳子│ ├── 绘制上面的结│ ├── 绘制下面的绳子│ └── 绘制下面的流苏├── 绘制文字(hanzi函数)│ └── 绘制"幸福中国结"文字└── 主函数调用 ├── 按顺序调用所有函数 ├── 隐藏画笔 └── 显示绘制结果
我希望你在看下面过程之前,你自己能根据作品效果做出至少80%(做不出来的话,你要清楚的知道自己哪里不会哪里不清晰)。这样你在看下面的操作之后才能真正学到一些"知识",不经过自己思考就得到的答案,不深刻,逻辑思维也不会得到提升。
import turtle as t这一行代码是导入Python的turtle模块,并且给它起了一个简称"t",这样我们后面使用turtle的功能时,就可以直接用"t"来代替,更方便。
defgoto(x, y):t.penup()t.goto(x, y)t.pendown()
这个函数的作用是让画笔移动到指定的坐标位置(x, y),而不在移动过程中画线。
t.penup():抬起画笔,这样移动时就不会画线
t.goto(x, y):移动画笔到坐标(x, y)的位置
t.pendown():放下画笔,准备开始画线
为什么要定义这个函数呢?因为我们在绘制中国结的时候,需要频繁地移动画笔到不同的位置,每次都写这三行代码会很麻烦,所以我们把它们封装成一个函数,这样用的时候只需要调用goto(x, y)就可以了,就像我们把常用的工具放在工具箱里,用的时候直接拿出来一样。
definit():t.setup(800, 800)t.pensize(10)t.pencolor("red")t.speed(14)
这个函数的作用是初始化画布和画笔的设置。
t.setup(800, 800):设置画布的大小为800x800像素,就像我们准备一张800x800的画纸
t.pensize(10):设置画笔的粗细为10,就像我们选择一支10号的画笔
t.pencolor("red"):设置画笔的颜色为红色,中国结当然是红色的啦!
t.speed(14):设置绘制的速度为14,数字越大速度越快,这样绘制的时候不会太慢
defjiexin():m, n = 0, 200foriinrange(11):goto(m, n)t.seth(-45)t.fd(200)m -= 20/pow(2, 0.5)n -= 20/pow(2, 0.5)m, n = 0, 200forjinrange(11):goto(m, n)t.seth(-135)t.fd(200)m += 20/pow(2, 0.5)n -= 20/pow(2, 0.5)
这个函数的作用是绘制中国结的核心部分,也就是交叉的线条。
第一部分循环:从(0, 200)位置开始,每次向左下方移动一定距离,绘制11条从左上到右下的线条
第二部分循环:从(0, 200)位置开始,每次向右下方移动一定距离,绘制11条从右上到左下的线条
pow(2, 0.5)是计算2的平方根,大约等于1.414,这是为了让线条之间的距离相等,形成漂亮的网格图案。
defjiexiaoban():m = -20/pow(2, 0.5)n = 200-20/pow(2, 0.5)forkinrange(4):goto(m, n)t.seth(135)t.fd(20)t.circle(10, 180)t.fd(20)m -= 40/pow(2, 0.5)n -= 40/pow(2, 0.5)m = 20/pow(2, 0.5)n = 200-20/pow(2, 0.5)forkinrange(4):goto(m, n)t.seth(45)t.fd(20)t.circle(-10, 180)t.fd(20)m += 40/pow(2, 0.5)n -= 40/pow(2, 0.5)m = 20/pow(2, 0.5)n = 200-200*pow(2, 0.5) +20/pow(2, 0.5)forkinrange(4):goto(m, n)t.seth(-45)t.fd(20)t.circle(10, 180)t.fd(20)m += 40/pow(2, 0.5)n += 40/pow(2, 0.5)m = -20/pow(2, 0.5)n = 200-200*pow(2, 0.5) +20/pow(2, 0.5)forkinrange(4):goto(m, n)t.seth(-135)t.fd(20)t.circle(-10, 180)t.fd(20)m -= 40/pow(2, 0.5)n += 40/pow(2, 0.5)
这个函数的作用是绘制中国结四个角上的小结。
第一部分:绘制左上角的4个小结
第二部分:绘制右上角的4个小结
第三部分:绘制右下角的4个小结
第四部分:绘制左下角的4个小结
每个小结都是由一条短线和一个半圆组成的,就像一个小耳朵一样。
defwaiyuan():goto(90*pow(2, 0.5), 200-110*pow(2, 0.5))t.seth(-45)t.circle(20, 270)goto(-90*pow(2, 0.5), 200-110*pow(2, 0.5))t.seth(-135)t.circle(-20, 270)goto(80*pow(2, 0.5), 200-120*pow(2, 0.5))t.seth(-45)t.circle(40, 270)goto(-80*pow(2, 0.5), 200-120*pow(2, 0.5))t.seth(-135)t.circle(-40, 270)
这个函数的作用是绘制中国结外圈的装饰性圆弧。
第一部分:绘制右上角的小圆弧
第二部分:绘制左上角的小圆弧
第三部分:绘制右下角的大圆弧
第四部分:绘制左下角的大圆弧
这些圆弧就像中国结的装饰花边,让中国结看起来更漂亮。
defshengzi():goto(0, 200)t.pensize(20)t.seth(90)t.fd(60)goto(0, 320)t.pensize(12)t.seth(180)t.circle(30, 360)goto(0, 200-200*pow(2, 0.5))t.pensize(40)t.seth(-90)t.fd(20)t.pensize(2)s = -20foriinrange(11):goto(s, 200-200*pow(2, 0.5))t.seth(-90)t.fd(200)s += 4
这个函数的作用是绘制中国结的绳子部分,包括上面的挂绳和下面的流苏。
第一部分:绘制上面的挂绳,先画一条粗线,然后在顶部画一个圆圈
第二部分:绘制下面的流苏,先画一个粗粗的结,然后画11条细线作为流苏
defhanzi():goto(-150, 325)t.write("幸福中国结", font=("Arial", 40, "normal"))
这个函数的作用是在画布上绘制"幸福中国结"几个字。
goto(-150, 325):移动画笔到合适的位置,这样文字就会显示在挂绳的上方
t.write("幸福中国结", font=("Arial", 40, "normal")):绘制文字,字体是Arial,大小是40,样式是normal(正常)
defmain():init()t.speed(3)jiexin()jiexiaoban()waiyuan()shengzi()hanzi()t.hideturtle()t.done()
这个函数是整个程序的主函数,它按顺序调用前面定义的所有函数,完成中国结的绘制。
init():初始化设置
t.speed(3):把速度调慢一点,这样我们可以清楚地看到绘制过程
jiexin():绘制核心部分
jiexiaoban():绘制小结部分
waiyuan():绘制外圈装饰
shengzi():绘制绳子部分
hanzi():绘制文字
t.hideturtle():隐藏画笔,这样画布上就不会显示画笔的形状
t.done():完成绘制,保持窗口打开,这样我们可以欣赏绘制结果
main()这一行代码是调用main函数,开始执行整个程序,绘制中国结。
整个程序的执行流程是这样的:
导入turtle模块 → 定义各个函数 → 调用main函数 → 初始化设置 → 绘制核心部分 → 绘制小结部分 → 绘制外圈装饰 → 绘制绳子部分 → 绘制文字 → 隐藏画笔 → 显示结果
就像我们画画一样,先准备好工具和画纸,然后按照一定的顺序一步一步地画,最后完成一幅漂亮的作品。
如果想让中国结更漂亮,你可以尝试添加一些新功能:
添加颜色:给中国结的不同部分使用不同的颜色,比如核心部分用红色,绳子用金色
添加图案:在绳子上添加一些小装饰,比如珠子或者小花
添加背景:给中国结添加一个漂亮的背景,比如红色的福字
添加动画:让中国结旋转起来,或者让流苏飘动
改变大小:调整中国结的大小,比如画一个更大的中国结
添加多个中国结:在画布上绘制多个不同大小的中国结
添加祝福语:在旁边添加一些祝福语,比如"新年快乐"、"万事如意"
你能尝试实现这些功能吗?
通过分析这个"中国结绘制"程序,我们学到了以下重要的编程概念:
1. 函数的使用:把重复的代码封装成函数,这样可以让代码更整洁,更易于理解和维护。就像我们把常用的工具放在工具箱里,用的时候直接拿出来一样。
2. 循环语句:使用for循环来重复执行相同的操作,比如绘制多条线条或者多个小结。就像我们写作业的时候,重复写同一个字,用循环可以让我们更高效地完成任务。
3. 坐标系统:使用x和y坐标来确定画笔的位置,就像我们在地图上用经纬度来确定位置一样。
4. 角度设置:使用seth函数来设置画笔的方向,就像我们画画的时候要调整画笔的角度一样。
5. 模块化编程:把一个复杂的任务分解成多个小任务,每个任务由一个函数来完成,然后在主函数中按顺序调用这些函数。就像我们盖房子一样,先打地基,然后砌墙,最后盖屋顶,一步一步地完成。
好了,今天的"中国结绘制"项目就讲到这里啦!希望你们都能做出自己的中国结,把它分享给家人和朋友,传递幸福和吉祥!如果有什么问题,欢迎在评论区留言哦!我们下期再见~拜拜~
喜欢这篇文章的话,记得点赞、收藏、转发给你的小伙伴们哦!我们下期再见!👋

。即使下载了,也要上传,不是特别方便,尤其是不好查找。

关注即可领取,下载不限速,方便快捷。



微信号|scratch-coco