圣诞节即将到了,所以这回通过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 IX, PIVOT and UNPIVOT

    不同于CROSS JOIN, CROSS APPLY, OUTER APPLY,MSDN文档对PIVOT和UNPIVOT 想得重视了一点,单独做了一个页面来介绍. 简单来说,PIVOT用来把行转成列, ...

  2. pat 1041 Be Unique(20 分)

    1041 Be Unique(20 分) Being unique is so important to people on Mars that even their lottery is desig ...

  3. hdu 1233 还是畅通工程 (prim, kruskal)

    还是畅通工程Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  4. nyoj 457-大小写互换

    457-大小写互换 内存限制:64MB 时间限制:1000ms 特判: No 通过数:18 提交数:21 难度:0 题目描述:       现在给出了一个只包含大小写字母的字符串,不含空格和换行,要求 ...

  5. 【前端知识体系-JS相关】JS基础知识总结

    1 变量类型和计算 1.1 值类型和引用类型的区别? 值类型:每个变量都会存储各自的值.不会相互影响 引用类型:不同变量的指针执行了同一个对象(数组,对象,函数) 1.2 typeof可以及检测的数据 ...

  6. BeautifulSoup随笔

    BeautifulSoup是一个类 b = BeautifulSoup(html) b对象有与html结构相关的各种方法和和属性. a = b.findAll('a')获得标签的对象 a对象又有关于属 ...

  7. Redis入门,对Redis的理解和基本环境搭建及操作

    Redis入门使用 参考:https://blog.csdn.net/hellozpc/article/details/81267030 一).缓存的用途举例 1.前端页面广告的数据无需每次查询后台系 ...

  8. ubuntu 16.04上源码编译libjpeg-turbo和使用教程 | compile and use libjpeg-turbo on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/9f626e7a/,欢迎阅读! compile and use libjpeg-turbo on ubuntu 16.04 Seri ...

  9. proxy protocol

    Proxy protocol 是haproxy 作者开发和设计的一个inernet 协议, 用于获取客户端的IP地址. 在使用7层代理是可以向http协议添加X-Forword-For来实现,而4层协 ...

  10. 2019-11-7:练习上传getshell,通过菜刀连接

    一.使用phtstudy搭建环境 1,将emlog源码解压到phpstudy的www目录,复制emlog源码中的src所有文件到需要搭建emlog的目录中,修改emlog配置文件,输入好本机mysql ...