hello? 发表于 2022-8-5 11:22:16

【小甲鱼】【七夕特供】一行流原理看法

希望来看的各位留个言{:10_330:}

昨天小甲鱼发了一行流用python打印出爱心

print('\n'.join([''.join(['ilovefishc'[(x-y)%8]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(-40,40)])for y in range(20,-20,-1)]))

这是小甲鱼的代码

这段代码中重要的就是关于x,y的不等式了

((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0

于是我就将它输入在Desmos中,得到以下图像:



果不其然,是一个心形

通过观察我们可以得出结论:

1. x,y 的取值一定在红心里,也就在红色方框内(只要(x,y)这个点在红心上即可)

2. x一定满足(-40<x<40):因为红色方框左右两端也就±20出头,y也一定满足(-20<y<20)

所以这一行代码就是这么来的

for x in range(-40,40)])for y in range(20,-20,-1)

不过仔细观察上面的代码可以发现两个for 循环不是一起的

如果是一起的,那(x,y)顺序打印出来应该是

(-40,20),(-40,19),(-40,18)......
#这样的话其实是不行的

为什么?我们可以把画面想象成一个80*40的空白画面,(0,0)是这个画面的中心点

那么我们想一下如果是像上面这段代码便利的话,有两个漏洞

1.他是从左往右一列一列遍历每个点(而我们需要的是从上往下一行一行遍历,这样才能打印出正确图案)

2.由于for循环位置不对,在join时导致不能正确地换行,也就是本来该在一行的数据应当组成一个列表

否则效果就是这样









l
o
v
e
f
i
s
i
#省略
.
.
.
#足足有80*40=3200行
所以就要向小甲鱼一样正确摆放好位置,源代码正确的遍历顺序就是(-40,20)#这就是80*40画面的最左上角那个点,(-39,20),(-38,20)......

这样就是从上到下一行一行遍历了

所以还可以把数据改一下

见下图



如果要改变爱心里的文字的,就要注意不要out of range了,%8是为了保证得到的数字在0~7之间(不过小甲鱼这里就因为%8,导致最后的'shc'三个没打印出来,改成%10就可以了)

其他的没什么说的了

以上是个人理解,我是一个新手,有些地方可能有错误,希望大佬萌指出{:10_266:}

青出于蓝 发表于 2022-8-5 11:25:24

厉害厉害{:10_254:}膜拜

hello? 发表于 2022-8-5 11:36:02

这个可以,不过要小很多

tommyyu 发表于 2022-8-5 11:36:47

学习一下

hveagle 发表于 2022-8-5 11:49:59

7夕快乐

不二如是 发表于 2022-8-5 13:34:18

分析的很到位{:10_256:}

柿子饼同学 发表于 2022-8-5 13:56:27

{:10_275:}

hello? 发表于 2022-8-5 14:02:05

不二如是 发表于 2022-8-5 13:34
分析的很到位

这一行流是谁写的{:10_297:}

金装小学生 发表于 2022-8-5 14:25:09

{:10_256:}

Passepartout 发表于 2022-8-5 16:01:25

{:5_106:}

xruiy 发表于 2022-8-5 16:02:04

dal-kk 发表于 2022-8-5 16:20:08

太强了

小甲鱼 发表于 2022-8-5 17:38:02

{:10_279:} 赞一个~

GEO-Shao 发表于 2022-8-5 18:07:49

做最好的自己520 发表于 2022-8-5 23:17:00

{:10_275:}赞~

hornwong 发表于 2022-8-5 23:17:10

{:5_108:}

zxyzdcfy 发表于 2022-8-14 02:47:32

厉害

鬼M^I心窍 发表于 2022-8-15 08:42:02

赞{:10_257:}
页: [1]
查看完整版本: 【小甲鱼】【七夕特供】一行流原理看法