• Publicidad

Mi primer programa con expresiones... ¡no funciona! :S

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Mi primer programa con expresiones... ¡no funciona! :S

Notapor bl4ckc00k1e » 2009-08-16 20:04 @877

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#Convenciones generales de la sintaxis de PEARL
#IF, ELSE, ELSIF. if= Si pasa esto... haz esto. ELSE= si no pasa nada de lo anterior haz esto otro. ELSIF: es cuando quieres poner varios IF,

print "¿¿cuál es mi postura ----- preferida??";
$numero = 60 + rand(19);# rand indica un número desde el 1 al que le digas,(19 en este caso) si lo quiero hacer del 60 al 70, le sumo 60 más el rand
print> "introduce la postura ---- que creas que me guste...^^";
$entrada = <STDIN>;
        if ($entrada == ($numero!=69)) { # "!=" significa: excepto...
                print "¡Uyyyyyyyyyyyyy, esTás muy cerca! pero no es ese :("
        };
        elsif($entrada == "69") {
                print "Haaaaayyyyyy Ommaaaaaaaaa ¡¡qué RICAAAAAAA!! ¡¡¡HAS ACERTADO EL NÚMERO!!!"
        };
        elsif ($entrada < $numero) {
                print "mmmmmmmm..... Es un número más alto!!"
        };
        elsif ($entrada > $numero) {
                        print "¡¡A dónde vas!! Es un número más bajo"
        };     
        else {
                print "¡¡Un número,-------!! ¡¡NÚMERO!! ¿¿Ya estás pensando con la -----o qué??"
        };
 # los operadores de comparación son distintos para números o cadenas, else representa: elsif ($entrada eq 'str') {...
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


