用Python告诉你什么是佩奇
昨天在CSDN公众号看到一篇文章《啥是佩奇,Python 告诉你!》,很有启发,遗憾的是代码没有给全,正好可以把这个作为一个练习,把剩余的部分补全。
效果视频:
基本思路是选好画板大小,设置好画笔颜色,粗细,定位好位置,依次画鼻子,头、耳朵,眼睛,腮,嘴,身体,尾巴,手脚,完事。
turtle 是 Python 内置的一个比较有趣味的模块,俗称海龟绘图,它是基于 tkinter 模块打造,提供一些简单的绘图工具。
在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动,这个有点类似以前的LOGO海龟画图。这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条。通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片。使用海龟作图,我们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以跟随海龟看看每行代码如何影响到它的移动。这能够帮助我们理解代码的逻辑。所以海龟作图也常被用作新手学习 Python 的一种方式。
turtle 更丰富详细的功能及知识可以参考官方文档:https://docs.python.org/3/library/turtle.html。
了解了tuttle的用法之后就可以开始实战了。
全部代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019-01-20 22:23 # @Author : Apull # @File : 佩奇.py from turtle import * def nose(x, y): # 鼻子 penup() # 提起笔 goto(x, y) # 定位 pendown() # 落笔,开始画 setheading(-30) # 将乌龟的方向设置为to_angle/为数字(0-东、90-北、180-西、270-南) begin_fill() # 准备开始填充图形 a = 0.4 for i in range(120): if 0 <= i < 30 or 60 <= i < 90: a = a + 0.08 left(3) # 向左转3度 forward(a) # 向前走a的步长 else: a = a - 0.08 left(3) forward(a) end_fill() # 填充完成 penup() setheading(90) forward(25) setheading(0) forward(10) pendown() pencolor(255, 155, 192) # 画笔颜色 setheading(10) begin_fill() circle(5) color(160, 82, 45) # 返回或设置pencolor和fillcolor end_fill() penup() setheading(0) forward(20) pendown() pencolor(255, 155, 192) setheading(10) begin_fill() circle(5) color(160, 82, 45) end_fill() def head(x, y): # 头 color((255, 155, 192), "pink") penup() goto(x, y) setheading(0) pendown() begin_fill() setheading(180) circle(300, -30) circle(100, -60) circle(80, -100) circle(150, -20) circle(60, -95) setheading(161) circle(-300, 15) penup() goto(-100, 100) pendown() setheading(-30) a = 0.4 for i in range(60): if 0 <= i < 30 or 60 <= i < 90: a = a + 0.08 lt(3) # 向左转3度 fd(a) # 向前走a的步长 else: a = a - 0.08 lt(3) fd(a) end_fill() def ears(x, y): # 耳朵 color((255, 155, 192), "pink") penup() goto(x, y) pendown() begin_fill() setheading(100) circle(-50, 50) circle(-10, 120) circle(-50, 54) end_fill() penup() setheading(90) forward(-12) setheading(0) forward(30) pendown() begin_fill() setheading(100) circle(-50, 50) circle(-10, 120) circle(-50, 56) end_fill() def eye(x, y): # 单眼 penup() goto(x, y) pendown() pencolor((255, 155, 192)) begin_fill() setheading(0) fillcolor((255, 255, 255)) circle(15) end_fill() penup() goto(x-5, y + 12) pendown() begin_fill() setheading(0) color((0, 0, 0)) circle(3) end_fill() def eyes(x, y): # 眼睛 -20, 120 eye(x, y) # 右眼 eye(x + 40, y - 15) # 左眼 def cheek(x, y): # 腮 color((255, 155, 192)) penup() goto(x, y) pendown() setheading(0) begin_fill() circle(30) end_fill() def mouth(x, y): # 嘴 color(239, 69, 19) penup() goto(x, y) pendown() setheading(-80) circle(30, 40) circle(40, 80) def body(x, y): # 身体 -20, -20 pencolor("red") fillcolor(255, 100, 100) penup() goto(x, y) pendown() begin_fill() setheading(225) circle(300, 45) setheading(0) fd(300) setheading(90) circle(300, 45) pencolor((255, 155, 192)) setheading(220) circle(-93, 80) end_fill() def arm(x, y): #手臂 -50, -50 pu() goto(x, y) pencolor((255, 155, 192)) pd() setheading(200) circle(400, 20) pu() goto(x - 105, y - 55) pd() setheading(155) circle(80, 15) pu() goto(x - 105, y - 55) pd() setheading(270) circle(-80, 15) pu() goto(x + 185, y) pencolor((255, 155, 192)) pd() setheading(-10) circle(-400, 20) pu() goto(x + 295, x - 35) pd() setheading(20) circle(-80, 15) pu() goto(x + 295, x - 35) pd() setheading(270) circle(-80, 15) def leg(x, y): # 腿 pu() goto(x, y) pd() pencolor(242, 126, 126) pensize(12) setheading(270) fd(50) pencolor(0, 0, 0) pensize(20) setheading(180) fd(30) def legs(x, y): # 腿 0, -239 leg(x, y) leg(x+100, y) def tail(x, y): #尾巴 194, -200 pu() goto(x, y) pd() pencolor((255, 155, 192)) pensize(4) setheading(0) circle(80, 15) circle(10) circle(100, 20) def setting(): # 参数设置 pensize(4) hideturtle() # 使乌龟无形(隐藏) colormode(255) # 将其设置为1.0或255.随后 颜色三元组的r,g,b值必须在0 .. cmode范围内 color((255, 155, 192), "pink") setup(840, 800) speed(10) def main(): setting() # 画布、画笔设置 nose(-100, 100) # 鼻子 head(-69, 167) # 头 ears(0, 160) # 耳朵 eyes(-20, 120) # 眼睛 cheek(80, 10) # 腮 mouth(-20, 30) # 嘴 body(-20, -20) # 身体 arm(-50, -50) #手臂 tail(194, -200) # 尾巴 legs(0, -239) # 腿 done() if __name__ == '__main__': main()
初学Python,画完佩奇,对Python以及tuttle也有了更好的了解。
本文部分源码来自 https://mp.weixin.qq.com/s/Abep_KcJGvYFPYbXdH-QnA,文章里面有个视频,推荐看看。