🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Python Turtle绘图:写福字(加光束 / 水印文字)【难度2星】 ![](http://h.yiniuedu.com/b59449b5b4b5d6cf27687c0cb718244a) **春节快到了,用Python写个福字,祝大家福如东海~福与天齐~** **案例1:写福字(加光束)** 难度:★★☆☆☆☆  【配色参考】 **“从喜欢的图片中找寻配色灵感”** ![](http://h.yiniuedu.com/8e3912de76be6c3644fd0ec8d82daccb) **【重难点突破】** **1. 链接初二数学**下册**知识点——勾股定理** ![](http://h.yiniuedu.com/1e9b6ae1d8184c6f524e992fdbe16d50) **海龟画旋转90度的正方形**,关键是要确定两条边的长度。一条是正方形内等腰直角三角形的直角边a;另一条是等腰直角三角形的斜边b,也就是正方形的边长。 求a和b的关系,需要用到初二数学下册中的“勾股定理”。**等腰直角三角形的斜边=√2倍的直角边。** 求等腰直角三角形斜边与直角边的关系? 解:设等腰直角三角形的两个直角边为a,斜边为b, 根据勾股定理 a²+a²=b² 2a²=b² √2a=b       即斜边=√2倍的直角边。 **编程是对课本上数学知识的真正实践。** **如果还没上初二的同学,只需要记住结论就好。** **2. 在Python中如何表示“根号2”** ![](http://h.yiniuedu.com/667dddce48eedfb3504ade871f0ce3b5) **3. home( )和setheading(  )函数的区别** home( ) 函数:让海龟返回原点。 即不管海龟在什么位置,都可以使海龟移至坐标(0,0)位置,并且头部为初始方向(朝右)。 setheading( ):只能设置海龟的头部朝向。 setheading(0) 海龟朝右,setheading(180) 海龟朝左, setheading(90) 海龟朝上,setheading(-90) 海龟朝下。 **【代码参考】** 以下将会分5个步骤来逐渐实现“写福字”~ **第1步:画光束** **第2步:画红纸灰色阴影** **第3步:画正方形红纸** **第4步:写文字** 画简易坐标辅助写字,会发现海龟写字的特点: ![](http://h.yiniuedu.com/943e48de187b8d711b22e1261c99b63e) align参数省略 **写在海龟右上方** ![](http://h.yiniuedu.com/bbe315a06b5d862ffb3f8d15fdb47280) align="center" **写在海龟正上方** align参数:省略即按默认(align="left"),文字会写在海龟的右上方位置。align="center",居中对齐时,文字会写在海龟的正上方位置。 字号越大效果越明显。所以如果我们想让海龟在红纸正中心写字,海龟就要移到红纸的下方。具体海龟要从红纸中心向下移动多少像素,需要反复运行看效果调试。 **第5步:整合前4步代码,完成“写福字”** 以下是案例1“写福字(加光束)”的最终代码 ``` # 案例1:写福字(加光束) ### 程序初始化设置 import turtle # 导入turtle库(模块) turtle.bgcolor("#ffaa36") # 设置背景颜色为#ffaa36,一种橘色。 turtle.speed(0) ### ① 画光束 turtle.pensize(5) # 设置光束的粗线 turtle.color("#ffc373") # 设置光束的颜色 for i in range(30): turtle.forward(250) turtle.backward(250) turtle.left(6) turtle.forward(300) turtle.backward(300) turtle.left(6) # turtle.speed(10) #可减慢画正方形和写字的速度。 ### ②画红纸灰色阴影 turtle.color("#404040") # 同时设置画笔和填充颜色都为#404040,一种深灰色。 a=200 # 正方形内等腰直角三角形的直角边为a b=2**0.5*a # 斜边为b ,等腰直角三角形的斜边=√2倍的直角边 turtle.penup() turtle.home() # 步骤1光束画完后,让海龟返回原点,即海龟移动至坐标(0,0),并设置朝向为初始方向(向右)。 turtle.forward(a) turtle.pendown() turtle.begin_fill() turtle.left(135) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.end_fill() ### ③ 画正方形红纸 turtle.color("#ea182a") # 同时设置画笔和填充颜色都为#ea182a,一种红色。 a=200 b=2**0.5*a turtle.penup() turtle.home() # 第2步灰色阴影画完后,让海龟返回原点,即海龟移动至坐标(0,0),并设置朝向为初始方向(向右)。 turtle.goto(0,8) turtle.forward(a) turtle.pendown() turtle.begin_fill() turtle.left(135) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.end_fill() ### ④ 写文字“福” turtle.color("black") turtle.penup() turtle.home() # 让海龟返回原点 turtle.setheading(-90) # 让海龟头部朝下 turtle.forward(150) # 让海龟向下移动150个像素。这个数字需要不断调试。 turtle.pendown() turtle.write("福", align="center",font=("对酒当歌行书",180,"bold")) ### 海龟绘图结束,隐藏海龟 turtle.hideturtle() turtle.done() ``` ***** **案例2:** **写福字(加文字水印)** 难度:★★☆☆☆☆  【效果预览】 ![](http://h.yiniuedu.com/414b0e71f7d427ea7c414debabd538eb)  【代码参考】 温馨提示:写4列水印文字时,为了方便理解未使用循环嵌套,所以代码较长。 ``` # 案例2:写福字(加水印文字) import turtle # 导入turtle库(模块) turtle.bgcolor("#ffaa36") # 设置背景颜色为 turtle.speed(0) ### ① 写水印文字 x1=-230 # 确定第1列水印文字的横坐标位置 y1=210 # 确定第1列水印文字的纵坐标位置 # 写第1列水印文字 turtle.color("#ffc373") for i in range(10) : turtle.penup() turtle.goto(x1,y1) turtle.pendown() turtle.write("沂牛教育", align="center",font=("对酒当歌行书",20,"bold")) y1=y1-50 # 写第2列水印文字 x2=-70 # 第2列水印文字的坐标也可以使用变量x,对x重新赋值, y2=210 # 但为了方便理解,为每一列坐标都定义为不同的变量。 for i in range(10): turtle.penup() turtle.goto(x2,y2) turtle.pendown() turtle.write("虎年大吉", align="center",font=("对酒当歌行书",20,"bold")) y2=y2-50 # 写第3列水印文字 x3=80 y3=210 for i in range(10): turtle.penup() turtle.goto(x3,y3) turtle.pendown() turtle.write("虎年大吉", align="center",font=("对酒当歌行书",20,"bold")) y3=y3-50 # 写第4列水印文字 x4=230 y4=210 for i in range(10): turtle.penup() turtle.goto(x4,y4) turtle.pendown() turtle.write("喜爱少儿编程", align="center",font=("对酒当歌行书",20,"bold")) y4=y4-50 # 海龟写完水印文字后,返回原点 turtle.penup() turtle.home() turtle.pendown() # turtle.speed(10) # 可减慢画正方形和写字的速度 ### ②画灰色阴影 turtle.color("#404040") # 同时设置画笔和填充颜色都为#404040,一种深灰色。 a=200 # 正方形内等腰直角三角形的直角边为a b=2**0.5*a # 斜边为b ,等腰直角三角形的斜边=√2倍的直角边 turtle.penup() turtle.home() # 步骤1光束画完后,让海龟返回原点,即海龟移动至坐标(0,0),并设置朝向为初始方向(向右)。 turtle.forward(a) turtle.pendown() turtle.begin_fill() turtle.left(135) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.end_fill() ### ③ 画正方形红纸 turtle.color("#ea182a") # 同时设置画笔和填充颜色都为#ea182a,一种红色。 a=200 b=2**0.5*a turtle.penup() turtle.home() # 第2步灰色阴影画完后,让海龟返回原点,即海龟移动至坐标(0,0),并设置朝向为初始方向(向右)。 turtle.goto(0,8) turtle.forward(a) turtle.pendown() turtle.begin_fill() turtle.left(135) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.left(90) turtle.forward(b) turtle.end_fill() ### ④ 写文字“福” turtle.color("black") turtle.penup() turtle.home() # 让海龟返回原点 turtle.setheading(-90) # 让海龟头部朝下 turtle.forward(150) # 让海龟向下移动150个像素。这个数字需要不断调试。 turtle.pendown() turtle.write("福", align="center",font=("对酒当歌行书",180,"bold")) ### 海龟绘图结束,隐藏海龟 turtle.hideturtle() turtle.done() ```