Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meta en 4 Octubre 2010, 14:03 pm



Título: [python] Cadena de códigos
Publicado por: Meta en 4 Octubre 2010, 14:03 pm
Hola gente:

Quiero poner de una pasada en el compilador netbeans una fila muy larga de código.

if a == 125 or b != 45 or c <= 345 or c == 175 or d >= 4578 or e <= 35:

Para reducir e intentado ponerlo de esta manera.

if a == 125 or b != 45 or c <= 345 or
c == 175 or d >= 4578 or e <= 35:

No funciona.

if a == 125 or b != 45 or c <= 345 +
or c == 175 or d >= 4578 or e <= 35:

No funciona.

if a == 125 or b != 45 or c <= 345,
or c == 175 or d >= 4578 or e <= 35:

Tampoco funciona.

¿Existe algún método para que funcione?

Saludo.


Título: Re: [python] Cadena de códigos
Publicado por: Novlucker en 4 Octubre 2010, 14:41 pm
No que yo sepa, pero no por netbeans sino por el tema de la indentación.

Saludos


Título: Re: [python] Cadena de códigos
Publicado por: Meta en 4 Octubre 2010, 14:44 pm
Que raro que no se pueda, ya que otros lenguajes si se puede como C/C++/C#, etc...

Por ahora estaba hasta haciendo esto y tampoco es así.

Código
  1. # Introducir datos a la variable.
  2. Le = str(raw_input('Introduce cualquier carácter: '))
  3.  
  4. #
  5. if Le == 'A':
  6.    if Le == 'B':
  7.        if Le == 'C':
  8.            if Le == 'D':
  9.                if Le == 'E':
  10.                    if Le == 'F':
  11.                        if Le == 'G':
  12.                            if Le == 'H':
  13.                                if Le == 'I':
  14.                                    if Le == 'J':
  15.                                        if Le == 'K':
  16.                                            if Le == 'L':
  17.                                                if Le == 'M':
  18.                                                    if Le == 'N':
  19.                                                        if Le == 'Ñ':
  20.                                                            if Le == 'O':
  21.                                                                if Le == 'P':
  22.                                                                    if Le == 'Q':
  23.                                                                        if Le == 'R':
  24.                                                                            if Le == 'S':
  25.                                                                                if Le == 'T':
  26.                                                                                    if Le == 'U':
  27.                                                                                        if Le == 'V':
  28.                                                                                            if Le == 'X':
  29.                                                                                                if Le == 'Y':
  30.                                                                                                    if Le == 'Z':
  31.                                                                                                        print 'Es una MAYÚSCULA.'


Título: Re: [python] Cadena de códigos
Publicado por: Novlucker en 4 Octubre 2010, 15:01 pm
Es que en otros lenguajes no es obligatorio el indentar, sin embargo en python donde no lo hagas tienes warnings por todos lados :P

Sobre ese código, fijate que no va a funcionar nunca porque tienes los IF anidados, por lo cual en primera instancia se pregunta si es 'A', así que si no es 'A' entonces ya termina, pero si es 'A' luego preguntará si es 'B', y si es 'A' es imposible que también sea 'B', por lo que también termina.

No puedes hacer uso de otras funciones como ord por ejemplo? Sino a base de elif

Saludos


Título: Re: [python] Cadena de códigos
Publicado por: d(-_-)b en 4 Octubre 2010, 15:36 pm
yo de python no entiendo ni pollo, pero creo que se lo que intentas hacer.

te pongo un ejemplo  en Delphi es algo similar, se que este subforo es de scripting, pero talvez este pequeño ejemplo te sirva de ayuda.

Código
  1. program project;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.  SysUtils;
  7.  
  8. var
  9. Word: Char;
  10.  
  11. begin
  12.   Writeln('Inserte una leta');
  13.   Readln(Word);
  14.  
  15.   if (Word = 'A') then
  16.      Writeln('Inserto la letra en Mayusculas')
  17.  
  18.   else if (Word = 'a') then
  19.   Writeln('Inserto la letra en Minusculas')
  20.  
  21.  else
  22.   Writeln('Letra no valida...');
  23.   Readln;
  24. end.

saludos...


