python 一行代码打印爱心
1. 先放代码
print('\n'.join([''.join([('o'[(x-y) % len('o')] 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)]))
2. 语法讲解
2.1 代码逻辑梳理
首先,为了更清晰的分析上面一行代码的逻辑关系,我们将其拆解成下面一个逻辑上更直观清晰的代码书写方式:
str = "o"
for y in range(30, -30, -1):
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:
print(str[(x-y) % len(str)], end='')
else:
print(' ', end='')
print()
芜湖,思路一下子就清晰起来来,其实绘制图形的思路就是在一个30✖️30的区域内,对于符合x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0
约束的格子,按顺序填入str
中的字母。
知道了绘制图形的大致流程,我们进可以对于一行代码
所涉及到的一些语法以及使用技巧进行梳理了。
2.2 .join()
Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串,用法如下:
str = "-"
seq = ("a", "b", "c") # 字符串序列
print str.join( seq )
这样输出的结果如下面所示:
a-b-c
通过上面的例子,我们可以清楚的了解到,str.join(seq)
方法的用法是以前面的str为间隔,连接seq字符串序列中的每一个元素。
所以一行代码的第一层我们就能梳理清楚了:
'/n'.join(seq1)
后面我们来看seq1
中的内容:
''.join(seq2)
seq1
中又套了一层与上面类似的语法,那我们直接将注意力放在seq2
中:
[('o'[(x-y) % len('o')] 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)]
这里是在列表中的两层循环,外层对于y的循环是从-30到30的循环,内层是对x的从-30到30的循环,在每一位,根据判断的情况,打印o
或者
。
转载自:https://juejin.cn/post/7127310366794579998