海龟库画春联怎么画

author author     2023-03-25     504

关键词:

Python就好比编程界的瑞士军刀,开箱即用、无所不能。这得益于Python简洁易用的语法,以及丰富的第三方库,你想在电脑上做什么,总能找到事半功倍的第三方库。比如,在这新春佳节之际,用Python来写个春联能做到吗?用Python自带的turtle库便可以实现。
turtle写春联
一、turtle库简介
turtle中的绘图是控制一只“小海龟”来实现的,海龟移动的路径便能形成图形。这种程序绘图的方式具有很强的可计算性,也涉及到许多数学几何知识。
turtle的海龟绘图很适合用来引导孩子学习编程。 最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言。
二、画春联背景
春联背景的绘制比较简单,由于上下联、横批都是矩形,且颜色都是一致的。为了便于代码的复用,可以定义可以一个画背景的函数。如下所示:
def drawChunLianBg(startX=0, startY=0, lenX=100, lenY=100):
# 设置边框色和背景填充色
color('Yellow', 'OrangeRed')
# 抬笔,定位起点
pu()
goto(startX, startY)
# 落笔,绘制春联矩形框,并填充颜色
pd()
begin_fill()
for i in range(2):
fd(lenX)
rt(90)
fd(lenY)
rt(90)
end_fill()
# 结束后抬笔
pu()
三、写字
方法一:write()函数直接写字
关于写字,turtle提供了一个write()函数。
使用write()函数打印文字效果
优点:可以自定义汉字字体,写出漂亮的字体!
缺点:无法呈现书写字的动态效果。
turtle.write(arg, move=False, align='left', font=('Arial', 8, 'normal'))
arg -- 要书写到 TurtleScreen 的对象
move -- True/False。 move 为真值,画笔会移至文本的右下角
align -- 字符串 "left", "center" 或 "right"。写到当前海龟位置。
font -- 一个三元组 (fontname, fontsize, fonttype)
以下是实现关键代码:
def writeWord(target_word, startx, starty):
# 基于坐标,打印单个汉字
color("black", "black")
# 抬笔定位
pu()
goto(startx,starty)
pd()
# 基于字体,打印汉字
write(target_word, move=False,align='left',font=('汉仪程行简',24, 'normal'))

def writeWords(target_words, startx, starty,lineNum=1):
# 打印多个汉字,lineNum控制每行的汉字数,默认为1
# 向右、向下的偏移量
right_shift = 0
down_shift = 0
# 遍历打印汉字
for word in target_words:
writeWord(word, startx+right_shift*45, starty-down_shift*45)
right_shift += 1
# 判断是否要换行
if right_shift % lineNum == 0:
down_shift += 1
right_shift = 0
在main()函数里直接调用drawChunLianBg和writeWords()就可以画出春联和写字啦。
def main():
initScreen()
drawChunLianBg(-160, 215, 60, 500)
writeWords(target_words="一往无前 奔赴星辰大海", startx=-145, starty=175)
drawChunLianBg(90, 215, 60, 500)
writeWords(target_words="保持热爱 静待春暖花开", startx=105, starty=175)
drawChunLianBg(-110, 280, 210, 60)
writeWords(target_words="虎虎生威", startx=-90, starty=230,lineNum=4)
pu()
goto(0, 0)
done()
方法二:利用坐标“画”汉字
如果要实现本文一开始的书写效果,思路便是要将汉字当作图形画出来。即需要知道每个汉字笔画中的关键坐标,让海龟根据坐标来移动,画出汉字。比如“万”这个字,我们可以这样来绘制:
坐标画“万”字原理
也就是说,坐标越多,画出的汉字效果会越好。但可以想象这是一个非常繁琐、耗时的工作。本想放弃的我,在知乎发现了一位大神也做过类似的尝试,并且是利用Python爬虫实现了从网上获取中文字体笔画坐标。在本人感叹其精妙的代码后,本着没有必要重复造轮子的想法,本人最终决定copy核心代码试一试,没想到竟然成功了!
基本原理是这样的
爬虫+turtle画字
关键代码:
def drawWords(target_words, startx, starty, lineNum=1):
params = (
('font', gen_url_encode_words(target_words)),
('shi_fou_zi_dong', '0'),
('cache_sjs1', '20031908'),
)
# 发起网页请求
response = requests.get('https://bihua.51240.com/web_system/51240_com_www/system/file/bihua/get_0/',
headers=headers,
params=dict(params)
)