Título: Re: [python] Cadena de códigos
Publicado por: Meta en 4 Octubre 2010, 15:57 pm
Es así como dices en Pascal. Claro que son todo el abecesario a-Z y A-Z. ¿A que ya no es tan fácil?



Título: Re: [python] Cadena de códigos
Publicado por: Novlucker en 4 Octubre 2010, 16:04 pm
Yo más bien diría que fácil es, no es más que copiar el IF una vez por cada letra, el problema es que no es ni bonito ni cómodo :P

Saludos


Título: Re: [python] Cadena de códigos
Publicado por: Meta en 4 Octubre 2010, 16:06 pm
Lo he intentado hacerlo así.

Código
  1. # Introducir datos a la variable.
  2. Letra = str(raw_input('Introduce cualquier car&#225;cter: '))
  3.  
  4. #
  5. if Letra <= 'Z':
  6.    print 'Es una MAY&#218;SCULA.'
  7. if Letra <= 'z':
  8.    print 'Es una MIN&#218;SCULA.'
  9.  

Si pulso 'T', me suelta este resultado activándome los dos print.
Citar
Introduce cualquier carácter: T
Es una MAYÚSCULA.
Es una MINÚSCULA.


Si pulso 't' me funciona bien. ¿Qué es lo que pasa?
Citar
Introduce cualquier carácter: t
Es una MINÚSCULA.


Título: Re: [python] Cadena de códigos
Publicado por: Novlucker en 4 Octubre 2010, 16:15 pm
Pasa que tienes las comparaciones por separado.
El valor de 'T' es 84 y el de 't' es 116, por lo que cuando realizas la comparación con 'T', se cumple que es menor que 90 (Z) y 122 (z), por lo que imprime dos veces.
Mejor así ...
Código
  1. Letra = raw_input('Introduce cualquier caracter: ')
  2. #el raw_input de por si devuelve una cadena
  3.  
  4. if Letra >= 'A' and Letra <= 'Z':
  5. print 'Es una MAYUSCULA'
  6.  
  7. if Letra >= 'a' and Letra <= 'z':
  8. print 'Es una MINUSCULA'

No había puesto eso antes porque no sabía si podías solucionar el problema de esa manera (por lo mismo pregunté por ord)

Saludos


Título: Re: [python] Cadena de códigos
Publicado por: Meta en 4 Octubre 2010, 16:28 pm
Gracias.

Ah, otra cosa, la cadena ya la averigüé. Es así:

Código
  1. if a == 125 or b != 45 or c <= 345\
  2. or c == 175 or d >= 4578 or e <= 35:

Es bueno saber esto.

