python画颗爱心送给Ta

今天我们做件浪漫的事,就是用Python画颗爱心送给你喜欢的Ta,一边是我们学习的热情,一边是浪漫的学习.先看效果.有没有心里满是Ta的感觉.


Screen Shot 2021-06-26 at 7.19.18 PM.png

Step0. 我们先找一个心形的数学方程式,就是下边这个

image.png

python实现

def heart_fx(x, y):
    '''
        心形方程式
    '''
    return ((x * 0.04)**2 + (y * 0.1)**2 - 1)**3 - (x * 0.05)**2 * (y * 0.1)**3

1.其中的0.04是对x轴的缩放,0.1是对y轴的缩放
2.x**2 是x的2次方计算方式

Step1.我们在心形图形的内部每个坐标点随机显示(我,爱,你)里的一个字符

随机取字符:

def random_world(x, y):
    '''
        根据x-y的结果哈希,随机返回 '我','爱','你',之一,这里也可以使用随机函数random.sample(u'我爱你',1)[0]产生
    '''
    return u'我爱你' [(x - y) % 3]

生成每一行的字符串:

def create_line_world(x, y):
    '''
        在心形坐标内生成每一行的字符
    '''
    return (random_world(x, y) if heart_fx(x, y) <= 0 else'  ')

Step2.生成坐标系,并把上边生成的字符串加入坐标列表中

def draw_heart():

    # 每列的字符集
    l2 = []
    y_start, y_end, y_step = 15, -15, -1
    x_start, x_end, x_step = -35, 35, 2
    #  将纵向每个字符当作 y 坐标的刻度
    for y in range(y_start, y_end, y_step):

        # 每一行的字符列表
        l3 = []
        #  将横向每个字符当作 x 坐标的刻度
        for x in range(x_start, x_end, x_step):
            # 如果 x,y 点在心形内,则将一个字符加入到行,否则加入空字符
            l3.append(create_line_world(x, y))

        # 将每行的字符加入列集合中
        l2.append(''.join(l3))

    # 整个心形的字符串
    l1 = '\n'.join(l2)
   return l1

Step3.打印出带色彩的爱心

def main():
    heart_worlds = draw_heart()
    # 带颜色打印所有的字符
    for i in heart_worlds:
        print("\033[91m" + i, end="", flush=True)

最后贴上完整的代码:
draw_heart.py

#!/usr/bin/env python
# coding: utf-8
# Gao Ming Ming Create At 2021-06-22 19:36:08
# Description:依据心形公式打印心形图形
# python draw_heart.py


def heart_fx(x, y):
    '''
        心形方程式
    '''
    return ((x * 0.04)**2 + (y * 0.1)**2 - 1)**3 - (x * 0.05)**2 * (y * 0.1)**3


def random_world(x, y):
    '''
        根据x-y的结果哈希,随机返回 '我','爱','你',之一,这里也可以使用随机函数random.sample(u'我爱你',1)[0]产生
    '''
    return u'我爱你' [(x - y) % 3]


def create_line_world(x, y):
    '''
        在心形坐标内生成每一行的字符
    '''
    return (random_world(x, y) if heart_fx(x, y) <= 0 else'  ')


def draw_heart():

    # 每列的字符集
    l2 = []
    y_start, y_end, y_step = 15, -15, -1
    x_start, x_end, x_step = -35, 35, 2
    #  将纵向每个字符当作 y 坐标的刻度
    for y in range(y_start, y_end, y_step):

        # 每一行的字符列表
        l3 = []
        #  将横向每个字符当作 x 坐标的刻度
        for x in range(x_start, x_end, x_step):
            # 如果 x,y 点在心形内,则将一个字符加入到行,否则加入空字符
            l3.append(create_line_world(x, y))

        # 将每行的字符加入列集合中
        l2.append(''.join(l3))

    # 整个心形的字符串
    l1 = '\n'.join(l2)
    return l1


def main():
    heart_worlds = draw_heart()
    # 带颜色打印所有的字符
    for i in heart_worlds:
        print("\033[91m" + i, end="", flush=True)


if __name__ == '__main__':
    main()

保存成文件draw_heart.py,执行

python draw_heart.py

此刻就是心动的时刻

你可能感兴趣的:(python画颗爱心送给Ta)