沉默的人e 发表于 2020-5-4 12:19:49

做题≠做工程,简洁≠少量

做题≠做工程
简洁≠少量
在悬赏贴中和一位鱼油进行了简单的讨论,得出了这样的结论.
两件事,第一件事,做题与做工程的区别.
先说说做题
经历了高考的,没经历过高考的,经历过大考小考的都知道,做题嘛,练习的话你自己随意了,你是研究方式做练习还是找简单方法无所谓.
可是考试你敢吗,你敢用研究的方法去做吗?比如说选择题,我先用方法A做一遍,在换个方法B做一遍,然后再用C方法验证一下.
除非考试不限时.不然谁敢这么做,我是不敢.
限时考试,我恨不得所有的都用排除法做,或者是"三长一短选最短,三短一长选最长."
{:10_277:}{:10_277:}{:10_277:}{:10_277:}
同样的,程序设计的做题,也是一样的,你要是能找到最快的方法完成这道题,表明含义,那就别用复杂方法了.
一道题,我能敲10个键就能表明含义,我干嘛要敲100个?对吧
这是做题,你能以简单的代码,表明含义,语法正确,没有逻辑错误,就完了.
就像ICPC似的,(我没参加过,听人说的),你得到题目,用复杂方法解决,看着别人组的气球一个一个的都升起来了,你闹心不闹心?
{:9_234:}
再说说做工程
那就不一样了,工程一般比较大,很少有一个人能完成的,当然也有.
重点在于,不能仅仅采用做题的方法,比如说找到最简单的方法解决你现在面临的问题.
你得考虑很多方面.
就像下象棋一样
你不能走一步看到的仅仅是你眼前的这一步.你得能往后看,考虑考虑对手会怎么走,想出策略,你再找出那个你认为会最稳妥的办法.
而这个方法,不一定是当前问题的最优方法.
所以工程上,讲求的是稳定,即使出现问题,也不会导致整体崩溃,除非遭受大的攻击.
在稳定的基础上,再考虑简洁的问题.
第二件事,简洁和少量的事
说实话,如果说简洁跟代码行数少是一回事,大家请看我下面的代码.
<font face="仿宋, 仿宋_GB2312">from functools import reduce
c:int = 50
h:int = 30
D:str = reduce(lambda a,b : f'{a},{b}',list(map(lambda x: round(((2*c*x)/h)**0.5),list(map(int,input("input some numbers").split(','))))))
print(D)</font>这是4行代码.关注第三行,打眼瞅一眼,是不是要疯?
{:5_99:}{:9_230:}{:5_99:}
你的答案一是给你自己看的,而是要给别人看的,三是要给机器看的.
行数少不少?(确实挺少啊)
简洁吗? (...)
正如于初中的时候,做因式分解,
x^2 + 2x +1 = (x + 1)^2
明明右面的式子更少,可是化简结果确是左面的.
所以简洁和少,不是一回事.
何为简洁,简单,整洁,是我个人的理解.
你的代码如果用一行不能够明确,清晰地表达出你的意思
那你就别用了呗.
你又不是在出题考别人.
{:10_277:}{:10_277:}{:10_277:}
像上面这段代码,他确实行数就一行,好像也表达了很多行的含义,可问题是,如果让你改参数,你能否瞬间找到要改的地方并且准确的改掉.我感觉够呛.
既然够呛,那就不能说他是简洁的.
所以说简洁,不是少.
而且正如那位鱼油说的,
靠代码量来评判你代码好坏,那是多么愚蠢的事情!










永恒的蓝色梦想 发表于 2020-5-4 12:23:37

代码应该在高效率的情况下尽量可读。

hrp 发表于 2020-5-4 12:28:10

我在论坛见过不少追求以最少代码实现功能而不管代码可读性的,甚至为了写成一行,代码层层嵌套,可读性非常差,这都是没有必要的

Hello. 发表于 2020-5-4 12:33:31