La consola me escupe;
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
bl4ckc00k1e@Bl4ckc00k1e:~/programacion$ perl TEMA3.pl
syntax error at TEMA3.pl line 20, near "elsif"
Execution of TEMA3.pl aborted due to compilation errors (#1)
    (F) Probably means you had a syntax error.  Common reasons include:

        A keyword is misspelled.
        A semicolon is missing.
        A comma is missing.
        An opening or closing parenthesis is missing.
        An opening or closing brace is missing.
        A closing quote is missing.

    Often there will be another error message associated with the syntax
    error giving more information.  (Sometimes it helps to turn on -w.)
    The error message itself often tells you where it was in the line when
    it decided to give up.  Sometimes the actual error is several tokens
    before this, because Perl is good at understanding random input.
    Occasionally the line number may be misleading, and once in a blue moon
    the only way to figure out what's triggering the error is to call
    perl -c repeatedly, chopping away half the program each time to see
    if the error went away.  Sort of the cybernetic version of S<20
    questions>.

BEGIN not safe after errors--compilation aborted at /usr/share/perl/5.10/Carp/Heavy.pm line 5.
Compilation failed in require at /usr/share/perl/5.10/Carp.pm line 33.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Última edición por bl4ckc00k1e el 2009-08-17 05:37 @275, editado 2 veces en total
Imagen
Avatar de Usuario
bl4ckc00k1e
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-08-14 21:56 @956

Publicidad

Re: Mi primer programa con expresiones... ¡no funciona! :S

Notapor explorer » 2009-08-17 02:24 @141

El error está en los ';' que hay delante de los elsif{}: sobran.

rand(19) da un número aleatorio entre 0 (incluido) y 19 (excluido), por lo que en tu ejemplo nunca llega a 69. Además, recuerda aplicarle int() si quieres que ese número sea entero.

Hay un '>' después de un print(), que también sobra.

La expresión
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$entrada == ($numero != 69)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

no hace lo que estás poniendo en el comentario. Lo que hace es, primero, ver que $numero sea distinto (!=) de 69. Si lo es, devuelve un valor positivo, si no, negativo. Y ese valor booleano lo compara luego con $entrada. No creo que ese sea el comportamiento que buscas.

En la comparación
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$entrada == "69"
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

las comillas sobran: el operador de igualdad es para números.

Y, por favor, cuida tu lenguaje. :(
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Mi primer programa con expresiones... ¡no funciona! :S

Notapor bl4ckc00k1e » 2009-08-17 12:01 @542

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "cuál es mi -------------- preferida??";
$numero = int(60 + rand(19));# rand indica un número desde el 1 al que le digas (19 en este caso); si lo quiero hacer del 60 al 70, le sumo 60 más el rand()
sleep 1; #que espere 1 segundo
print "introduce la --------- que creas que me guste...^^";
$entrada = <STDIN>;
        if ($entrada == $numero < 69 and $numero > 69) { # "!=" significa: excepto...
                print "Uyyyyyyyyyyyyy, ¡esTás muy cerca! pero no es ese :("
        }
        elsif($entrada == 69) {
                print "Aaaaaayyyyyy, Ommaaaaaaaaa, ¡qué RICAAAAAAA! ¡¡¡HAS ACERTADO EL NÚMERO!!!"
        }
        elsif ($entrada < $numero) {
                print "mmmmmmmm..... ¡¡Es un número mas alto!!"
        }
        elsif ($entrada > $numero) {
                        print "¡¡A dónde vas!! Es un número más bajo"
        }      
        else #($entrada eq 'str')
                {print "un número --------!! NÚMERO!! ya estas pensando con------------- o qué??"
        };
 # los operadores de comparación son distintos para números o cadenas, else representa: elsif ($entrada eq 'str') {...
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Elimine mis obscenidades (es para divertirme mientras programa xD) pero no consigo:

if ($entrada == $numero < 69 and $numero > 69) No consigo hacer entender a Perl que quiero que cuando pongo un número comprendido desde el 60 al 79 me imprima lo indicado; Quizás el fallo este aquí:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$numero = int(60 + rand(19))
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


2º No consigo tampoco que me funcione la función de else:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
else ($entrada eq 'str')
                {print
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

quiero que si alguien escribe letras en lugar de números salga ese mensaje

3º si pongo un número mayor a 69 me dice número más bajo, si pongo 69 me dice que acerté, y si pongo uno menor a 65 que es más alto, pero con 66, 67 y 68, me dice que es más bajo...

¿qué está fallando?
Imagen
Avatar de Usuario
bl4ckc00k1e
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-08-14 21:56 @956

Re: Mi primer programa con expresiones... ¡no funciona! :S

Notapor explorer » 2009-08-17 13:08 @589

Pero es que no está muy claro lo que quieres hacer: primero sacas un número al azar entre 59 y 79. Y luego le pides un número al usuario... No sabemos si el primer mensaje debe salir por $entrada o por $numero.

Si lo que quieres es ver si la $entrada del usuario está dentro del rango, entonces es ese valor el que tienes que usar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ($entrada < 60 or $entrada >= 79) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En cuanto a la comparación con 'str', es que es justo eso lo que estás poniendo: solo se activará el if() si el usuario ingresa exactamente 'str' (tres letras, y solo esas tres letras).

Si lo que quieres es avisarle de que sólo esperas números, tienes que usar una expresión regular:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
chomp $entrada;     # quito el retorno de carro del final
if ($entrada =~ /\D/) {   # ¿Hay algún carácter no numérico?
    print "Solo admito números\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En cuanto a la tercera pregunta, te recuerdo que estás haciendo una comparación con un número sacado al azar, así que si ese $numero es 62 (por ejemplo), entonces es normal que te diga que el número es más bajo, si entras un 65 o 66.
Última edición por explorer el 2009-08-17 13:31 @605, editado 2 veces en total
Razón: Ortografía
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Mi primer programa con expresiones... ¡no funciona! :S

Notapor bl4ckc00k1e » 2009-08-17 13:52 @619

Vale, por ahora todo está bien, menos:
chomp: No me lo coge, me lanza error:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
bl4ckc00k1e@Bl4ckc00k1e:~/programacion$ perl TEMA3.pl
Can't modify scalar chomp in scalar assignment at TEMA3.pl line 14, near ");"
Execution of TEMA3.pl aborted due to compilation errors (#1)
    (F) You aren't allowed to assign to the item indicated, or otherwise try
    to change it, such as with an auto-increment.

BEGIN not safe after errors--compilation aborted at /usr/share/perl/5.10/Carp/Heavy.pm line 5.
Compilation failed in require at /usr/share/perl/5.10/Carp.pm line 33.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y lo que quiero hacer, es que $numero sea un valor comprendido entre el 60 y el 79.

Probé con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@numero = (60..79)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

No me lo coge como lo que deseo.. (ya comprendí que rand(), es aleatorio).

Luego otro problema, es que ahora siempre me lanza este if(), haga lo que haga, cuando solo tiene que salir al poner letras (ese chomp(), no está puesto, debido al error que me lanza:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ($entrada =~ /\D/) # ¿Hay algún carácter no numérico?
                {print "¡¡un número, gilipollas!! ¡¡NÚMERO!! ¿¿ya estás pensando con la polla o qué??"
        };
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y este if(), me salta por todos lados también:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ($entrada < 60 or $entrada >= 79) {
                print "Uyyyyyyyyyyyyy, esTás muy cerca! pero no es ese
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Lo que quiero hacer, es que pongas un valor numérico, el cual:
         Si es un valor comprendido entre el 60 y el 79, exceptuando el 69, que digas "uuuyyyyyy..".
         Si es 69, que diga "HAy oma que rica, acertaste".
         Si es una valor menor al rango dado anteriormente, que diga "el número es mayor" (OJO , no quiero poner que sea menor de 60, si no del rango dado)
         Si es mayor que 79, que diga "el número es menor"
         Si el valor introducido, no es numérico, que diga "hay que poner un número"
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Esto es la idea...

Más adelante quiero hacer que si no lo aciertas, vuelva hacer la función de nuevo, o sea por un bucle, o con X repeticiones del mismo.

Espero haberme explicado bien.
Imagen
Avatar de Usuario
bl4ckc00k1e
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-08-14 21:56 @956

Re: Mi primer programa con expresiones... ¡no funciona! :S

Notapor explorer » 2009-08-17 16:06 @712

Pues tu mismo has dado la solución...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my $primero = 60;
my $ultimo  = 79;

# Lo que quiero hacer, es que pongas un valor numérico,
my $entrada = <>;
chomp $entrada;

# el cual:
# Si el valor introducido, no es numérico, que diga "hay que poner un número"
if (0+$entrada == 0) {
    print "Hay que poner un número\n";
}

# Si es 69, que diga "HAy oma que rica, acertaste"
elsif ($entrada == 69) {
    print "HAy oma que rica, acertaste\n";
}

# Si es un valor comprendido entre el 60 y el 79, exceptuando el 69, que digas "uuuyyyyyy..".
elsif ($entrada >= $primero and $entrada <= $ultimo) {
    print "uuuyyyyyy...\n";
}

# Si es una valor menor al rango dado anteriormente, que diga "el número es mayor" (OJO , no quiero poner que sea menor de 60, si no del rango dado)
elsif ($entrada < $primero) {
    print "el número es mayor\n";
}

# Si es mayor que 79, que diga "el número es menor"
elsif ($entrada > $ultimo) {
    print "el número es menor\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Observa que he cambiado el orden de las cuestiones para simplificar algunos posibles casos lógicos que interfieren entre sí.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Mi primer programa con expresiones... ¡no funciona! :S

Notapor bl4ckc00k1e » 2009-08-17 18:15 @802

Bueno, pego todo... el error dice que es en la línea 29, (ya sabéis que mientras aprendo hago un tutorial, así que no os riáis de mis pésimas explicaciones:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl -l
  2. #                                                       INTRODUCCION PRÁCTICA AL PERL 3
  3. #                                                                   BY
  4. #                                                               BL4CKC00K1E
  5. #
  6. # Veis esa "-l" arriba?? pues que no se ya no teneis que poner \n nunca mas... que -------- he sido haciendoos escribir eh?? pero bueno, cuando yo lo #aprendi fue aki, asi k te hago sufrir lo mismo k sufri yo
  7. use warnings;
  8. use diagnostics;
  9.  
  10. #Convenciones generales de la sintaxis de PEARL
  11. #IF, ELSE, ELSIF. if= Si pasa esto... haz esto. ELSE= si no pasa nada de lo anterior haz esto otro. ELSIF: es cuando quieres poner varios IF,
  12.  
  13. print "cuale es mi ------------- preferida??";
  14. $numero1 = 60;
  15. $numero2 = 79;
  16. sleep 1; #que espere 1 segundo
  17. print "introduce la ---------------- que creas que me guste...^^";
  18. $entrada = <STDIN>;
  19.         if (0 + $entrada == 0) {
  20.                 print "un numero ---------!! NUMERO!! ya estas pensando con ------- o que??"
  21.         }
  22.                 elsif($entrada == 69) {
  23.                         print "Haaaaayyyyyy Ommaaaaaaaaa que RICAAAAAAA!! HAS ACERTADO EL NUMERO!!!"
  24.                 }
  25.                 elsif($entrada >= $numero1 and $entrada <= $numero2)
  26.                         print "Uuuuyyy, estas muy cerca, sigue asi"
  27.                 }
  28.                 elsif ($entrada < $numero1) {
  29.                         print "mmmmmmmm..... Es un numero mas alto!!"
  30.                 }
  31.                 elsif ($entrada > $numero2) {
  32.                         print "a donde vas!! es un numero mas bajo";
  33.                 };
  34.  # los operadores de comparacion son distintos para numeros o cadenas, else representa: elsif ($entrada eq 'str') {...
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Imagen
Avatar de Usuario
bl4ckc00k1e
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-08-14 21:56 @956

Re: Mi primer programa con expresiones... ¡no funciona! :S

Notapor bl4ckc00k1e » 2009-08-17 18:26 @810

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
elsif($entrada >= $numero1 and $entrada <= $numero2){
                        print "Uuuuyyy, estás muy cerca, sigue así"
      }              
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


resuelto, faltaba "{"
Imagen
Avatar de Usuario
bl4ckc00k1e
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-08-14 21:56 @956


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados