当前位置:首页 > 编程学习 > 用Python告诉你什么是佩奇

用Python告诉你什么是佩奇

编程学习2019-01-2164130


    昨天在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,文章里面有个视频,推荐看看。


扫描二维码推送至手机访问。

版权声明:本文由海阔天空发布,如需转载请注明出处。

本文链接:https://www.apull.net/html/20190121171923.html

分享给朋友:

相关文章

VB.NET中快速访问注册表技巧

VB.NET中快速访问注册表技巧

vb.net中访问注册表变得非常的简单。我们可以用 microsoft.Win32 名称空间的 下的 registry 类 和  registryKey 类。 另外 My.Computer.Registry 也可以返回一个 Microsoft.Win32.Registry 类的实例。 下面就举几个小例子来说明vb.net访问注册表的方法。1,返回或创建一个注册表键Dim Key1 As Microsoft.Win32.RegistryKey Key1 = My.Compu...

制作网页28个常用小代码

制作网页28个常用小代码

1、oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键<table border oncontextmenu=return(false)><td>no</table>  可用于Table2、<body onselectstart="return false"> 取消选取、防止复制3、onpaste="retu...

计算机蓝屏代码的含义

计算机蓝屏代码的含义

0 0x0000 作业完成。1 0x0001 不正确的函数。2 0x0002 系统找不到指定的档案。3 0x0003 系统找不到指定的路径。4 0x0004 系统无法开启档案。5 0x0005 拒绝存取。6 0x0006 无效的代码。7 0x0007 储存体控制区块已毁。8 0x0008 储存体空间不足,无法处理这个指令。9 0x0009 储存体控制区块地址无效。10 0x000A 环境不正确。11 0x000B 尝试加载一个格式错误的程序。12 0x000C 存取码错误。1...

HTML与ASCII码表

HTML与ASCII码表

HTML与ASCII码表Standard ASCII set, HTML Entity names, ISO 10646, ISO 8879, ISO 8859-1  Latin alphabet No. 1Browser support: All browsersASCIIHTMLHTMLDecHexSymbolNumberNameDescription32333435363738394041424344454647202122232425262728292A2B...