!function(){"use strict";var r=.5*(Math.sqrt(3)-1),e=(3-Math.sqrt(3))/6,t=1/6,a=(Math.sqrt(5)-1)/4,o=(5-Math.sqrt(5))/20;function i(r){var e;e="function"==typeof r?r:r?function(){var r=0,e=0,t=0,a=1,o=(i=4022871197,function(r){r=r.toString();for(var e=0;e<r.length;e++){var t=.02519603282416938*(i+=r.charCodeAt(e));t-=i=t>>>0,i=(t*=i)>>>0,i+=4294967296*(t-=i)}return 2.3283064365386963e-10*(i>>>0)});var i;r=o(" "),e=o(" "),t=o(" ");for(var n=0;n<arguments.length;n++)(r-=o(arguments))<0&&(r+=1),(e-=o(arguments))<0&&(e+=1),(t-=o(arguments))<0&&(t+=1);return o=null,function(){var o=2091639*r+2.3283064365386963e-10*a;return r=e,e=t,t=o-(a=0|o)}}(r):Math.random,this.p=n(e),this.perm=new Uint8Array(512),this.permMod12=new Uint8Array(512);for(var t=0;t<512;t++)this.perm=this.p,this.permMod12=this.perm%12}function n(r){var e,t=new Uint8Array(256);for(e=0;e<256;e++)t=e;for(e=0;e<255;e++){var a=e+~~(r()*(256-e)),o=t;t=t,t=o}return t}i.prototype={grad3:new Float32Array(),grad4:new Float32Array(),noise2D:function(t,a){var o,i,n=this.permMod12,f=this.perm,s=this.grad3,v=0,h=0,l=0,u=(t+a)*r,d=Math.floor(t+u),p=Math.floor(a+u),M=(d+p)*e,m=t-(d-M),c=a-(p-M);m>c?(o=1,i=0):(o=0,i=1);var y=m-o+e,w=c-i+e,g=m-1+2*e,A=c-1+2*e,x=255&d,q=255&p,D=.5-m*m-c*c;if(D>=0){var S=3*n];v=(D*=D)*D*(s*m+s*c)}var U=.5-y*y-w*w;if(U>=0){var b=3*n];h=(U*=U)*U*(s*y+s*w)}var F=.5-g*g-A*A;if(F>=0){var N=3*n];l=(F*=F)*F*(s*g+s*A)}return 70*(v+h+l)},noise3D:function(r,e,a){var o,i,n,f,s,v,h,l,u,d,p=this.permMod12,M=this.perm,m=this.grad3,c=(r+e+a)*(1/3),y=Math.floor(r+c),w=Math.floor(e+c),g=Math.floor(a+c),A=(y+w+g)*t,x=r-(y-A),q=e-(w-A),D=a-(g-A);x>=q?q>=D?(s=1,v=0,h=0,l=1,u=1,d=0):x>=D?(s=1,v=0,h=0,l=1,u=0,d=1):(s=0,v=0,h=1,l=1,u=0,d=1):q<D?(s=0,v=0,h=1,l=0,u=1,d=1):x<D?(s=0,v=1,h=0,l=0,u=1,d=1):(s=0,v=1,h=0,l=1,u=1,d=0);var S=x-s+t,U=q-v+t,b=D-h+t,F=x-l+2*t,N=q-u+2*t,C=D-d+2*t,P=x-1+.5,T=q-1+.5,_=D-1+.5,j=255&y,k=255&w,z=255&g,B=.6-x*x-q*q-D*D;if(B<0)o=0;else{var E=3*p]];o=(B*=B)*B*(m*x+m*q+m*D)}var G=.6-S*S-U*U-b*b;if(G<0)i=0;else{var H=3*p]];i=(G*=G)*G*(m*S+m*U+m*b)}var I=.6-F*F-N*N-C*C;if(I<0)n=0;else{var J=3*p]];n=(I*=I)*I*(m*F+m*N+m*C)}var K=.6-P*P-T*T-_*_;if(K<0)f=0;else{var L=3*p]];f=(K*=K)*K*(m*P+m*T+m*_)}return 32*(o+i+n+f)},noise4D:function(r,e,t,i){var n,f,s,v,h,l,u,d,p,M,m,c,y,w,g,A,x,q=this.perm,D=this.grad4,S=(r+e+t+i)*a,U=Math.floor(r+S),b=Math.floor(e+S),F=Math.floor(t+S),N=Math.floor(i+S),C=(U+b+F+N)*o,P=r-(U-C),T=e-(b-C),_=t-(F-C),j=i-(N-C),k=0,z=0,B=0,E=0;P>T?k++:z++,P>_?k++:B++,P>j?k++:E++,T>_?z++:B++,T>j?z++:E++,_>j?B++:E++;var G=P-(l=k>=3?1:0)+o,H=T-(u=z>=3?1:0)+o,I=_-(d=B>=3?1:0)+o,J=j-(p=E>=3?1:0)+o,K=P-(M=k>=2?1:0)+2*o,L=T-(m=z>=2?1:0)+2*o,O=_-(c=B>=2?1:0)+2*o,Q=j-(y=E>=2?1:0)+2*o,R=P-(w=k>=1?1:0)+3*o,V=T-(g=z>=1?1:0)+3*o,W=_-(A=B>=1?1:0)+3*o,X=j-(x=E>=1?1:0)+3*o,Y=P-1+4*o,Z=T-1+4*o,$=_-1+4*o,rr=j-1+4*o,er=255&U,tr=255&b,ar=255&F,or=255&N,ir=.6-P*P-T*T-_*_-j*j;if(ir<0)n=0;else{var nr=q]]]%32*4;n=(ir*=ir)*ir*(D*P+D*T+D*_+D*j)}var fr=.6-G*G-H*H-I*I-J*J;if(fr<0)f=0;else{var sr=q]]]%32*4;f=(fr*=fr)*fr*(D*G+D*H+D*I+D*J)}var vr=.6-K*K-L*L-O*O-Q*Q;if(vr<0)s=0;else{var hr=q]]]%32*4;s=(vr*=vr)*vr*(D*K+D*L+D*O+D*Q)}var lr=.6-R*R-V*V-W*W-X*X;if(lr<0)v=0;else{var ur=q]]]%32*4;v=(lr*=lr)*lr*(D*R+D*V+D*W+D*X)}var dr=.6-Y*Y-Z*Z-$*$-rr*rr;if(dr<0)h=0;else{var pr=q]]]%32*4;h=(dr*=dr)*dr*(D*Y+D*Z+D*$+D*rr)}return 27*(n+f+s+v+h)}},i._buildPermutationTable=n,"undefined"!=typeof define&&define.amd&&define(function(){return i}),"undefined"!=typeof exports?exports.SimplexNoise=i:"undefined"!=typeof window&&(window.SimplexNoise=i),"undefined"!=typeof module&&(module.exports=i)}();

