今天我们做件浪漫的事,就是用Python画颗爱心送给你喜欢的Ta,一边是我们学习的热情,一边是浪漫的学习.先看效果.有没有心里满是Ta的感觉.
Screen Shot 2021-06-26 at 7.19.18 PM.png
Step0. 我们先找一个心形的数学方程式,就是下边这个
image.pngpython实现
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
此刻就是心动的时刻
网友评论