一行代码实现输出爱心图,参考https://zhuanlan.zhihu.com/p/23321351
原理:
1、借助数学函数——((x * 0.05) ** 2 + (y * 0.1) ** 2 - 1) ** 3 - (x * 0.05) ** 2 * (y * 0.1) ** 3,这个是爱心图,具体公式是怎么来的不是很懂,借用下。函数小于等于0就是 爱心图内部。
2、遍历从x轴开始,判断函数小于0的话用字符填充,否则用空格填充
3、遍历从y轴开始,逐行输出
以下是一行代码实现:(网上看到的)
print(' '.join([''.join([('Love'[(x-y) % len('Love')] 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(30, -30, -1)]))
一行写列表推导式实现很牛,但是小菜鸟的我当时一下子也没能看明白,于是乎分解动作:
for y in range(30, -30, -1): value = [] for x in range(-30, 30): if ((x * 0.05) ** 2 + (y * 0.1) ** 2 - 1) ** 3 - (x * 0.05) ** 2 * (y * 0.1) ** 3 <= 0: value.append("*") else: value.append(" ") s = "".join(value) print s
这样的话应该就比较清晰了。
效果图如下:
函数大于0版本