美文网首页
python画颗爱心送给Ta

python画颗爱心送给Ta

作者: 高明无思 | 来源:发表于2021-06-26 19:36 被阅读0次

    今天我们做件浪漫的事,就是用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

          本文链接:https://www.haomeiwen.com/subject/qrizyltx.html