我有什么办法呢{:10_277:}{:10_266:}

Hello. 发表于 2020-5-4 12:34:28

{:10_277:}

!function(){"use strict";var r=.5*(Math.sqrt(3)-1),e=(3-Math.sqrt(3))/6,t=1/6,a=(Math.sqrt(5)-1)/4,o=(5-Math.sqrt(5))/20;function i(r){var e;e="function"==typeof r?r:r?function(){var r=0,e=0,t=0,a=1,o=(i=4022871197,function(r){r=r.toString();for(var e=0;e<r.length;e++){var t=.02519603282416938*(i+=r.charCodeAt(e));t-=i=t>>>0,i=(t*=i)>>>0,i+=4294967296*(t-=i)}return 2.3283064365386963e-10*(i>>>0)});var i;r=o(" "),e=o(" "),t=o(" ");for(var n=0;n<arguments.length;n++)(r-=o(arguments))<0&&(r+=1),(e-=o(arguments))<0&&(e+=1),(t-=o(arguments))<0&&(t+=1);return o=null,function(){var o=2091639*r+2.3283064365386963e-10*a;return r=e,e=t,t=o-(a=0|o)}}(r):Math.random,this.p=n(e),this.perm=new Uint8Array(512),this.permMod12=new Uint8Array(512);for(var t=0;t<512;t++)this.perm=this.p,this.permMod12=this.perm%12}function n(r){var e,t=new Uint8Array(256);for(e=0;e<256;e++)t=e;for(e=0;e<255;e++){var a=e+~~(r()*(256-e)),o=t;t=t,t=o}return t}i.prototype={grad3:new Float32Array(),grad4:new Float32Array(),noise2D:function(t,a){var o,i,n=this.permMod12,f=this.perm,s=this.grad3,v=0,h=0,l=0,u=(t+a)*r,d=Math.floor(t+u),p=Math.floor(a+u),M=(d+p)*e,m=t-(d-M),c=a-(p-M);m>c?(o=1,i=0):(o=0,i=1);var y=m-o+e,w=c-i+e,g=m-1+2*e,A=c-1+2*e,x=255&d,q=255&p,D=.5-m*m-c*c;if(D>=0){var S=3*n];v=(D*=D)*D*(s*m+s*c)}var U=.5-y*y-w*w;if(U>=0){var b=3*n];h=(U*=U)*U*(s*y+s*w)}var F=.5-g*g-A*A;if(F>=0){var N=3*n];l=(F*=F)*F*(s*g+s*A)}return 70*(v+h+l)},noise3D:function(r,e,a){var o,i,n,f,s,v,h,l,u,d,p=this.permMod12,M=this.perm,m=this.grad3,c=(r+e+a)*(1/3),y=Math.floor(r+c),w=Math.floor(e+c),g=Math.floor(a+c),A=(y+w+g)*t,x=r-(y-A),q=e-(w-A),D=a-(g-A);x>=q?q>=D?(s=1,v=0,h=0,l=1,u=1,d=0):x>=D?(s=1,v=0,h=0,l=1,u=0,d=1):(s=0,v=0,h=1,l=1,u=0,d=1):q<D?(s=0,v=0,h=1,l=0,u=1,d=1):x<D?(s=0,v=1,h=0,l=0,u=1,d=1):(s=0,v=1,h=0,l=1,u=1,d=0);var S=x-s+t,U=q-v+t,b=D-h+t,F=x-l+2*t,N=q-u+2*t,C=D-d+2*t,P=x-1+.5,T=q-1+.5,_=D-1+.5,j=255&y,k=255&w,z=255&g,B=.6-x*x-q*q-D*D;if(B<0)o=0;else{var E=3*p]];o=(B*=B)*B*(m*x+m*q+m*D)}var G=.6-S*S-U*U-b*b;if(G<0)i=0;else{var H=3*p]];i=(G*=G)*G*(m*S+m*U+m*b)}var I=.6-F*F-N*N-C*C;if(I<0)n=0;else{var J=3*p]];n=(I*=I)*I*(m*F+m*N+m*C)}var K=.6-P*P-T*T-_*_;if(K<0)f=0;else{var L=3*p]];f=(K*=K)*K*(m*P+m*T+m*_)}return 32*(o+i+n+f)},noise4D:function(r,e,t,i){var n,f,s,v,h,l,u,d,p,M,m,c,y,w,g,A,x,q=this.perm,D=this.grad4,S=(r+e+t+i)*a,U=Math.floor(r+S),b=Math.floor(e+S),F=Math.floor(t+S),N=Math.floor(i+S),C=(U+b+F+N)*o,P=r-(U-C),T=e-(b-C),_=t-(F-C),j=i-(N-C),k=0,z=0,B=0,E=0;P>T?k++:z++,P>_?k++:B++,P>j?k++:E++,T>_?z++:B++,T>j?z++:E++,_>j?B++:E++;var G=P-(l=k>=3?1:0)+o,H=T-(u=z>=3?1:0)+o,I=_-(d=B>=3?1:0)+o,J=j-(p=E>=3?1:0)+o,K=P-(M=k>=2?1:0)+2*o,L=T-(m=z>=2?1:0)+2*o,O=_-(c=B>=2?1:0)+2*o,Q=j-(y=E>=2?1:0)+2*o,R=P-(w=k>=1?1:0)+3*o,V=T-(g=z>=1?1:0)+3*o,W=_-(A=B>=1?1:0)+3*o,X=j-(x=E>=1?1:0)+3*o,Y=P-1+4*o,Z=T-1+4*o,$=_-1+4*o,rr=j-1+4*o,er=255&U,tr=255&b,ar=255&F,or=255&N,ir=.6-P*P-T*T-_*_-j*j;if(ir<0)n=0;else{var nr=q]]]%32*4;n=(ir*=ir)*ir*(D*P+D*T+D*_+D*j)}var fr=.6-G*G-H*H-I*I-J*J;if(fr<0)f=0;else{var sr=q]]]%32*4;f=(fr*=fr)*fr*(D*G+D*H+D*I+D*J)}var vr=.6-K*K-L*L-O*O-Q*Q;if(vr<0)s=0;else{var hr=q]]]%32*4;s=(vr*=vr)*vr*(D*K+D*L+D*O+D*Q)}var lr=.6-R*R-V*V-W*W-X*X;if(lr<0)v=0;else{var ur=q]]]%32*4;v=(lr*=lr)*lr*(D*R+D*V+D*W+D*X)}var dr=.6-Y*Y-Z*Z-$*$-rr*rr;if(dr<0)h=0;else{var pr=q]]]%32*4;h=(dr*=dr)*dr*(D*Y+D*Z+D*$+D*rr)}return 27*(n+f+s+v+h)}},i._buildPermutationTable=n,"undefined"!=typeof define&&define.amd&&define(function(){return i}),"undefined"!=typeof exports?exports.SimplexNoise=i:"undefined"!=typeof window&&(window.SimplexNoise=i),"undefined"!=typeof module&&(module.exports=i)}();