(http://informaticabj.files.wordpress.com/2007/05/ascii.gif)

Pues tienes razón.

Lo de ord. ¿No será or? (sin la d al final.)


Título: Re: [python] Cadena de códigos
Publicado por: Novlucker en 4 Octubre 2010, 16:41 pm
Es verdad! :D
No recordaba para nada lo de la barra invertida, pero ahora que lo veo hay otra manera ... parentesis :P
Código
  1. if (a == 125 or b != 45 or c <= 345
  2. or c == 175 or d >= 4578 or e <= 35):

Y la función que menciono es ORD, a la cual le pasas una letra y te devuelve el valor de la tabla ASCII

Saludos


Título: Re: [python] Cadena de códigos
Publicado por: d(-_-)b en 4 Octubre 2010, 17:43 pm
Yo más bien diría que fácil es, no es más que copiar el IF una vez por cada letra, el problema es que no es ni bonito ni cómodo :P

jaja, por ejemplo, como esto, muy feo, eso si, funciona  :xD :xD :xD

Código
  1. program project;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.  SysUtils;
  7.  
  8. var
  9. Word: Char;
  10.  
  11. begin
  12.   Writeln('Inserte una leta');
  13.   Readln(Word);
  14.  
  15.   if (Word = 'A') or (Word = 'B') or (Word = 'C') or (Word = 'D')
  16.      or (Word = 'E') or (Word = 'F') or (Word = 'G') or (Word = 'H')
  17.      or (Word = 'I') or (Word = 'J') or (Word = 'K') or (Word = 'L')
  18.      or (Word = 'M') or (Word = 'N') or (Word = 'Ñ') or (Word = 'O')
  19.      or (Word = 'P') or (Word = 'Q') or (Word = 'R') or (Word = 'S')
  20.      or (Word = 'T') or (Word = 'U') or (Word = 'V') or (Word = 'X')
  21.      or (Word = 'Z') or (Word = 'W') then
  22.  
  23.      Writeln('Inserto una letra  Mayusculas')
  24.  
  25.   else
  26.  
  27.   if (word = 'a') or (word = 'b') or (word = 'c') or (word = 'd')
  28.      or (word = 'e') or (word = 'f') or (word = 'g') or (word = 'h')
  29.      or (word = 'i') or (word = 'j') or (word = 'k') or (word = 'l')
  30.      or (word = 'm') or (word = 'n') or (word = 'ñ') or (word = 'o')
  31.      or (word = 'p') or (word = 'q') or (word = 'r') or (word = 's')
  32.      or (word = 't') or (word = 'u') or (word = 'v') or (word = 'x')
  33.      or (word = 'z') or (word = 'w') then
  34.  
  35.   Writeln('Inserto un letra Minusculas')
  36.  
  37.  else
  38.   Writeln('Letra no valida...');
  39.   Readln;
  40. end.

 :xD :xD :xD

saludos...


Título: Re: [python] Cadena de códigos
Publicado por: Meta en 4 Octubre 2010, 19:49 pm
Es eso lo que quiero.

Muy bueno el diseño con Pascal.

Muchas gracia a tod@s.


Título: Re: [python] Cadena de códigos
Publicado por: xassiz~ en 4 Octubre 2010, 20:54 pm
Sinó, regexp ;D


Título: Re: [python] Cadena de códigos
Publicado por: Meta en 4 Octubre 2010, 21:05 pm
Siguiendo la tabla ascii.

No me funciona este código.

Código
  1. # Introducir datos a la variable.
  2. Letra = raw_input('Introduce cualquier carácter: ')
  3.  
  4. # Letras desde la A hasta la Z mayúscula.
  5. if Letra >= 'A' and Letra <= 'Z':
  6. print 'Es una MAYÚSCULA'
  7.  
  8. #Letras desde la a hasta la z minúscula.
  9. if Letra >= 'a' and Letra <= 'z':
  10. print 'Es una MINÚSCULA'
  11.  
  12. if ((Letra  >= ' ' and Letra <= '@') or (Letra >= '[' and Letra <= '`)' or (Letra >= '{' and Letra <= 0xFF):
  13.    print 'No es una letra.'
  14.  

No me sale este.


Título: Re: [python] Cadena de códigos
Publicado por: Meta en 5 Octubre 2010, 00:08 am
Ahora lo he intentado hacerlo así:

Código
  1. if ((Letra  >= chr(0) and Letra <= chr(64) or (Letra >= chr(91) and Letra <= chr(96) or (Letra >= chr(123) and Letra <= chr(255)):
  2.    print 'No es una letra.'

Me sale este error.
 
Código:
 File "/home/acaymo/NetBeansProjects/tema4e2a1/src/tema4e2a1.py", line 32
    if ((Letra  >= chr(0) and Letra <= chr(64) or (Letra >= chr(91) and Letra <= chr(96) or (Letra >= chr(123) and Letra <= chr(255)):
                                                                                                                                     ^
SyntaxError: invalid syntax


Título: Re: [python] Cadena de códigos
Publicado por: Novlucker en 5 Octubre 2010, 01:24 am
Tienes un paréntesis de más al principio del IF :P

Saludos


Título: Re: [python] Cadena de códigos
Publicado por: Meta en 5 Octubre 2010, 01:27 am
Ok. Lo resolví.

Ahora aquí no debe usar la ñ y Ñ.
Código
  1. if (Letra  >= chr(0) and Letra <= chr(64)
  2. or Letra >= chr(91) and Letra <= chr(96)
  3. or Letra >= chr(123) and Letra <= chr(163)
  4. or Letra >= chr(166) and Letra <= chr(255)):

(http://3.bp.blogspot.com/_p10GWKDC_aw/TCLE4jzQMMI/AAAAAAAABq8/v7MhUMTcGcA/s1600/ASCII1.GIF)

(http://3.bp.blogspot.com/_p10GWKDC_aw/TCLE4jzQMMI/AAAAAAAABq8/v7MhUMTcGcA/s1600/ASCII1.GIF)


Título: Re: [python] Cadena de códigos
Publicado por: Karcrack en 5 Octubre 2010, 16:25 pm
Código
  1. if Letra.islower() != True:
  2. print "Mayuscula"
  3. else:
  4. print "Minuscula"


Título: Re: [python] Cadena de códigos
Publicado por: d(-_-)b en 5 Octubre 2010, 17:15 pm
Exacto, ni me acordaba, ni me imaginaba que en python disponían de esa función porque fue a partir de Delphi 2009 que añadieron esas nuevas unidades de caracteres, entre otras. Y yo uno Delphi 7.

Código
  1. IsLetter: // Se trata de una carta, rango A... Z y Z a.
  2. IsUpper:  //es una letra mayúscula, rango A. Z.
  3. IsLower:  //es el minúsculas; a. gama Z)
  4. IsDigit:  //es un número decimal, rango 0 .. 9
  5. IsNumber: //si es una serie de símbolos; incluir 0 .. 9, así como los códigos ASCII en 178.179.185.188.189.190, etc...

saludos...


Título: Re: [python] Cadena de códigos
Publicado por: d(-_-)b en 5 Octubre 2010, 17:58 pm
Por cierto, a diferencia del segunto ejemplo que poste, y mas corto, se puede hacer tambien de la siguiente manera.

talvez te sirve de algo, para pasarlo a Python.

Código
  1. program Project2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.  SysUtils;
  7.  
  8. var
  9. ch: Char;
  10.  
  11. begin
  12.  Writeln('Inserte un Caracter del Abecedario');
  13.  Readln(ch);
  14.  
  15.  if (ch in ['A'..'Z']) then
  16.  Writeln('ES MAYUSCULA')
  17.  
  18.  else if (ch in ['a'..'z']) then
  19.  Writeln('es minuscula')
  20.  
  21.  else
  22.  Writeln('Caracter no valido...');
  23.  Readln;
  24. end.

Aunque Karcrack puso la sulucion mas censilla, usando la funcion islower, que nos revuelve si es mayuscula o no.

saludos...


Título: Re: [python] Cadena de códigos
Publicado por: Novlucker en 5 Octubre 2010, 18:01 pm
Si, se puede, pero lo que pasa es que el tiene sus limitaciones en cuanto a la manera de hacerlo. Esta siguiendo los ejercicios de un libro y ahí te dicen, hacerlo de tal manera, y tu tienes que pelearte para hacerlo así :xD

Saludos


Título: Re: [python] Cadena de códigos
Publicado por: d(-_-)b en 5 Octubre 2010, 18:11 pm
Esta siguiendo los ejercicios de un libro y ahí te dicen, hacerlo de tal manera, y tu tienes que pelearte para hacerlo así :xD

Quien yo ??  :xD

saludos...


Título: Re: [python] Cadena de códigos
Publicado por: [L]ord [R]NA en 5 Octubre 2010, 19:05 pm
No se si existe una solucion dada pero aqui ahi algo:
Código
  1. a = raw_input("Ingrese una letra> ")
  2. if len(a)==1:
  3.    a = ord(a);
  4.    if a>=65 and a<=90 or a==165: print 'Mayuscula.\n'
  5.    if a>=97 and a<=122 or a==164: print 'Minuscula.\n'
  6.    else: print 'No ingreso una letra.\n'
  7. else: print 'Ingreso mas de una letra.\n'


Título: Re: [python] Cadena de códigos
Publicado por: Debci en 5 Octubre 2010, 21:25 pm
Es que en otros lenguajes no es obligatorio el indentar, sin embargo en python donde no lo hagas tienes warnings por todos lados :P

Sobre ese código, fijate que no va a funcionar nunca porque tienes los IF anidados, por lo cual en primera instancia se pregunta si es 'A', así que si no es 'A' entonces ya termina, pero si es 'A' luego preguntará si es 'B', y si es 'A' es imposible que también sea 'B', por lo que también termina.

No puedes hacer uso de otras funciones como ord por ejemplo? Sino a base de elif

Saludos
Podria pedir tambien la letra en cada comparación, y hacerlo mas limpio y dinámico con un bucle.

Saludos