用python画一只三角猫

有小伙伴留言 只需十几行代码,轻松爬取公众号文章

我试了一下,2步就能生成一篇400行的文章:

  • 爬取200篇文章,脚本在print时,按markdown格式进行打印
    1
    print('['+标题+']'+'('+url+')','\n')
    
  • 将打印结果ctrl+a复制到博客里,生成“python技术”公众号的文章列表 可以说不费吹灰之力拿到这些文章:

整个操作下来不到一分钟的时间。

如果用复制粘贴的方式工程量就大了,二百篇文章可能需要你点击上次。

每页5篇文章,200篇的话下滑40页,我点了十来页实在不想继续滚动鼠标了

比较来说,用python批量获取并制作成博文,也便于筛选查找文章。

比如我想查找python技术公众号关于画画的文章,上图的文章列表ctrl+f搜索关键字就能找到相关内容。

python技术公众号的200篇文章,从2021-06-29到现在,看看有没有你要找的内容:

http://ssw.fit/ 阅览室-公众号,可以看到

三角猫

我对画画很感兴趣,按上述操作搜索“画画”,

看到python技术公众号的一篇文章 绝版!没想到 Python 画画这么简单

介绍有一个turtle绘图工具,省的我去找画图工具了

平常画的最多的是三角猫,用turtle来画怎么样呢?

说干就干,在纸上顺手画了它

横眉怒眼,虎虎生威,

我的目标是用turtle把它画出来。

先来点知识储备,介绍几处重要的地方,对画猫有帮助

Turtle库

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

部分函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
t.bgcolor("color")  设置背景颜色
t.pensize()         设置画笔尺寸
t.hideturtle()      隐藏画笔
t.speed()           设置画笔的速度参数范围0~10
t.penup()           起笔移动时无图提起笔移动不绘制图形用于另起一个地方绘制
t.pendown()         落笔移动时有图
t.forward(distance) 向当前画笔方向移动distance像素长度
t.backward(distance)向当前画笔相反方向移动distance像素长度
t.goto(x,y)         将画笔移动到坐标为x,y的位置
t.goto(x,y) = t.setpos(x,y) = t.setposition(x,y)
300
t.left(degree)      相对角度顺时针移动degree°
t.right(degree)     相对角度逆时针移动degree°
t.hideturtle()      隐藏画笔的turtle形状
t.showturtle()      显示画笔的turtle形状
t.begin_fill()      开始绘制
t.end_fill()        结束绘制
t.fd()              向画笔的朝向移动指定的距离参数为距离
t.bd()              向画笔的朝向的相反方向移动指定的距离参数为距离
t.pencolor()        设置画笔的颜色参数为RGB格式或颜色名称没有参数传入返回当前画笔颜色传入参数设置画笔颜色可以是字符串如"green","red",也可以是RGB3元组
t.pensize()         设置画笔的宽度
t.color()           没有参数则返回当前画笔的颜色和填充的颜色可以放两个颜色前一个为画笔颜色后一个为填充颜色如t.color("red", "yellow")  
t.fillcolor()       设置填充的颜色参数为RGB格式或颜色名称
t.begin_fill()      准备开始填充图形
t.end_fill()        填充完成
setx( )             将当前x轴移动到指定位置
sety( )             将当前y轴移动到指定位置
home()              设置当前画笔位置为原点朝向东
dot(rcolor)        绘制一个指定直径和颜色的圆点t.dot(20,blue)
t.bgpic()           设置或获取背景图片只支持gif图片
t.circle(radiusextent)     设置指定半径radius的圆参数为半径半径为正()表示圆心在画笔的左边(右边)画圆extent为角度若画圆则无须添加t.circle(-20,90),顺时针半径20画弧弧度90
t.setup(width=0.5,height=0.75,startx=None,starty=None)width,height:输入宽和高为整数时,表示像素;为小数时,表示占据电脑屏幕的比例(startx,starty):这一坐标表示矩形窗口左上角顶点的位置,如果为空,则窗口位于屏幕中心