content = response.content.decode('utf-8')
# 解析每个字的笔画坐标
content = content.replace(
'hzbh.main(', '').split(');document.getElementById')[0]
content = content.split('')[-1].split("")[0]
pattern = re.compile(r'\w:\[(.+?)\]')
result1 = re.split(pattern, content)
words_order_list =
words_cnt = 0
for r in result1:
sec = re.findall(r'\'.+?\'', r)
if len(sec):
orders = sec[1].split('#')
order_xy_routine = []
for order in orders:
order_str = re.findall(r'\(\d+,\d+\)', order)
order_xy = [eval(xy) for xy in order_str]
order_xy_routine.append(order_xy)
words_order_list['_'.format(
words_cnt, target_words[words_cnt])] = order_xy_routine
words_cnt += 1
setting() # 画布、画笔设置
right_shift = 0
down_shift = 0
for k, v in words_order_list.items():
for lines in v:
pu()
for xy in lines:
x, y = xy
x, y = x * 0.05 + startx + right_shift * 50, -y * 0.05 + starty - down_shift * 50
print(x, y)
goto(x, y)
pd()
right_shift += 1
if right_shift % lineNum == 0:
down_shift += 1
right_shift = 0
turtle写春联
写字与画字
利用write()写字注重生成的结果,效果更好;而利用坐标“画”字注重过程,是爬虫技术与海龟画图的完美合作,更有意思,让人不禁再次感叹Python的NB,每每这时总会想起那句至理名言——“人生苦短,我用Python!”
写在最后
本文是围绕turtle库来构思写春联这件事的,其实用Python写春联远不止这一种方式。比如下面这副春联也是利用Python写的,简直太酷了。
图片库生成的春联
立个小小的flag,明年就来写这样的春联吧。(望不打脸)
最重要的话留在最后,祝大家虎年万事顺遂,保持热爱,奔赴星海!
参考技术A 可以使用简笔画。一般我们新手在进行画画的时候,很难把物品的细节和精巧之处画出来,这时候就可以使用简笔画,先在纸上把物品轮廓勾画出来,再慢慢补上线条细节和颜色,会生动很多。

为啥用pythonturtle库画蟒蛇会出现这个错误?

第一张图片是运行显示的错误第二张图片是代码参考技术A因为模块“turtle”没有属性“encolor”改成turtle.color('purple')或者turtle.pencolor('purple')然后你写的代码笔都没有放下来,运行的话应该是没有任何线条的,... 查看详情

turtle库画四点的时钟难度0(代码片段)

#turtle库画四点的时钟importturtle#画时钟外形turtle.penup()turtle.goto(0,-100)turtle.pendown()turtle.circle(100)#画显示数字turtle.penup()turtle.goto(0,-90)turtle.write("6")turtle.goto(90,0)turtle.write("3")turtle.goto( 查看详情

手写一个画爱心的海龟(代码片段)

