Python 20 秒画完小猪佩奇“社会人”!

每天写代码的程序员,你们知道今年社交平台上最火的带货女王是谁吗?范冰冰?杨幂?Angelababy?不,是猪猪女孩小猪佩奇。

如果你经常用抖音、快手、B 站、知乎、微博……或者类似的任何一个内容或社交平台,那你很大概率能答出这道题:

答案是:掌声送给社会人。

随着口号喊响,社会人小猪佩奇似乎一夜之间就在短视频平台和社交网络上爆火了,同时网络上遍布了小猪佩奇九步画法。于是我在儿童节这一天画了一下,结果,不忍直视......

我画的o(╯□╰)o

人家的画

观察这个图像可以发现,小猪佩奇在构图基本是各种曲线,类抛物线、类圆、类椭圆、类二次贝塞尔曲线。这里说的都是“类”,这也正是小猪佩奇的构图精髓,一种手绘风格,而不是标准刻板的线条。在前端技术选型上,画图首先想到的是 SVG、Canvas,但它们本身就擅长画图,而且网上都有在线编辑 SVG 的工具,这就没意思了,我想佩奇也不会答应的。于是我想用纯粹的 Python 来做,这样更有挑战,因为画图画曲线不是 Python 擅长的事情。

基本思路如下:

选好画板大小,设置好画笔颜色、粗细,定位好位置,依次画鼻子、头、耳朵、眼睛、腮、嘴、身体、手脚、尾巴,完事儿。

都知道,Turtle 是 Python 内置的一个比较有趣味的模块,俗称“海龟绘图”,它是基于 Tkinter 模块打造,提供一些简单的绘图工具。

在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动。这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条。通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片。使用海龟作图,我们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以跟随海龟看看每行代码如何影响到它的移动。这能够帮助我们理解代码的逻辑。

所以,海龟作图也常被用作新手学习 Python 的一种方式。更丰富详细的功能及知识可以参考官方文档:

https://docs.python.org/3/library/turtle.html


代码如下:

