思路

  1. 将字符串分割成列表

  2. 嵌套两个 for 循环,“绘制”出直角坐标系网格

  3. 计算心形函数,将函数内(结果<=0)的部分填充字符,函数外填充空格

  4. 逐行追加到列表中

  5. 打印输出

心形函数(心脏线)

$$ (x^2+y^2-1)^3-x^2y^3=0 $$

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sentence = 'Cardioid'

for char in sentence.split():
finalChar = []
for y in range(15, -15, -1):
col = []
col_content = ''
for x in range(-30, 30):
formula = ((x * 0.045)**2 + (y * 0.1)**2 - 1)**3 - (x * 0.045)**2 * (y * 0.1)**3
if formula <= 0:
col_content += char[(x - y) % len(char)]
else:
col_content += ' '
col.append(col_content)
finalChar += col
print('\n'.join(finalChar))

简化代码

利用 Python 的各种简写和特性对这段代码进行缩减,就会得到广为流传的“一行代码画心形”代码

1
print('\n'.join([''.join([('Cardioid'[(x-y) % 8] if((x*0.045)**2+(y*0.1)**2-1)**3-(x*0.045)**2*(y*0.1)**3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(15, -15, -1)]))

效果

程序输出