编程语言
首页 > 编程语言> > 一条python 语句绘制浪漫的心形图案-----附解释(七夕专供)

一条python 语句绘制浪漫的心形图案-----附解释(七夕专供)

作者:互联网

七夕也要好好学习

( x 2 + y 2 − 1 ) 3 = x 2 y 3 (x^2+y^2-1)^3=x^2y^3 (x2+y2−1)3=x2y3

图像如下:
心形线

偶函数,关于y轴对称

##一条python语句实现爱心形状绘制
print('\n'.join([''.join(
    [('Love'[(x - y) % 4]
      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(15, -15, -1)]))

效果如下:

                veLoveLov           veLoveLov               
            eLoveLoveLoveLove   eLoveLoveLoveLove           
          veLoveLoveLoveLoveLoveLoveLoveLoveLoveLov         
         veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL        
        veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov       
        eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove       
        LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL       
        oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLo       
        veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov       
        eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove       
         oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove        
          eLoveLoveLoveLoveLoveLoveLoveLoveLoveLove         
          LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL         
            eLoveLoveLoveLoveLoveLoveLoveLoveLove           
             oveLoveLoveLoveLoveLoveLoveLoveLove            
              eLoveLoveLoveLoveLoveLoveLoveLove             
                veLoveLoveLoveLoveLoveLoveLov               
                  oveLoveLoveLoveLoveLoveLo                 
                    LoveLoveLoveLoveLoveL                   
                       LoveLoveLoveLov                      
                          LoveLoveL                         
                             Lov                            
                              v                             

将表达式转化为循环结构,代码如下:

for y in range(15, -15, -1):#表示从15- -15每隔一个单位取一次值,
    ls=[]
    for x in range(-30, 30):
        tp=((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3
        if tp<=0:  ##点在图像内部
            a=''.join('Love'[(x - y) % 4]) #加字母
        else:   ##点在图像外部
            
            a=''.join(' ') 
    
            #加空格
        ls.append(a)
    s=''.join(ls)
    print(s)

我们可以简单明了的

                veLoveLov           veLoveLov               
            eLoveLoveLoveLove   eLoveLoveLoveLove           
          veLoveLoveLoveLoveLoveLoveLoveLoveLoveLov         
         veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL        
        veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov       
        eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove       
        LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL       
        oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLo       
        veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov       
        eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove       
         oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove        
          eLoveLoveLoveLoveLoveLoveLoveLoveLoveLove         
          LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL         
            eLoveLoveLoveLoveLoveLoveLoveLoveLove           
             oveLoveLoveLoveLoveLoveLoveLoveLove            
              eLoveLoveLoveLoveLoveLoveLoveLove             
                veLoveLoveLoveLoveLoveLoveLov               
                  oveLoveLoveLoveLoveLoveLo                 
                    LoveLoveLoveLoveLoveL                   
                       LoveLoveLoveLov                      
                          LoveLoveL                         
                             Lov                            
                              v                             

其本质上是在一个由指定字符组成的字符串中按照规则绘制一个满足函数约束的图案。

tp=[''.join(['love'[(x-y)%4] for x in range(-30,30)]) for y in range(15,-15,-1)] # 60*30的画布上画出一个爱心的形状.
print('\n'.join(tp))
elovelovelovelovelovelovelovelovelovelovelovelovelovelovelov
lovelovelovelovelovelovelovelovelovelovelovelovelovelovelove
ovelovelovelovelovelovelovelovelovelovelovelovelovelovelovel
velovelovelovelovelovelovelovelovelovelovelovelovelovelovelo
elovelovelovelovelovelovelovelovelovelovelovelovelovelovelov
lovelovelovelovelovelovelovelovelovelovelovelovelovelovelove
ovelovelovelovelovelovelovelovelovelovelovelovelovelovelovel
velovelovelovelovelovelovelovelovelovelovelovelovelovelovelo
elovelovelovelovelovelovelovelovelovelovelovelovelovelovelov
lovelovelovelovelovelovelovelovelovelovelovelovelovelovelove
ovelovelovelovelovelovelovelovelovelovelovelovelovelovelovel
velovelovelovelovelovelovelovelovelovelovelovelovelovelovelo
elovelovelovelovelovelovelovelovelovelovelovelovelovelovelov
lovelovelovelovelovelovelovelovelovelovelovelovelovelovelove
ovelovelovelovelovelovelovelovelovelovelovelovelovelovelovel
velovelovelovelovelovelovelovelovelovelovelovelovelovelovelo
elovelovelovelovelovelovelovelovelovelovelovelovelovelovelov
lovelovelovelovelovelovelovelovelovelovelovelovelovelovelove
ovelovelovelovelovelovelovelovelovelovelovelovelovelovelovel
velovelovelovelovelovelovelovelovelovelovelovelovelovelovelo
elovelovelovelovelovelovelovelovelovelovelovelovelovelovelov
lovelovelovelovelovelovelovelovelovelovelovelovelovelovelove
ovelovelovelovelovelovelovelovelovelovelovelovelovelovelovel
velovelovelovelovelovelovelovelovelovelovelovelovelovelovelo
elovelovelovelovelovelovelovelovelovelovelovelovelovelovelov
lovelovelovelovelovelovelovelovelovelovelovelovelovelovelove
ovelovelovelovelovelovelovelovelovelovelovelovelovelovelovel
velovelovelovelovelovelovelovelovelovelovelovelovelovelovelo
elovelovelovelovelovelovelovelovelovelovelovelovelovelovelov
lovelovelovelovelovelovelovelovelovelovelovelovelovelovelove

列表表达式解释

python列表表达式的正确书写格式。
首先是单层的:
[ fun(i) 1 for i in * 2]

然后是多层的:
[ fun(i,j) for i in * for j in * ]

条件赋值语句 value = a if condition else b

tp=[''.join(
    [('Love'[(x - y) % 4]
      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(15, -15, -1)]
tp
['                                                            ',
 '                                                            ',
 '                                                            ',
 '                veLoveLov           veLoveLov               ',
 '            eLoveLoveLoveLove   eLoveLoveLoveLove           ',
 '          veLoveLoveLoveLoveLoveLoveLoveLoveLoveLov         ',
 '         veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL        ',
 '        veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov       ',
 '        eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove       ',
 '        LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL       ',
 '        oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLo       ',
 '        veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov       ',
 '        eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove       ',
 '         oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove        ',
 '          eLoveLoveLoveLoveLoveLoveLoveLoveLoveLove         ',
 '          LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL         ',
 '            eLoveLoveLoveLoveLoveLoveLoveLoveLove           ',
 '             oveLoveLoveLoveLoveLoveLoveLoveLove            ',
 '              eLoveLoveLoveLoveLoveLoveLoveLove             ',
 '                veLoveLoveLoveLoveLoveLoveLov               ',
 '                  oveLoveLoveLoveLoveLoveLo                 ',
 '                    LoveLoveLoveLoveLoveL                   ',
 '                       LoveLoveLoveLov                      ',
 '                          LoveLoveL                         ',
 '                             Lov                            ',
 '                              v                             ',
 '                                                            ',
 '                                                            ',
 '                                                            ',
 '                                                            ']

小结

列表推导式 [* for i in *]

条件赋值语句 value = a if condition else b

print('\n'.join([''.join(
    [('Love'[(x - y) % 4]
      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(15, -15, -1)]))
                veLoveLov           veLoveLov               
            eLoveLoveLoveLove   eLoveLoveLoveLove           
          veLoveLoveLoveLoveLoveLoveLoveLoveLoveLov         
         veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL        
        veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov       
        eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove       
        LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL       
        oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLo       
        veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov       
        eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove       
         oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove        
          eLoveLoveLoveLoveLoveLoveLoveLoveLoveLove         
          LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL         
            eLoveLoveLoveLoveLoveLoveLoveLoveLove           
             oveLoveLoveLoveLoveLoveLoveLoveLove            
              eLoveLoveLoveLoveLoveLoveLoveLove             
                veLoveLoveLoveLoveLoveLoveLov               
                  oveLoveLoveLoveLoveLoveLo                 
                    LoveLoveLoveLoveLoveL                   
                       LoveLoveLoveLov                      
                          LoveLoveL                         
                             Lov                            
                              v                             
from matplotlib import pyplot as plt
import numpy as np
t = np.linspace(0,6,100)
x = 16*np.sin(t)**3

y = 13*np.cos(t) -5*np.cos(2*t)-2*np.cos(3*t)-np.cos(4*t)
fig = plt.figure(figsize=(5,5),dpi=100)
plt.scatter(x,y)
# plt.axis("off")
plt.show()

  1. fun为映射函数,其输入为后面 i 指代的内容。 ↩︎

  2. *代表的是一个可迭代对象(列表等等) ↩︎

标签:elovelovelovelovelovelovelovelovelovelovelovelovelovelovelov,eLoveLoveLoveLove,v
来源: https://blog.csdn.net/qq_43109064/article/details/119710022