圣诞节即将到了,所以这回通过turtle模块来编写一个表白的小程序

开发时间:2019-12-15

开发工具:Sublime

开发模块:turtle

这里用到了turtle库的相关知识,如果不熟悉可以看我之前的博客:

turtle库相关知识点

首先,我们需要来创建一个函数来承载所有初始化数据,包括画布的大小,画笔的尺寸、颜色、还有画笔的移动速度

以演示图为例子,设置了一个800*600大小的画布,红色画笔宽为5,速度为10

代码如下所示:

def initdata():
t.setup(800,600)
t.pencolor('red')
t.pensize(5)
t.speed(10)

设置好相关属性后,就可以开始作画了

首先画笔位于正中央,若想移动画笔将会在画布上留下痕迹,也就是画上了线条,

但是有些线条,画作本身并不需要,这就需要做到让画笔移动的同时,画布不留痕迹

需要用到up()和down();两个函数,如直译一般作用为抬起画笔和放下画笔

所以操作为,抬起画笔——移动到指定地方——放下画笔

代码如下所示:

ef move_pen(x,y):
t.hideturtle()
t.up()
t.goto(x,y)
t.down()
t.showturtle()

注意:hideturtle()和showturtle()为隐藏画笔和显示画笔。对画作本身毫无影响

绘制演示图中,最难的部分在哪里?

一定是爱心上半部分的两个半圆,所以为方便,我们单独讲这一部分提出来做一个绘制半圆的函数

在turtle库中并没有绘制曲线的函数,最接近的也只有画圆了。

不过我们可以通过割圆法来绘制,也就是将这一段圆弧视为一个边长很短的多边形

所以我们通过for循环来绘制,通过不断偏转方向的小线段组成

代码如下:

def hart_arc():
for i in range(200):
t.right(1)
t.forward(2)

现在我们开始绘制图形draw()

首先表白总要有表白者和被表白者吧,所以我们先创建name和sign来存储名字

之后通过调用初始化函数来获取相关信息

最后就可以操纵画笔开始绘制。

先将画笔移动到(0,-180)的位置,也就是爱心的下部尖端,这就用到了刚刚创建的移动函数,

之后控制画笔调整方向,移动224的距离绘制完成前面的爱心下部的右侧边

然后绘制爱心上半部分,调用hart_arc()绘制了爱心上半部分左侧,

然后调整方向,画笔向左偏转120度,再绘制另一个半圆

最后画笔返回初始位置,画好了第一个爱心,将其填充为粉色。

同理可画第二个爱心,到最后来一个“一箭双❤”就可以了

绘制完成之后,我们就要输出刚刚记载的两个人名了

这需要用到write()函数

代码如下:

def draw():
name=input("请输入表白姓名:")
sign=input("请输入你的大名:")
initdata()
move_pen(0,-180)
t.left(140)
t.fillcolor("pink")
t.begin_fill()
t.forward(224)
hart_arc()
t.left(120)
hart_arc()
t.forward(224)
t.end_fill()
move_pen(x=70, y=160)
t.left(185)
t.circle(-110,185)
t.forward(50)
move_pen(-180,-180)
t.left(180)
t.forward(600)
move_pen(0,50)
t.hideturtle()
t.color('#CD5C5C', 'red')
t.write(name, font=('Arial', 20, 'bold'), align="center")
t.color('red', 'pink')
time.sleep(2)
move_pen(220, -180)
t.hideturtle()
t.write(sign, font=('Arial', 20), align="center")

这样表白的代码就制作完成了

感谢大家支持,总体代码如下:

import turtle as t
import time def initdata():
t.setup(800,600)
t.pencolor('red')
t.pensize(5)
t.speed(10) def move_pen(x,y):
t.hideturtle()
t.up()
t.goto(x,y)
t.down()
t.showturtle() def hart_arc():
for i in range(200):
t.right(1)
t.forward(2) def draw():
name=input("请输入表白姓名:")
sign=input("请输入你的大名:")
initdata()
move_pen(0,-180)
t.left(140)
t.fillcolor("pink")
t.begin_fill()
t.forward(224)
hart_arc()
t.left(120)
hart_arc()
t.forward(224)
t.end_fill()
move_pen(x=70, y=160)
t.left(185)
t.circle(-110,185)
t.forward(50)
move_pen(-180,-180)
t.left(180)
t.forward(600)
move_pen(0,50)
t.hideturtle()
t.color('#CD5C5C', 'red')
t.write(name, font=('Arial', 20, 'bold'), align="center")
t.color('red', 'pink')
time.sleep(2)
move_pen(220, -180)
t.hideturtle()
t.write(sign, font=('Arial', 20), align="center")
def main():
draw()
time.sleep(5)
if __name__ == '__main__':
main()