具体细节什么的在我的一个专栏里面有写过,喜欢的可以去看看哦专栏链接下面的截图是还没画完呢。可以自己画一下试试哦!有不明白的可以私信我哦fromturtleimport*fromtimeimportsleepdefgo_to(x,y):up( 查看详情

pythonturtle库画魔法少女里的小圆晓美焰(代码片段)

第一步:第二步:第三步:直接点击领取🎁🎁🎁🎁🎁①兼职交流,行业咨询、大佬在线专业解答有②Python开发环境安装教程有③Python400集自学视频有④软件开发常用词汇有⑤Python学习路线图... 查看详情

pythonturtle库画魔法少女里的小圆晓美焰(代码片段)

第一步:第二步:第三步:直接点击领取🎁🎁🎁🎁🎁①兼职交流,行业咨询、大佬在线专业解答有②Python开发环境安装教程有③Python400集自学视频有④软件开发常用词汇有⑤Python学习路线图... 查看详情

今天用matplotlib库画数学图啦(代码片段)

一、第一个图代码如下;importnumpyasnpimportmatplotlib.pyplotaspltplt.title("amao")x=np.linspace(0,6,100)y=np.cos(2*np.pi*x)*np.exp(-x)+0.8plt.plot(x,y,‘k‘,color=‘r‘,linewidth=3,linestyle="-")plt.show()成果图:二、第二个图代码如下:importmatplotlib.pyplotaspltimportmatpl... 查看详情

unity用gl库画线

真机调试时,有时候需要在屏幕中快速添加一些调试信息,如人物的碰撞盒,准星范围等,可用gl在屏幕上画矩形圆形等来显示: 开始绘制:voidBegin(Colorcolor){if(s_material==null)s_material=newMaterial(Shader.Find("Unlit/Color"));s_material.SetPa... 查看详情

用python软件画填色的图案,为啥只有海龟路线上有颜色

用python软件画填色的图案,只有海龟路线上有颜色,是设置错误造成的,解决方法如下:1、首先用opencv模块读取图片数据,得到一个三维矩阵。2、然后用numpy模块构造一个二维0矩阵,规模和图像的大小一样。3、接着把图片的第... 查看详情

海龟绘图turtle库之二级基础编程题(代码片段)

一、画一个太极图importturtleastt.pensize(2)#设置笔画宽度t.circle(100)#以100为半径的圆t.circle(50,180)t.circle(-50,180)t.penup()#抬起画笔t.goto(0,40)#移动到绝对位置t.pendown()#放下画笔t.circle(10)t.penup()t.goto(0,140)t.pendown()t.circle(10)t.hideturtle()#隐藏画... 查看详情

python中如何用turtle库画出小猪佩奇社会人(代码片段)

首先送上传送门:https://www.zhihu.com/question/275611095/answer/382959285接下来贴代码1fromturtleimport*23defnose(x,y):#鼻子4penup()#提起笔5goto(x,y)#定位6pendown()#落笔,开始画7setheading(-30)#将乌龟的方向设置为to_angle/为数字(0-东、90-北、180 查看详情

贴春联的讲究与禁忌

...年三十想必大家必不可少的一件要做那就是在自家门口贴春联,期待新的一年能好运连连,之前一直没有详细了解过其中的规矩,今日特意了解一番,让那些小白们也可以了解一下(花两分钟了解一下,你不亏),当然各地风俗... 查看详情

啥是佩奇(代码片段)

...都知道,turtle是python内置的一个比较有趣味的模块,俗称海龟绘图,它是基于tkinter模块打造,提供一些简单的绘图工具。在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动。这个海龟带着一只... 查看详情

ai写春联背后的“小心思”和“大道理”

毫无疑问,“智能春联”是这个春节里AI圈最大的主角。只需要输入一个词,智能春联系统就能作出一副喜庆吉利的春联,将高科技的人工智能与流传千年的春联有趣的结合在一起。由百度首次推出的智能春联系统,既应景又容... 查看详情

代码写春联js+html版本与python版本

一、春联一1.前言需要代码文末公众号找我回复【春联】即可获取效果展示3.代码展示index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>css3春联切换</title><linkrel 查看详情

python的turtle库有啥用

海龟库(turtle)海龟库(turtle)是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径... 查看详情

python海龟画图怎么把背景变成黑色

您好,您想要知道如何使用Python海龟画图来将背景变成黑色吗?首先,您需要了解Python海龟画图的基本概念。Python海龟画图是一种使用Python编程语言绘制图形的方法。它可以帮助您编写简单的程序来绘制图形,而无需使用任何复... 查看详情

新年快到了,如何运用python实现春联

...也是最近才想到的,看到老爸去年二十九(或者三十)在写春联,当时觉得他写的好慢啊!(不过让我来写,肯定不行!),于是萌生了用小编所学知识实现春联,只不过家里面没有打印机,不然代码写完之后,之后直接用打印机打... 查看详情

新年快到了,如何运用python实现春联

...也是最近才想到的,看到老爸去年二十九(或者三十)在写春联,当时觉得他写的好慢啊!(不过让我来写,肯定不行!),于是萌生了用小编所学知识实现春联,只不过家里面没有打印机,不然代码写完之后,之后直接用打印机打... 查看详情