#!/usr/bin/env python2  
# coding=utf-8  import turtle as t  t.pensize(4)  
t.hideturtle()  
t.colormode(255)  
t.color((255,155,192),"pink")  
t.setup(840,500)  
t.speed(10)  #鼻子  
t.pu()  
t.goto(-100,100)  
t.pd()  
t.seth(-30)  
t.begin_fill()  
a=0.4  
for i in range(120):  if 0<=i<30 or 60<=i<90:  a=a+0.08  t.lt(3) #向左转3度  t.fd(a) #向前走a的步长  else:  a=a-0.08  t.lt(3)  t.fd(a)  
t.end_fill()  t.pu()  
t.seth(90)  
t.fd(25)  
t.seth(0)  
t.fd(10)  
t.pd()  
t.pencolor(255,155,192)  
t.seth(10)  
t.begin_fill()  
t.circle(5)  
t.color(160,82,45)  
t.end_fill()  t.pu()  
t.seth(0)  
t.fd(20)  
t.pd()  
t.pencolor(255,155,192)  
t.seth(10)  
t.begin_fill()  
t.circle(5)  
t.color(160,82,45)  
t.end_fill()  #头  
t.color((255,155,192),"pink")  
t.pu()  
t.seth(90)  
t.fd(41)  
t.seth(0)  
t.fd(0)  
t.pd()  
t.begin_fill()  
t.seth(180)  
t.circle(300,-30)  
t.circle(100,-60)  
t.circle(80,-100)  
t.circle(150,-20)  
t.circle(60,-95)  
t.seth(161)  
t.circle(-300,15)  
t.pu()  
t.goto(-100,100)  
t.pd()  
t.seth(-30)  
a=0.4  
for i in range(60):  if 0<=i<30 or 60<=i<90:  a=a+0.08  t.lt(3) #向左转3度  t.fd(a) #向前走a的步长  else:  a=a-0.08  t.lt(3)  t.fd(a)  
t.end_fill()  #耳朵  
t.color((255,155,192),"pink")  
t.pu()  
t.seth(90)  
t.fd(-7)  
t.seth(0)  
t.fd(70)  
t.pd()  
t.begin_fill()  
t.seth(100)  
t.circle(-50,50)  
t.circle(-10,120)  
t.circle(-50,54)  
t.end_fill()  t.pu()  
t.seth(90)  
t.fd(-12)  
t.seth(0)  
t.fd(30)  
t.pd()  
t.begin_fill()  
t.seth(100)  
t.circle(-50,50)  
t.circle(-10,120)  
t.circle(-50,56)  
t.end_fill()  #眼睛  
t.color((255,155,192),"white")  
t.pu()  
t.seth(90)  
t.fd(-20)  
t.seth(0)  
t.fd(-95)  
t.pd()  
t.begin_fill()  
t.circle(15)  
t.end_fill()  t.color("black")  
t.pu()  
t.seth(90)  
t.fd(12)  
t.seth(0)  
t.fd(-3)  
t.pd()  
t.begin_fill()  
t.circle(3)  
t.end_fill()  t.color((255,155,192),"white")  
t.pu()  
t.seth(90)  
t.fd(-25)  
t.seth(0)  
t.fd(40)  
t.pd()  
t.begin_fill()  
t.circle(15)  
t.end_fill()  t.color("black")  
t.pu()  
t.seth(90)  
t.fd(12)  
t.seth(0)  
t.fd(-3)  
t.pd()  
t.begin_fill()  
t.circle(3)  
t.end_fill()  #腮  
t.color((255,155,192))  
t.pu()  
t.seth(90)  
t.fd(-95)  
t.seth(0)  
t.fd(65)  
t.pd()  
t.begin_fill()  
t.circle(30)  
t.end_fill()  #嘴  
t.color(239,69,19)  
t.pu()  
t.seth(90)  
t.fd(15)  
t.seth(0)  
t.fd(-100)  
t.pd()  
t.seth(-80)  
t.circle(30,40)  
t.circle(40,80)  #身体  
t.color("red",(255,99,71))  
t.pu()  
t.seth(90)  
t.fd(-20)  
t.seth(0)  
t.fd(-78)  
t.pd()  
t.begin_fill()  
t.seth(-130)  
t.circle(100,10)  
t.circle(300,30)  
t.seth(0)  
t.fd(230)  
t.seth(90)  
t.circle(300,30)  
t.circle(100,3)  
t.color((255,155,192),(255,100,100))  
t.seth(-135)  
t.circle(-80,63)  
t.circle(-150,24)  
t.end_fill()  #手  
t.color((255,155,192))  
t.pu()  
t.seth(90)  
t.fd(-40)  
t.seth(0)  
t.fd(-27)  
t.pd()  
t.seth(-160)  
t.circle(300,15)  
t.pu()  
t.seth(90)  
t.fd(15)  
t.seth(0)  
t.fd(0)  
t.pd()  
t.seth(-10)  
t.circle(-20,90)  t.pu()  
t.seth(90)  
t.fd(30)  
t.seth(0)  
t.fd(237)  
t.pd()  
t.seth(-20)  
t.circle(-300,15)  
t.pu()  
t.seth(90)  
t.fd(20)  
t.seth(0)  
t.fd(0)  
t.pd()  
t.seth(-170)  
t.circle(20,90)  #脚  
t.pensize(10)  
t.color((240,128,128))  
t.pu()  
t.seth(90)  
t.fd(-75)  
t.seth(0)  
t.fd(-180)  
t.pd()  
t.seth(-90)  
t.fd(40)  
t.seth(-180)  
t.color("black")  
t.pensize(15)  
t.fd(20)  t.pensize(10)  
t.color((240,128,128))  
t.pu()  
t.seth(90)  
t.fd(40)  
t.seth(0)  
t.fd(90)  
t.pd()  
t.seth(-90)  
t.fd(40)  
t.seth(-180)  
t.color("black")  
t.pensize(15)  
t.fd(20)  #尾巴  
t.pensize(4)  
t.color((255,155,192))  
t.pu()  
t.seth(90)  
t.fd(70)  
t.seth(0)  
t.fd(95)  
t.pd()  
t.seth(0)  
t.circle(70,20)  
t.circle(10,330)  
t.circle(70,30)  


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用RNN预测文档归属作者

