[Python-es] Por que el código perl anda y el python no?? para jugar y romperse la cabeza contra el teclado..

gerardo Juarez gerardojuarez en buyteknet.info
Jue Ago 23 20:46:17 CEST 2012


Ahora sí, con esto sí se puede comparar. Tu instrucción en la versión en 
Perl:

    if(($y<$NR)||($x<$NR)){

No es la misma a la versión en Python:

       if  y<NR :

Si la pones igual en Python, lo cual sería:

       if y < NR or x < NR:

Te va a dar un error, porque en algún punto el algoritmo excede las dimensiones de la matriz.
En Perl no pasa nada, porque Perl silenciosamente crea las entradas que requiere en un arreglo y las
inicia con ceros además. Si modificas el if en Perl para que sea igual al de Python, los programas 
hacen lo mismo.

Yo diría que hay que revisar el algoritmo, porque es incorrecto: los subíndices se salen
de rango en ciertos casos.

Gerardo



Horacio wrote:
> En el hilo anterior me expresé de manera incompleta... acá está la
> pregunta correcta...
>
> a ver este código perl hace lo que se espera... y da como resultado LM=3...
> $A[0][0]=0; $A[0][1]=1; $A[0][2]=0; $A[0][3]=0;
> $A[1][0]=1; $A[1][1]=0; $A[1][2]=1; $A[1][3]=0;
> $A[2][0]=0; $A[2][1]=1; $A[2][2]=0; $A[2][3]=1;
> $A[3][0]=0; $A[3][1]=0; $A[3][2]=1; $A[3][3]=0;
>
> $NR=4;
> $LM=0;
>
> for($c=0;$c<$NR;$c++){
>     $s=0;
>     for($x=0;$x<$NR;$x++){
>     $y=$x+$c;
>     if(($y<$NR)||($x<$NR)){
>         if($A[$x][$y]==1){
>         $s++;
>                 print $x." ".$y." ".$s."\n";
>         } else{
>         if($s>$LM){
>             $LM=$s;
>         }
>                 print $x." ".$y." ".$s." ".$LM."\n";
>         $d[$s]++;
>         $s=0;
>         }
>     }
>     }
> }
>
> print $LM."\n";
>
> Este código python da como resultado LM=0, no da lo que se debe...
>
> A=[[0,1,0,0],[1,0,1,0],[0,1,0,1],[0,0,1,0]]
>
> NR=4
>
> d=[]
> d=[0]*NR
> LM=0
> for c in range(NR):
>    s=0
>    for x in range(NR):
>        y=x+c
>        if  y<NR :
>            if A[x][y]==1 :
>                s+=1
>                print x,y,s
>            else:
>                print x,y,s,LM
>                if  s>LM :LM=s
>                d[s]+=1
>                s=0
> print "Diagonal maxima %d" % LM
>
> Ensayenlo,,, y me dicen que cuernos pasa... antes que empiece a pensar
> que python es ...
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>   



Más información sobre la lista de distribución Python-es