Duda de if sobre if [Python]

Iniciado por CaronteGold, 28 Diciembre 2009, 03:29 AM

0 Miembros y 1 Visitante están viendo este tema.

CaronteGold



    Buenas,



 Estoy haciendo una aplicación en Python y me surgió un problema, el caso es que tengo una situación así:

Código (python) [Seleccionar]

a = int(input("Primer numero: "))
incoga = raw_input("Incognita (si no hay, poner "no": ")
b = int(raw_input("Segundo numero:  "))
incogb = raw_input("Incognita (si no hay, poner "no"): ")
pot = int(raw_input("Potencia: "))



 Y después tengo :

if incoga == "no" and incogb == "no":    

   if pot == "4":
        print ....................
   if pot == "5":
        print .........


  El caso es que tengo un if dentro de otro if, pues el if de dentro --->  if pot == "4"  , no se ejecuta. Pero la variable está bien comprobada arriba, ya que si en lo de -- > if incoga.....,  debajo pongo un else, al ser incoga == no y incogb == no, no se ejecuta, pero el problema es que no reconoce el sub if.

  No sé si me he explicado bien, la  cosa es que este punto :  if incoga == "no" and incogb == "no": , se ejecuta, pero cuando llega justo debajo, pasa de largo, no da error ni nada, en la salida del programa sale como en blanco.

 Lo que no se ejecuta es esto:

if pot == "4":
        print ....................
   if pot == "5":
        print .........




 Puedo pensar que esos sub "if" los tengo que agrupar o no sé... si alguien sabe como lo puedo arreglar lo agradecería.

  Saludos.

08l00D

Citarpot = int(raw_input("Potencia: "))
la variable pot contiene un entero...

y vos la estas comparando con una cadena .... sacale las comillas ...
if pot == 4:

CaronteGold


   Muchas gracias, pues estuve ahí bastante tiempo y no dí con la solución, muchas gracias    ;D ;D

   EDITO:  Una cosa, si son letras también quito las comillas ¿? , como en el caso de " no ".

Shell Root

#3
Cita de: CaronteGold en 28 Diciembre 2009, 03:39 AM

   Muchas gracias, pues estuve ahí bastante tiempo y no dí con la solución, muchas gracias    ;D ;D

  EDITO:  Una cosa, si son letras también quito las comillas ¿? , como en el caso de " no ".

Nones! Como todo lenguaje de programacion, cuando se compara un INT no se pone las comillas, pero cuando comparamos un String si hay que ponersela.

Ademas de que como no estas ingresando un Tipo de Datos Entero, le cambias el
a = int(input("Primer numero: "))
Por:
a = raw_input("Ingrese Su Nombre")

Por Ejemplo:
# Coder Shell Root

a = raw_input("Ingrese Su Nombre")

if a == "Shell Root":
   print "Hola Eres Shell Root"
else:
   print "Eres un Desconocido"


Saludos!
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

CaronteGold

Cita de: alex19910218 en 28 Diciembre 2009, 04:06 AM
Cita de: CaronteGold en 28 Diciembre 2009, 03:39 AM

   Muchas gracias, pues estuve ahí bastante tiempo y no dí con la solución, muchas gracias    ;D ;D

  EDITO:  Una cosa, si son letras también quito las comillas ¿? , como en el caso de " no ".

Nones! Como todo lenguaje de programacion, cuando se compara un INT no se pone las comillas, pero cuando comparamos un String si hay que ponersela.

Ademas de que como no estas ingresando un Tipo de Datos Entero, le cambias el
a = int(input("Primer numero: "))
Por:
a = raw_input("Ingrese Su Nombre")

Por Ejemplo:
# Coder Shell Root

a = raw_input("Ingrese Su Nombre")

if a == "Shell Root":
   print "Hola Eres Shell Root"
else:
   print "Eres un Desconocido"


Saludos!


   En el caso de "a" "b" y "pot", si lo pido, por eso pongo el int, pero luego en la variable, como son letras no lo pongo.

    Saludos.
   

08l00D

