本文正在参加「Python主题月」,详情查看 活动链接
七夕节将至,python帮你表白
七夕情人节快到了兄弟们,作为程序员一年又一年的送玫瑰花太俗套了,拿上我们手头的饭碗送给她专属的情人节礼物吧。
一箭穿心如何?我们借助turtle
--- 海龟绘图¶。知识点你自己去翻阅官方文档吧。本文将详细讲解绘画过程。
首先绘制屏幕大小
就以电脑整个屏幕绘制,电脑桌面右键->显示设置。找到电脑分辨率1920x1080,那么我们就以这个大小绘制屏幕。并且加上当点击时退出的方法。
import turtle
if __name__ == '__main__':
turtle.setup(width=1920, height=1080)
window = turtle.Screen()
window.exitonclick()
复制代码
寻找合适的起始值
1、我们知道屏幕的中心点是(0,0),那么我们的起始值应该在(0,y),根据尝试(0,200)较为合适。
2、那么我们应该将画笔从(0,0)移到(0,200).
3、默认的画笔是黑色的且在屏幕上处于绘画状态,所以我们将笔隐藏,而且画笔移动的效果我们也没必要观看。
4、设置笔的颜色和粗细速度
import turtle
if __name__ == '__main__':
turtle.setup(width=1920, height=1080)
turtle.color('red', "pink")
turtle.pensize(5)
turtle.speed(5)
turtle.up()
turtle.hideturtle()
turtle.goto(0, 200)
window = turtle.Screen()
window.exitonclick()
复制代码
起笔画左上部分的心
1、将隐藏的画笔显示出来
2、将画笔绘画的路径显示出来
3、向左120°起笔,一边向左旋转,一边绘画。
4、画完的心填充上颜色,所以绘画之前准备填充。
import turtle
if __name__ == '__main__':
turtle.setup(width=1920, height=1080)
turtle.color('red', "pink")
turtle.pensize(5)
turtle.speed(5)
turtle.up()
turtle.hideturtle()
turtle.goto(0, 200)
turtle.showturtle()
turtle.down()
turtle.begin_fill()
turtle.left(120)
turtle.down()
for i in range(200):
turtle.left(1)
turtle.forward(2)
window = turtle.Screen()
window.exitonclick()
复制代码
图像如下
起笔画右上部分的心
1、转移到(0,200)位置,还是上述的流程,所以将回到初始点的方法,封装起来。
2、画笔显现也是重复操作封装成方法。
3、画上边心的过程也几乎相似。
import turtle
def returnInitialPoint(x: int, y: int):
turtle.up()
turtle.hideturtle()
turtle.goto(x, y)
turtle.showturtle()
turtle.down()
def upperHalfHeart(firstDirection: str, parameter: int, rangeParameter: int, direction: str, dParameter: int,
forwardParameter: int):
turtle.left(parameter) if firstDirection == "left" else turtle.right(parameter)
for i in range(rangeParameter):
turtle.left(dParameter) if direction == "left" else turtle.right(dParameter)
turtle.forward(forwardParameter)
if __name__ == '__main__':
turtle.setup(width=1920, height=1080)
turtle.color('red', "pink")
turtle.pensize(5)
turtle.speed(7)
returnInitialPoint(0, 200)
turtle.begin_fill()
upperHalfHeart("left", 120, 200, "left", 1, 2)
returnInitialPoint(0, 200)
upperHalfHeart("left", 100, 200, "right", 1, 2)
window = turtle.Screen()
window.exitonclick()
复制代码
图像如下
画下半部分心
向左画到中间,然后转笔90°画相同的长度。
import turtle
def returnInitialPoint(x: int, y: int):
turtle.up()
turtle.hideturtle()
turtle.goto(x, y)
turtle.showturtle()
turtle.down()
def upperHalfHeart(firstDirection: str, parameter: int, rangeParameter: int, direction: str, dParameter: int,
forwardParameter: int):
turtle.left(parameter) if firstDirection == "left" else turtle.right(parameter)
for i in range(rangeParameter):
turtle.left(dParameter) if direction == "left" else turtle.right(dParameter)
turtle.forward(forwardParameter)
if __name__ == '__main__':
turtle.setup(width=1920, height=1080)
turtle.color('red', "pink")
turtle.pensize(5)
turtle.speed(7)
returnInitialPoint(0, 200)
turtle.begin_fill()
upperHalfHeart("left", 120, 200, "left", 1, 2)
returnInitialPoint(0, 200)
upperHalfHeart("left", 100, 200, "right", 1, 2)
turtle.left(5)
turtle.forward(243)
turtle.right(90)
turtle.forward(243)
window = turtle.Screen()
window.exitonclick()
复制代码
图像如下
一个完整的心就被画出来了。
填充颜色
turtle.end_fill()
复制代码
画第二个心
与上述的流程基本差不多,不再赘述。
import turtle
def returnInitialPoint(x: int, y: int):
turtle.up()
turtle.hideturtle()
turtle.goto(x, y)
turtle.showturtle()
turtle.down()
def upperHalfHeart(firstDirection: str, parameter: int, rangeParameter: int, direction: str, dParameter: int,
forwardParameter: int):
turtle.left(parameter) if firstDirection == "left" else turtle.right(parameter)
for i in range(rangeParameter):
turtle.left(dParameter) if direction == "left" else turtle.right(dParameter)
turtle.forward(forwardParameter)
def arrowHead():
turtle.pensize(1)
turtle.speed(1)
turtle.color('red', 'red')
turtle.begin_fill()
turtle.left(120)
turtle.forward(20)
turtle.right(150)
turtle.forward(35)
turtle.right(120)
turtle.forward(35)
turtle.right(150)
turtle.forward(20)
if __name__ == '__main__':
turtle.setup(width=1920, height=1080)
turtle.color('red', "pink")
turtle.pensize(5)
turtle.speed(7)
returnInitialPoint(0, 200)
turtle.begin_fill()
upperHalfHeart("left", 120, 200, "left", 1, 2)
returnInitialPoint(0, 200)
upperHalfHeart("left", 100, 200, "right", 1, 2)
turtle.left(5)
turtle.forward(243)
turtle.right(90)
turtle.forward(243)
turtle.end_fill()
returnInitialPoint(130, 90)
turtle.begin_fill()
upperHalfHeart("right", 30, 100, "left", 2, 2)
returnInitialPoint(130, 90)
upperHalfHeart("left", 130, 100, "right", 2, 2)
turtle.right(10)
turtle.forward(145)
turtle.right(90)
turtle.forward(145)
turtle.end_fill()
window = turtle.Screen()
window.exitonclick()
复制代码
画穿心的箭杆
1、找到合适的起始位置(-400,200)
2、设置画笔的宽度,即设置箭杆的粗细,我这个略显有点粗,你可以稍微减减。
3、找到合适箭杆的终止位置。
returnInitialPoint(-400, 200)
turtle.pensize(10)
turtle.goto(339, - 50)
复制代码
画穿心的箭头
1、首先设置箭头的颜色为红色
2、向右旋转50°,前进30像素
3、下同
def arrow():
turtle.speed(1)
turtle.color('red', 'red')
turtle.begin_fill()
turtle.right(50)
turtle.forward(30)
turtle.right(130)
turtle.forward(80)
turtle.right(135)
turtle.forward(80)
turtle.right(135)
turtle.forward(30)
turtle.end_fill()
复制代码
写上两人的名字
1、来到合适的位置
2、设置字体和颜色
3、写字
returnInitialPoint(0, 150)
turtle.color('#CD5C5C', 'pink')
turtle.write("低调的码媛", font=('gungsuh', 30,), align="center")
returnInitialPoint(130, 50)
turtle.write("掘金", font=('gungsuh', 30,), align="center")
复制代码
修改成用户动态输入
name = input('Please enter yourname: ')
girlFrient = input('Please enter your girlfriend's name: ')
复制代码
完整代码
import turtle
def returnInitialPoint(x: int, y: int):
turtle.up()
turtle.hideturtle()
turtle.goto(x, y)
turtle.showturtle()
turtle.down()
def upperHalfHeart(firstDirection: str, parameter: int, rangeParameter: int, direction: str, dParameter: int,
forwardParameter: int):
turtle.left(parameter) if firstDirection == "left" else turtle.right(parameter)
for i in range(rangeParameter):
turtle.left(dParameter) if direction == "left" else turtle.right(dParameter)
turtle.forward(forwardParameter)
def arrow():
turtle.speed(1)
turtle.color('red', 'red')
turtle.begin_fill()
turtle.right(50)
turtle.forward(30)
turtle.right(130)
turtle.forward(80)
turtle.right(135)
turtle.forward(80)
turtle.right(135)
turtle.forward(30)
turtle.end_fill()
if __name__ == '__main__':
name = input('Please enter yourname: ')
girlFrient = input('Please enter your girlfriend's name: ')
turtle.setup(width=1920, height=1080)
turtle.color('red', "pink")
turtle.pensize(5)
turtle.speed(7)
returnInitialPoint(0, 200)
turtle.begin_fill()
upperHalfHeart("left", 120, 200, "left", 1, 2)
returnInitialPoint(0, 200)
upperHalfHeart("left", 100, 200, "right", 1, 2)
turtle.left(5)
turtle.forward(243)
turtle.right(90)
turtle.forward(243)
turtle.end_fill()
returnInitialPoint(130, 90)
turtle.begin_fill()
upperHalfHeart("right", 30, 100, "left", 2, 2)
returnInitialPoint(130, 90)
upperHalfHeart("left", 130, 100, "right", 2, 2)
turtle.right(10)
turtle.forward(145)
turtle.right(90)
turtle.forward(145)
turtle.end_fill()
returnInitialPoint(-400, 200)
turtle.pensize(10)
turtle.goto(339, - 50)
arrow()
returnInitialPoint(0, 150)
turtle.color('#CD5C5C', 'pink')
turtle.write(name, font=('gungsuh', 30,), align="center")
returnInitialPoint(130, 50)
turtle.write(girlFrient, font=('gungsuh', 30,), align="center")
window = turtle.Screen()
window.exitonclick()
复制代码
写在最后
本例因为时间原因没有进行精确的计算,只是粗鄙的将它实现了出来,如果你有时间或者有兴趣,可以 将他完善优化。
预祝有情人终成眷属,大家都能表白成功。
近期评论