文章目录1. 文本处理2. 文本序列化3. 数据集拆分4. 建立RNN模型5. 训练6. 测试参考 基于深度学习的自然语言处理 1. 文本处理 数据预览 # 有两个作者的文章&#xff08;A, B&#xff09;&#xff0c;定义为0&#xff0c; 1 A 0 # hamilton B 1 # madison UNKNOWN -1# 把…

LeetCode 1674. 使数组互补的最少操作次数(差分思想)

文章目录1. 题目2. 解题1. 题目 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit 。 每一次操作&#xff0c;你可以将 nums 中的任何整数替换为 1 到 limit 之间的另一个整数。 如果对于所有下标 i&#xff08;下标从 0 开始&#xff09;&#xff0c;nums[i] nums[…

Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

&#xff3b;导读&#xff3d;Kaggle 的房价预测竞赛从 2016 年 8 月开始&#xff0c;到 2017 年 2 月结束。这段时间内&#xff0c;超过 2000 多人参与比赛&#xff0c;选手采用高级回归技术&#xff0c;基于我们给出的 79 个特征&#xff0c;对房屋的售价进行了准确的预测。今…

使用GRU单元的RNN模型生成唐诗

文章目录1. 读取数据2. 字符索引3. 创建文本序列4. 创建文本编码序列5. 使用GRU单元建立RNN模型6. 文本生成参考 基于深度学习的自然语言处理 本文使用 GRU 单元建立 RNN 网络&#xff0c;使用唐诗三百首进行训练&#xff0c;使用模型生成唐诗。 GRU RNN 网络能够克服简单RNN…

Python数据结构常见的八大排序算法(详细整理)

前言 八大排序&#xff0c;三大查找是《数据结构》当中非常基础的知识点&#xff0c;在这里为了复习顺带总结了一下常见的八种排序算法。 常见的八大排序算法&#xff0c;他们之间关系如下&#xff1a; 排序算法.png 他们的性能比较&#xff1a; 下面&#xff0c;利用Python分别…

牛客 牛牛选物(01背包)

文章目录1. 题目2. 解题1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/9887/A 来源&#xff1a;牛客网 牛牛有现在有n个物品&#xff0c;每个物品有一个体积v[i]和重量g[i],他想选择其中总体积恰好为V的若干个物品&#xff0c;想使这若干个物品的总重量最大&…

微信小程序最常用的布局——Flex布局

最近在学习微信小程序&#xff0c;在设计首页布局的时候&#xff0c;新认识了一种布局方式display:flex 1 .container { 2 display: flex; 3 flex-direction: column; 4 align-items: center; 5 background-color: #b3d4db; 6 } 编译之后的效果很明显&#xff0c;界面…

LeetCode 649. Dota2 参议院(循环队列)

文章目录1. 题目2. 解题1. 题目 Dota2 的世界里有两个阵营&#xff1a;Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中&#xff0c;每一位参议员都可以行…

'[linux下tomcat 配置

tomcat目录结构bin ——Tomcat执行脚本目录 conf ——Tomcat配置文件 lib ——Tomcat运行需要的库文件&#xff08;JARS&#xff09; logs ——Tomcat执行时的LOG文件 temp ——Tomcat临时文件存放目录 webapps ——Tomcat的主要Web发布目录&#xff08;存放我们自己的JSP,SER…

微信小程序基础(一)