Cita de: CaronteGold en 28 Diciembre 2009, 03:39 AM
EDITO:  Una cosa, si son letras también quito las comillas ¿? , como en el caso de " no ".
pues no ... por que la variable inconga y incongb son cadenas por lo tanto debes comparlos con cadenas ... las comillas encerrado cualquier caracter significa que se trata de una cadena por lo tanto -> "no" es una cadena lodejas asi como esta....

por cierto una pequeña observacion...
Citara = int(input("Primer numero: "))
no hace falta hacer int(input()), ya que de porsi input() retorna un numero entero no hace falta convertirlo con int()
por eso cuando pidas que el usuario introduzca un numero entero usa input("introduce el numero....") y cuando quieras que introduzca una cadena usa raw_input() y te ahorras de hacer las conversiones ...

CaronteGold



   Pues creo que eso lo había cambiado porque no me funcionaba así, no estoy muy seguro, o igual tenía raw_input , no sé. De todas formas muchas gracias, y tengo una duda que no sé si podrás resolverme :  la cosa es que quiero mostrar dos variables unidas, una será un número y otra será la incógnita ( letra ), de manera que pueda quedar así:  350x,  o 350z, según la letra que ponga el usuario.

    Saludos.

08l00D

ahi si tenes que usar la funcion str() para convertir el entero en cadena para poder concatenarla (unirla) con la otra cadena ... aca te pongo un ejemplo:
Código (python) [Seleccionar]

a = int("Ingrese el numero: ")
incognita = raw_input('Incognita (si no hay, poner "no": ')

print str(a) + incognita


Novlucker

Solo un pequeño matiz a esto ...

Cita de: 08l00D en 28 Diciembre 2009, 15:12 PM

Citara = int(input("Primer numero: "))
no hace falta hacer int(input()), ya que de porsi input() retorna un numero entero no hace falta convertirlo con int()
por eso cuando pidas que el usuario introduzca un numero entero usa input("introduce el numero....") y cuando quieras que introduzca una cadena usa raw_input() y te ahorras de hacer las conversiones ...

Si mal no recuerdo CaronteGold esta con Python 2.6, y en ese caso esta bien la apreciación, pero si paso a la versión 3.x eso ya no es así, raw_input dejo de existir y paso a ser solamente input, y este devuelve un string, así que en ese caso estaría bien la conversión.

:http://docs.python.org/3.1/whatsnew/3.0.html (PEP3111)
:http://docs.python.org/3.1/library/functions.html#input

Saludos

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

CaronteGold

#9
Cita de: Novlucker en 28 Diciembre 2009, 17:07 PM
Solo un pequeño matiz a esto ...

Cita de: 08l00D en 28 Diciembre 2009, 15:12 PM

Citara = int(input("Primer numero: "))
no hace falta hacer int(input()), ya que de porsi input() retorna un numero entero no hace falta convertirlo con int()
por eso cuando pidas que el usuario introduzca un numero entero usa input("introduce el numero....") y cuando quieras que introduzca una cadena usa raw_input() y te ahorras de hacer las conversiones ...

Si mal no recuerdo CaronteGold esta con Python 2.6, y en ese caso esta bien la apreciación, pero si paso a la versión 3.x eso ya no es así, raw_input dejo de existir y paso a ser solamente input, y este devuelve un string, así que en ese caso estaría bien la conversión.

:http://docs.python.org/3.1/whatsnew/3.0.html (PEP3111)
:http://docs.python.org/3.1/library/functions.html#input

Saludos





     Sigo con la 2.6  ;D .


  He puesto en una int(input... , y en la otra he puesto, int(raw_input.. , entonces en la primera sería innecesario el int, pero en la 2da es necesario, cierto que al poner int, con input sería alargar más el code.

  Lo he dejado así:

  a = input("Primer numero: ")
incoga = raw_input("Incognita (si no hay, poner guión -): ")
b = input("Segundo numero:  ")
incogb = raw_input("Incognita (si no hay, poner guión -): ")
pot = input("Potencia: ")