专栏首页Python小二用 Python 写个七夕表白神器

用 Python 写个七夕表白神器

今天是七夕节,相比于现代人自创的 502,不对是 520,七夕才是中国传统意义上的情人节,本文分享几个 Python 表白程序,情侣可以现学现用,单身的话也可以先收藏一下,说不定下次就用上了。

爱心树

首先,我们来画一棵长满爱心果实的树。

主要实现代码:

# 画爱心
def love(x, y): 
    lv = turtle.Turtle()
    lv.hideturtle()
    lv.up()
    # 定位
    lv.goto(x, y)
    # 画圆弧
    def curvemove():  
        for i in range(20):
            lv.right(10)
            lv.forward(2)

    lv.color('red', 'pink')
    lv.speed(10000000)
    lv.pensize(1)
    lv.down()
    lv.begin_fill()
    lv.left(140)
    lv.forward(22)
    curvemove()
    lv.left(120)
    curvemove()
    lv.forward(22)
    # 画完复位
    lv.left(140)  
    lv.end_fill()

# 画树
def tree(branchLen, t):
    # 剩余树枝太少要结束递归
    if branchLen > 5:
        # 如果树枝剩余长度较短则变绿
        if branchLen < 20:  
            t.color("green")
            t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
            t.down()
            t.forward(branchLen)
            love(t.xcor(), t.ycor())  
            t.up()
            t.backward(branchLen)
            t.color("brown")
            return
        t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
        t.down()
        t.forward(branchLen)
        # 以下递归
        ang = random.uniform(15, 45)
        t.right(ang)
        # 随机决定减小长度
        tree(branchLen - random.uniform(12, 16), t)  
        t.left(2 * ang)
        # 随机决定减小长度
        tree(branchLen - random.uniform(12, 16), t)  
        t.right(ang)
        t.up()
        t.backward(branchLen)

表白气球

我们接着看一下表白气球的实现,要实现的效果是:随机生成各种颜色向上漂浮的气球,点击气球会破。

主要实现代码如下:

# 气球
balloons = []
# 颜色
color_option = ["red", "blue", "green", "purple", "pink", "yellow", "orange"]
# 气球大小
size = 50
# 气球线
def line(x, y, a, b, line_width=1, color_name="black"):
    up()
    goto(x, y)
    down()
    color(color_name)
    width(line_width)
    goto(a, b)

def distance(x, y, a, b):
    # 判断鼠标点击位置和气球坐标的距离
    return ((a - x) ** 2 + (b - y) ** 2) ** 0.5
def tap(x, y):
    for i in range(len(balloons)):
        # 判断是否点击气球队列中的其中一个
        if distance(x, y, balloons[i][0], balloons[i][1]) < (size / 2):
            # 删除气球
            balloons.pop(i)  
            return  
def draw():
    # 清除画布
    clear()
    for i in range(1, (len(balloons) + 1)):  
        line(balloons[-i][0], balloons[-i][1], balloons[-i][0], balloons[-i][1] - size * 1.5, 1)
        up()  
        goto(balloons[-i][0], balloons[-i][1])
        # 画原点,参数为大小和颜色
        dot(size, balloons[-i][2])
        # 改变纵坐标,模仿气球上升
        balloons[-i][1] = balloons[-i][1] + 1
    # 修改画布
    update()  
def gameLoop():
    # 1/50 的概率生成一个气球
    if randrange(0, 50) == 1:
        # 气球坐标,在边框位置减去气球大小
        x = randrange(-200 + size, 200 - size)
        # 随机在颜色队列选择一个颜色
        c = choice(color_option)
        # 添加气球队列
        balloons.append([x, -200 - size, c])  
    draw()
    ontimer(gameLoop, 10)  

表白卡

我们可以通过 Python 在原有照片上添加一些适合主题的诗词来制作表白卡。

原图:

效果图:

主要实现代码如下:

img = cv2.imread('test.png')
mask = np.zeros(img.shape[:2], np.uint8)
size = (1, 65)
bgd = np.zeros(size, np.float64)
fgd = np.zeros(size, np.float64)
rect = (1, 1, img.shape[1], img.shape[0])
cv2.grabCut(img, mask, rect, bgd, fgd, 10, cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask == 2) | (mask == 0), 1, 255)
img = img.astype(np.int32)
img *= mask2[:, :, np.newaxis]
img[img>255] = 255
img =img.astype(np.uint8)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img, 'RGB')
img.save('test1.jpg')
fp = open(r"word.txt", "r", encoding="utf-8")
text = fp.read()
mask_pic=np.array(Image.open(r"test1.jpg"))
wordcloud = WordCloud(font_path='hyr3gjm.ttf',mask=mask_pic,max_words=200).generate(text)
image=wordcloud.to_image()
image.save("wordcloud2.png")
cloud_data = np.array(image)
alpha = np.copy(cloud_data[:,:,0])
alpha[alpha>0] = 255
new_image = Image.fromarray(np.dstack((cloud_data, alpha)))
card = Image.open("test.png")
card = card.convert("RGBA")
card.paste(new_image, (0,0), mask=new_image)
card.save("card.png")

本文分享自微信公众号 - Python小二(chengxuzhijian),作者:Python小二

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何用 Python 来绘制玫瑰图等常见疫情图

    新冠疫情已经持续好几个月了,目前,我国疫情已经基本控制住了,我们会看到很多网站都提供了多种疫情统计图,今天我们使用 Python 的 pyecharts 框架来...

    Python小二
  • 《民国奇探》的弹幕有点逗比,用 Python 爬下来看看

    电视剧《民国奇探》是一部充斥着逗比风的探案剧,剧中主要角色:三土、四爷、白小姐,三土这个角色类似于《名侦探柯南》中的柯南但带有搞笑属性,四爷则类似于毛利小五郎但...

    Python小二
  • Python 数据分析(四):Pandas 进阶

    我们在上一篇文章初识 Pandas中已经对 Pandas 作了一些基本介绍,本文我们进一步来学习 Pandas 的一些使用。

    Python小二
  • OpenCV检测轮廓极点(Python C++)

    今天分享一个OpenCV检测轮廓极点实例,原图如下,我们需要检测出地图中最大轮廓的上下左右四个极点,并进行标注显示。

    Color Space
  • 查找树ADT--二叉查找树

    二叉查找树的性质:对于树中的每个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项。这意味着该树所有的元素可以用某种一致的方式排序...

    233333
  • linux网络编程之System V 信号量(三):基于生产者-消费者模型实现先进先出的共享内存段

    生产者消费者问题:该问题描述了两个共享固定大小缓冲区的进程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到...

    s1mba
  • 科技巨头抢滩登陆,互联网消费金融ABS挑战与机遇同在

    作为互联网金融的细分领域,互联网消费金融正在经历一场巨大变革。互联网金融红利期的减退、政策层面的监管、用户需求的不断增加都促使消费金融进行新的调整,以满足不断出...

    孟永辉
  • 当我们谈论计算机科学

    下午偶有所悟,特作此文防止青年痴呆。 这学期的学习算是走了一半计算机科学概论。广度的学习通常会被指责为广而不精,但对我而言这是毫无意义的,因为 ...

    racaljk
  • Redis(一):服务启动及基础请求处理流程源码解析

    redis是用c语言的写的缓存服务器,有高性能和多种数据类型支持的特性,广受互联网公司喜爱。

    烂猪皮
  • LeetCode 28. Implement strStr()题目分析代码

    对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不...

    desperate633

扫码关注云+社区

领取腾讯云代金券