本文将介绍利用Python画多种不同的爱心形态,表白代码看这一篇文章就够啦,有感兴趣的朋友可以收藏起来。
1、三维爱心
效果图:
首先安装matplotlib
参考代码:
#!/usr/bin/env python3
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as npdef heart_3d(x,y,z):return (x**2+(9/4)*y**2+z**2-1)**3-x**2*z**3-(9/80)*y**2*z**3def plot_implicit(fn, bbox=(-1.5, 1.5)):''' create a plot of an implicit functionfn ...implicit function (plot where fn==0)bbox ..the x,y,and z limits of plotted interval'''xmin, xmax, ymin, ymax, zmin, zmax = bbox*3fig = plt.figure()ax = fig.add_subplot(111, projection='3d')A = np.linspace(xmin, xmax, 100) # resolution of the contourB = np.linspace(xmin, xmax, 40) # number of slicesA1, A2 = np.meshgrid(A, A) # grid on which the contour is plottedfor z in B: # plot contours in the XY planeX, Y = A1, A2Z = fn(X, Y, z)cset = ax.contour(X, Y, Z+z, [z], zdir='z', colors=('r',))# [z] defines the only level to plot# for this contour for this value of zfor y in B: # plot contours in the XZ planeX, Z = A1, A2Y = fn(X, y, Z)cset = ax.contour(X, Y+y, Z, [y], zdir='y', colors=('red',))for x in B: # plot contours in the YZ planeY, Z = A1, A2X = fn(x, Y, Z)cset = ax.contour(X+x, Y, Z, [x], zdir='x',colors=('red',))# must set plot limits because the contour will likely extend# way beyond the displayed level. Otherwise matplotlib extends the plot limits# to encompass all values in the contour.ax.set_zlim3d(zmin, zmax)ax.set_xlim3d(xmin, xmax)ax.set_ylim3d(ymin, ymax)plt.show()if __name__ == '__main__':plot_implicit(heart_3d)#!/usr/bin/env python3
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as npdef heart_3d(x,y,z):return (x**2+(9/4)*y**2+z**2-1)**3-x**2*z**3-(9/80)*y**2*z**3def plot_implicit(fn, bbox=(-1.5, 1.5)):''' create a plot of an implicit functionfn ...implicit function (plot where fn==0)bbox ..the x,y,and z limits of plotted interval'''xmin, xmax, ymin, ymax, zmin, zmax = bbox*3fig = plt.figure()ax = fig.add_subplot(111, projection='3d')A = np.linspace(xmin, xmax, 100) # resolution of the contourB = np.linspace(xmin, xmax, 40) # number of slicesA1, A2 = np.meshgrid(A, A) # grid on which the contour is plottedfor z in B: # plot contours in the XY planeX, Y = A1, A2Z = fn(X, Y, z)cset = ax.contour(X, Y, Z+z, [z], zdir='z', colors=('r',))# [z] defines the only level to plot# for this contour for this value of zfor y in B: # plot contours in the XZ planeX, Z = A1, A2Y = fn(X, y, Z)cset = ax.contour(X, Y+y, Z, [y], zdir='y', colors=('red',))for x in B: # plot contours in the YZ planeY, Z = A1, A2X = fn(x, Y, Z)cset = ax.contour(X+x, Y, Z, [x], zdir='x',colors=('red',))# must set plot limits because the contour will likely extend# way beyond the displayed level. Otherwise matplotlib extends the plot limits# to encompass all values in the contour.ax.set_zlim3d(zmin, zmax)ax.set_xlim3d(xmin, xmax)ax.set_ylim3d(ymin, ymax)plt.show()if __name__ == '__main__':plot_implicit(heart_3d)
2、红色爱心
效果图:
参考代码:
import turtleturtle.bgcolor("black")
turtle.pensize(2)
sizeh = 1.2def curve():for ii in range(200):turtle.right(1)turtle.forward(1 * sizeh)turtle.speed(0)
turtle.color("red", "red")
turtle.begin_fill()
turtle.left(140)
turtle.forward(111.65 * sizeh)
curve()
turtle.left(120)
curve()
turtle.forward(111.65 * sizeh)
turtle.end_fill()
turtle.hideturtle()
3、Love字体爱心
效果图:
参考代码:
import time
words = input('请输出想要表达的文字:')
#例子:words = "Dear lili, Happy Valentine's Day! Lyon Will Always Love You Till The End! ♥ Forever! ♥"
for item in words.split():#要想实现打印出字符间的空格效果,此处添加:item = item+' 'letterlist = []#letterlist是所有打印字符的总list,里面包含y条子列表list_Xfor y in range(12, -12, -1):list_X = []#list_X是X轴上的打印字符列表,里面装着一个String类的lettersletters = ''#letters即为list_X内的字符串,实际是本行要打印的所有字符for x in range(-30, 30):#*是乘法,**是幂次方expression = ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3if expression <= 0:letters += item[(x-y) % len(item)]else:letters += ' 'list_X.append(letters)letterlist += list_Xprint('\n'.join(letterlist))time.sleep(1.5);
但是,有点太单调了点,来,将代码简单改造一下,实现动态输出心形的,代码如下:
import time
words = input('请输出想要表达的文字:')
for item in words.split():print('\n'.join([''.join([(item[(x-y) % len(item)] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(12, -12, -1)]))time.sleep(1.5)
4、粉色桃心
效果图:
参考代码:
# -*- coding:utf-8 -*-
import turtle
import time# 画爱心的顶部
def LittleHeart():for i in range(200):turtle.right(1)turtle.forward(2)# 输入表白的语句,默认I Love you
love = input('请输入表白语句,默认为输入为"I Love you": ')
# 输入署名或者赠谁,没有不执行
me = input('请输入您心上人的姓名或者昵称: ')
if love == '':love = 'I Love you'
# 窗口大小
turtle.setup(width=800, height=500)
# 颜色
turtle.color('red', 'pink')
# 笔粗细
turtle.pensize(5)
# 速度
turtle.speed(1)
# 提笔
turtle.up()
# 隐藏笔
turtle.hideturtle()
# 去到的坐标,窗口中心为0,0
turtle.goto(0, -180)
turtle.showturtle()
# 画上线
turtle.down()
turtle.speed(1)
turtle.begin_fill()
turtle.left(140)
turtle.forward(224)
# 调用画爱心左边的顶部
LittleHeart()
# 调用画爱右边的顶部
turtle.left(120)
LittleHeart()
# 画下线
turtle.forward(224)
turtle.end_fill()
turtle.pensize(5)
turtle.up()
turtle.hideturtle()
# 在心中写字 一次
turtle.goto(0, 0)
turtle.showturtle()
turtle.color('#CD5C5C', 'pink')
# 在心中写字 font可以设置字体自己电脑有的都可以设 align开始写字的位置
turtle.write(love, font=('gungsuh', 30,), align="center")
turtle.up()
turtle.hideturtle()
time.sleep(2)
# 在心中写字 二次
turtle.goto(0, 0)
turtle.showturtle()
turtle.color('red', 'pink')
turtle.write(love, font=('gungsuh', 30,), align="center")
turtle.up()
turtle.hideturtle()
# 写署名
if me != '':turtle.color('black', 'pink')time.sleep(2)turtle.goto(180, -180)turtle.showturtle()turtle.write(me, font=(20,), align="center", move=True)# 点击窗口关闭
window = turtle.Screen()
window.exitonclick()
5、火柴人爱心
效果图:
参考代码:
#2.14
from turtle import *
from time import sleepdef go_to(x, y):up()goto(x, y)down()def head(x,y,r):go_to(x,y)speed(1)circle(r)leg(x,y)def leg(x,y):right(90)forward(180)right(30)forward(100)left(120)go_to(x,y-180)forward(100)right(120)forward(100)left(120)hand(x,y)def hand(x,y):go_to(x,y-60)forward(100)left(60)forward(100)go_to(x, y - 90)right(60)forward(100)right(60)forward(100)left(60)eye(x,y)def eye(x,y):go_to(x-50,y+130)right(90)forward(50)go_to(x+40,y+130)forward(50)left(90)def big_Circle(size):speed(20)for i in range(150):forward(size)right(0.3)
def line(size):speed(1)forward(51*size)def small_Circle(size):speed(10)for i in range(210):forward(size)right(0.786)def heart(x, y, size):go_to(x, y)left(150)begin_fill()line(size)big_Circle(size)small_Circle(size)left(120)small_Circle(size)big_Circle(size)line(size)end_fill()def main():pensize(2)color('red', 'pink')head(-120, 100, 100)heart(250, -80, 1)go_to(200, -300)write("To: 智慧与美貌并存的", move=True, align="left", font=("楷体", 20, "normal"))done()main()
动图如下:
6、简单爱心
效果图:
参考代码:
#!/usr/bin/env python# -*- coding:utf-8 -*- import turtle
import time# 画心形圆弧def hart_arc():for i in range(200):turtle.right(1)turtle.forward(2)def move_pen_position(x, y):turtle.hideturtle() # 隐藏画笔(先)turtle.up() # 提笔turtle.goto(x, y) # 移动画笔到指定起始坐标(窗口中心为0,0)turtle.down() # 下笔turtle.showturtle() # 显示画笔# 初始化turtle.setup(width=800, height=500) # 窗口(画布)大小turtle.color('red', 'pink') # 画笔颜色turtle.pensize(3) # 画笔粗细turtle.speed(1) # 描绘速度# 初始化画笔起始坐标move_pen_position(x=0,y=-180) # 移动画笔位置turtle.left(140) # 向左旋转140度turtle.begin_fill() # 标记背景填充位置# 画心形直线( 左下方 )
turtle.forward(224) # 向前移动画笔,长度为224# 画爱心圆弧hart_arc() # 左侧圆弧
turtle.left(120) # 调整画笔角度
hart_arc() # 右侧圆弧# 画心形直线( 右下方 )turtle.forward(224)turtle.end_fill() # 标记背景填充结束位置# 点击窗口关闭程序window = turtle.Screen()window.exitonclick()
7、一箭双心
效果图:
参考代码:
from turtle import *
from time import sleepdef go_to(x, y):up()goto(x, y)down()def big_Circle(size): #函数用于绘制心的大圆speed(1)for i in range(150):forward(size)right(0.3)def small_Circle(size): #函数用于绘制心的小圆speed(1)for i in range(210):forward(size)right(0.786)def line(size):speed(1)forward(51*size)def heart( x, y, size):go_to(x, y)left(150)begin_fill()line(size)big_Circle(size)small_Circle(size)left(120)small_Circle(size)big_Circle(size)line(size)end_fill()def arrow():pensize(10)setheading(0)go_to(-400, 0)left(15)forward(150)go_to(339, 178)forward(150)def arrowHead():pensize(1)speed(1)color('red', 'red')begin_fill()left(120)forward(20)right(150)forward(35)right(120)forward(35)right(150)forward(20)end_fill()def main():pensize(2)color('red', 'pink')#getscreen().tracer(30, 0) #取消注释后,快速显示图案heart(200, 0, 1) #画出第一颗心,前面两个参数控制心的位置,函数最后一个参数可控制心的大小setheading(0) #使画笔的方向朝向x轴正方向heart(-80, -100, 1.5) #画出第二颗心arrow() #画出穿过两颗心的直线arrowHead() #画出箭的箭头go_to(400, -300)write("author:520Python", move=True, align="left", font=("宋体", 30, "normal"))done()main()
点击领取.福利多多
①行业咨询、大佬在线专业解答有
②Python开发环境安装教程有
③Python400集自学视频有
④软件开发常用词汇有
⑤Python学习路线图有
⑥3000多本Python电子书有 如果你用得到的话可以直接拿走,在我的QQ技术交流群里群号:675240729(纯技术交流和资源共享,广告勿入)以自助拿走
这篇文章到这里结束了,更多有关Python精彩内容可以关注小编看小编主页或点击上分福利多多。