画彩色蟒蛇(可以做猫尾巴)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import turtle
turtle.setup(650, 350,200,200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
colors=['green','blue','yellow','orange','pink','purple']
turtle.seth(-40)
for i in range(4):
    turtle.color(colors[i])#选择索引从0~3的颜色
    turtle.circle(40, 80)#上半弧度
    turtle.circle(-40, 80)#下半弧度
turtle.color(colors[5])
turtle.circle(40, 80/2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2/3)

turtle.done()

画猫的身体(三角形)

1
2
3
4
import turtle as t
for i in range(3):
    t.seth(i*120)
    t.fd(200)

turtle的setheading函数(可简写为seth)

重点介绍下这个参数

setheading( to_angle),功能是设置海龟的朝向为 to_angle。setheading可简写为seth。

to_angle 表示角度的数值 (整型或浮点型)。to_angle为正逆时针转向,to_angle为负顺时针转向。每次setheading(to_angle) 小海龟以正东(X轴正方向)为基准转向to_angle角度。 例如:

1
2
3
4
5
import turtle as t
t.seth(60)
t.fd(100)
t.seth(-30)
t.fd(150)

特别提示: right(to_angle)或left(to_angle)与setheading(to_angle)的区别

每次setheading(to_angle) 小海龟以正东(X轴正方向)为基准转向to_angle角度。与之不同,每次right(to_angle)或left(to_angle)小海龟以当前方向为基准向right或left转向to_angle角度。

例如:

1
2
3
4
5
6
7
import turtle as t
t.seth(60)
t.fd(100)
t.seth(-30)
t.fd(150)
t.left(90)
t.fd(50)

画三角猫

经过前述知识的准备,可以动工画🐱了,可以加上颜色、笔画粗细的变化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import turtle as t
import time
'''
部分函数及参数说明:
pen_move():画每个部位时,都必须先抬起画笔,移动到指定位置后落下
pen_set():用来设置画笔的颜色尺寸等
t.setup(width,height):入宽和高为整数时,表示像素;为小数时,表示占据电脑屏幕的比例
t.speed():设置画笔速度
t.goto():以左下角为坐标原点,进行画笔的移动
t.circle(radius,extent):设置指定半径radius的圆,参数为半径,半径为正(负),表示圆心在画笔的左边(右边)画圆,extent为角度,若画圆则无须添加。如:t.circle(-20,90),顺时针,半径20画弧,弧度90
t.seth(degree)绝对角度,将画笔的方向设置为一定的度数方向,0-东;90-北;180-西;270-南
'''

wight=800
height=600
t.setup(wight,height)
t.speed(10)

def pen_move(x,y):
    t.penup()
    t.goto(x-wight/2+50,y-height/2+50)
    t.pendown()

def pen_set(size,color):
    t.pensize(size)
    t.color(color)

def draw():
    #第一个眼睛
    pen_move(300,350)
    pen_set(2,'black')
    t.begin_fill()
    t.circle(10)
    t.end_fill()
    # 第一个眼眶
    pen_move(300,350)
    t.circle(15)
    #第二个眼睛
    pen_move(400,350)
    t.begin_fill()
    t.circle(10)
    t.end_fill()
    # 第二个眼眶
    pen_move(400,350)
    t.circle(15)

    # 嘴
    pen_move(340,300)
    t.seth(0)
    t.left(45)
    t.forward(30)
    pen_move(360, 300)
    t.seth(180)
    t.left(45+270)
    t.forward(30)

    # 右边脸框
    t.seth(0)
    pen_move(340,260)
    t.circle(90,150)

    # 左边脸框
    t.seth(180)
    pen_move(340,260)
    t.circle(-90,140)
    # time.sleep(100)

    #耳朵
    # t.seth(0)
    pen_move(260, 400)
    t.left(100)
    # t.forward(100)
    t.circle(-60,70)

    #合上耳朵
    pen_move(285, 430)
    t.left(40)
    t.circle(60,50)

    #右耳朵
    pen_move(380,430)
    t.right(90)
    t.circle(-60,50)

    pen_move(413,410)
    t.left(30)
    t.circle(60,60)

    # 左边身子的线条
    pen_move(320, 270)
    t.seth(180)
    t.left(70)
    t.forward(260)

    # 身子底部线条
    pen_move(230, 30)
    t.seth(0)
    # t.left(60)
    t.forward(240)

    # 右边身子线条
    pen_move(380, 270)
    # t.seth(0)
    t.right(70)
    t.forward(260)

    # 尾巴
    pen_move(380+90, 270-240)
    t.left(60)
    pen_set(6,'black')
    t.circle(130,100)

    t.left(10)
    t.circle(160,40)
    t.left(20)
    t.circle(100,30)
    t.left(50)
    t.circle(80,50)
    t.left(70)
    t.circle(70,40)
    t.left(70)
    t.circle(60,30)
    t.left(70)
    t.circle(60,20)
    t.left(60)
    t.circle(60,10)
    t.left(60)
    t.circle(10,5)
    time.sleep(1)

draw()
Python Geek Tech wechat
欢迎订阅 Python 技术,这里分享关于 Python 的一切。