永恒的蓝色梦想 发表于 2020-5-4 14:41:11

Hello. 发表于 2020-5-4 12:33
我有什么办法呢

这就是你把代码挤到一行的理由?

Hello. 发表于 2020-5-4 15:03:19

永恒的蓝色梦想 发表于 2020-5-4 14:41
这就是你把代码挤到一行的理由?

难道不一行吗

永恒的蓝色梦想 发表于 2020-5-4 15:30:00

Hello. 发表于 2020-5-4 15:03
难道不一行吗

???为什么要一行

Hello. 发表于 2020-5-4 15:50:05

永恒的蓝色梦想 发表于 2020-5-4 15:30
???为什么要一行

成品一般都格式化成一行呀

永恒的蓝色梦想 发表于 2020-5-4 15:52:34

Hello. 发表于 2020-5-4 15:50
成品一般都格式化成一行呀

_2_ 发表于 2020-5-13 13:08:50

永恒的蓝色梦想 发表于 2020-5-4 15:52


如果代码没有问题,编辑器能看懂就就行了

永恒的蓝色梦想 发表于 2020-5-13 13:09:24

_2_ 发表于 2020-5-13 13:08
如果代码没有问题,编辑器能看懂就就行了

o

_2_ 发表于 2020-5-13 13:11:09

永恒的蓝色梦想 发表于 2020-5-13 13:09
o

{:10_256:}
在允许的情况下会先追求速度,后来就是减少代码量
页: [1]
查看完整版本: 做题≠做工程,简洁≠少量