一.注册小程序账号&#xff0c;下载IDE 1.官网注册https://mp.weixin.qq.com/&#xff0c;并下载IDE。 2.官方文档一向都是最好的学习资料。 注意&#xff1a; &#xff08;1&#xff09;注册账号之后会有一个appid&#xff0c;新建项目的时候需要填上&#xff0c;不然很多…

[Kaggle] Spam/Ham Email Classification 垃圾邮件分类(RNN/GRU/LSTM)

文章目录1. 读入数据2. 文本处理3. 建模4. 训练5. 测试练习地址&#xff1a;https://www.kaggle.com/c/ds100fa19 相关博文 [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff08;spacy&#xff09; [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff…

微信小程序中实现瀑布流布局和无限加载

瀑布流布局是一种比较流行的页面布局方式&#xff0c;最典型的就是Pinterest.com&#xff0c;每个卡片的高度不都一样&#xff0c;形成一种参差不齐的美感。 在HTML5中&#xff0c;我们可以找到很多基于jQuery之类实现的瀑布流布局插件&#xff0c;轻松做出这样的布局形式。在…

LeetCode 1684. 统计一致字符串的数目(哈希)

文章目录1. 题目2. 解题1. 题目 给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。 如果一个字符串的每一个字符都在 allowed 中&#xff0c;就称这个字符串是 一致 字符串。 请你返回 words 数组中 一致 字符串的数目。 示例 1&#xff1a; 输入&#xff…

微信小程序:页面跳转时传递数据到另一个页面

一、功能描述 页面跳转时&#xff0c;同时把当前页面的数据传递给跳转的目标页面&#xff0c;并在跳转后的目标页面进行展示 二、功能实现 1. 代码实现 test1页面 // pages/test1/test1.js Page({/*** 页面的初始数据*/data: {name:Tom,age:12},buttonListener:function(){…

LeetCode 1685. 有序数组中差绝对值之和(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个 非递减 有序整数数组 nums 。 请你建立并返回一个整数数组 result&#xff0c;它跟 nums 长度相同&#xff0c;且result[i] 等于 nums[i] 与数组中所有其他元素差的绝对值之和。 换句话说&#xff0c; result[i] 等于 sum(|nums[i]-…

对一个 复杂的json结果进行取值的例子

1 JSON结果集 1 [2 {3 "J_LP_OPERATE_MAIN": {4 "ID": "1900036295",5 "FILL_MAN": "周兴福",6 "FILL_DEPT": "运维一班",7 "STATE…

微信小程序正则判断姓名和手机号

一、页面效果 二、json文件 //获取应用实例 const app getApp() Page({/*** 页面的初始数据*/data: {array: [速美, 现代, 淮安],mode: scaleToFill,src: ../../images/1.png,userInfo: {},hasUserInfo: false,canIUse: wx.canIUse(button.open-type.getUserInfo),userName: …

LeetCode 1686. 石子游戏 VI(贪心)

文章目录1. 题目2. 解题283 / 1660&#xff0c;前17%681 / 6572&#xff0c;前10.4%1. 题目 Alice 和 Bob 轮流玩一个游戏&#xff0c;Alice 先手。 一堆石子里总共有 n 个石子&#xff0c;轮到某个玩家时&#xff0c;他可以 移出 一个石子并得到这个石子的价值。 Alice 和 B…

T4生成实体和简单的CRUD操作

主要跟大家交流下T4,我这里针对的是mysql,我本人比较喜欢用mysql,所以语法针对mysql,所以你要准备mysql的DLL了,同理sqlserver差不多,有兴趣可以自己写写,首先网上找了一个T4的帮助类,得到一些数据库属性,命名为 DbHelper.ttinclude <# template debug"false" hos…

LeetCode 1688. 比赛中的配对次数(模拟)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;表示比赛中的队伍数。比赛遵循一种独特的赛制&#xff1a; 如果当前队伍数是 偶数 &#xff0c;那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛&#xff0c;且产生 n / 2 支队伍进入下一轮。如果当前队…