Pyhton表白代码——浪漫圣诞节的更多相关文章

  1. 零基础入门C/C++实现你的浪漫表白:浪漫流星雨表白程序

    想要讨女朋友欢心也巩固自己所学的知识,各位小伙伴有自己的想法了吗?准备好想要怎样实施了吗?有什么美好的计划了吗?如果没有的话那么别慌,我知道,在座的各位肯定都是有自己的心仪的姑娘,那么今天就教大家一招 ...

  2. 520 简单表白代码(JS)

    这两天不知道咋了,迷迷糊糊的,突然知道今天是520的我,急急忙忙赶出个程序(新手,代码有点乱),发出来大家一起研究下(参考百度的). <!DOCTYPE html> <html> ...

  3. 【Python】表白代码

    # -*- coding:utf-8 -*- import turtle import time # 画爱心的顶部 def LittleHeart(): for i in range(200): tu ...

  4. Pyhton 一行代码求Fibonacci第N项

    递归定义很简单,效率当然很低下,且极易超出栈空间大小. 这样做纯粹是为了体现python的语言表现力而已, 并没有任何实际意义. def fib(x): return fib(x-1) + fib(x ...

  5. 表白 代码 韩梦飞沙-画心.html

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 韩梦飞沙-画心.html <!DOCTYPE html> <html& ...

  6. python表白代码1.0桃心输出

    python爱心表达函数初级版本:def my_heart(a,b=2): print("\n".join(["".join([(a[(x-y) % len(a ...

  7. c语言表白程序代码

    双十一要到了,好激动啊!!! 是时候准备出手了! 花了一天的时间写的表白代码. 表示自己弱弱的.....   看了网上好多都是js写的,感觉碉堡了!js用的不熟,前端不好,java,Python写起来 ...

  8. Web前端资源汇总

    本文地址:http://www.cnblogs.com/jihua/p/webfront.html 网页特效库 2017新年快乐特效 CSS3+jQuery实现时钟插件 Html5入门实例" ...

  9. 8款给力HTML5/CSS3应用插件 可爱的HTML5笑脸

    1.HTML5/CSS3实现笑脸动画 非常可爱 今天我们要分享一款基于纯CSS3实现的笑脸动画,我们只要在面部滑动鼠标,即可让人物的眼睛嘴巴动起来,实现微笑的效果,还挺可爱的. 在线演示 源码下载 2 ...

随机推荐

  1. T-SQL Part XII: Access Remote SQL Server

    要链接远程的SQL Server,需要一下几个步骤(以下的步骤都是在远程系统上进行): 确认远程SQL Server所监听的端口号 官方的文档是使用SQL Server Configuration M ...

  2. [笔记]IDEA使用笔记

    1.IDEA的目录结构 2.所有的源文件都必须写在src文件夹下, 3.输入psvm再按回车,就会生成主函数: 4.输入sout就会生成输出语句的格式: 5.ALT+4   调出上次运行的结果出来看看 ...

  3. pat 1008 Elevator(20 分)

    1008 Elevator(20 分) The highest building in our city has only one elevator. A request list is made u ...

  4. hdu 2255 奔小康赚大钱 (KM)

    奔小康赚大钱Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. 【Java】面向对象之继承

    多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可.其中如图中所示,食草动物.食肉动物.兔子.羊.狮子.豹都可以称为子类,动物类称为父 ...

  6. 附009.Kubernetes永久存储之GlusterFS独立部署

    一 前期准备 1.1 基础知识 Heketi提供了一个RESTful管理界面,可以用来管理GlusterFS卷的生命周期.Heketi会动态在集群内选择bricks构建所需的volumes,从而确保数 ...

  7. python-语言元素

    变量命令 对于每个变量我们需要给它取一个名字.在python中,变量命名需要遵循一下这些必须遵守硬性规则和强烈建议遵守的非硬性规则. 硬性规则 变量名由字母(广义的Unicode字符,不包括特殊字符) ...

  8. 读取JDK API文档,并根据单词出现频率排序

    1,拿到 API 文档 登录 https://docs.oracle.com/javase/8/docs/api/ , 选中特定的类,然后 copy 其中的内容, 放入 TXT 文件中 , 2,读取T ...

  9. ftp用户和密码

    centos7 FTP修改密码: 1.查看ftp的用户:cat /etc/vsftpd/ftpusers 2.passwd ftp的用户 (输入两次) 3.重启ftp:service vsftpd r ...

  10. 从零开始入门 | Kubernetes 中的服务发现与负载均衡

    作者 | 阿里巴巴技术专家  溪恒 一.需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用,与传统的应用部署不同,传统应用部署在给定的机器上面去部署,我们知道怎么去调用别的机 ...