Foros del Web » Programando para Internet » Python »

sentencias condicionales anidadas, un if dentro de otro if

Estas en el tema de sentencias condicionales anidadas, un if dentro de otro if en el foro de Python en Foros del Web. Hola, aun no entiendo cuando y porque se usa un if dentro de otro if, si perfectamente se puede usar un elif, por ejemplo ando ...
  #1 (permalink)  
Antiguo 11/02/2012, 18:31
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 12 años, 5 meses
Puntos: 2
sentencias condicionales anidadas, un if dentro de otro if

Hola, aun no entiendo cuando y porque se usa un if dentro de otro if, si perfectamente se puede usar un elif, por ejemplo ando solucionando este problema:

Diseña un programa que, dados dos números enteros, muestre por pantalla uno de estos mensajes:
1.El segundo es el cuadrado exacto del primero.
2. El segundo es menor que el cuadrado del primero O El segundo es mayor que el cuadrado del primero.

Dependiendo de la verificación de la condición correspondiente al significado de cada mensaje.

Lo hago perfecto con elif, pero con if, si dos o mas se cumplen, imprime los resultados.

Agradeceria una explicación un poco autodidacta de ustedes, ya que los libros no entiendo mucho.

Muchas Gracias.
  #2 (permalink)  
Antiguo 11/02/2012, 19:14
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: sentencias condicionales anidadas, un if dentro de otro if

Cita:
Iniciado por Okapps Ver Mensaje
Hola, aun no entiendo cuando y porque se usa un if dentro de otro if
Preferentemente nunca.

Cita:
Iniciado por Okapps Ver Mensaje
si perfectamente se puede usar un elif
elif es una abreviación de else if, lo cual lo convierte automáticamente en un if dentro de if. Ademas puede que no siempre se sustituya con un elif, que pasa si tengo:

Código Python:
Ver original
  1. if x > 10:
  2.     #Haz algo...
  3.     if x > 20:
  4.         #Haz algo mas especial...

O que pasa si tengo algo así, no necesariamente usaría un elif, mas bien usaría un and.
Código Python:
Ver original
  1. if x > 2:
  2.     if esPrimo(x):
  3.         print "Es primo"


Cita:
Iniciado por Okapps Ver Mensaje
Lo hago perfecto con elif, pero con if, si dos o mas se cumplen, imprime los resultados.
Te aseguro que el problema no del lenguaje, mas bien es un error de lógica de parte tuyo. Si se te complica mucho puedes sustituir "elif" por "else if"

Cita:
Iniciado por Okapps Ver Mensaje
Agradeceria una explicación un poco autodidacta de ustedes, ya que los libros no entiendo mucho.
Veo que no estas acostumbrado con el termino autodidacta.
¿Qué libros estas leyendo?, ¿Por que no les entiendes, están en ingles?, ¿Cuanto haz leído de esos libros?
  #3 (permalink)  
Antiguo 11/02/2012, 19:40
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 12 años, 5 meses
Puntos: 2
Respuesta: sentencias condicionales anidadas, un if dentro de otro if

Hola,
Lo que quise decir con una explicación un poco autodidacta es, que quien me deseara o quisera explicar en este caso fue tu, fuese algo (Propio de la persona), ósea algo echo y dicho por lo que sabes.

Ahora ya entiendo:
Código:
a = float(raw_input('Dame el valor de a: '))
b = float(raw_input('Dame el valor de b: '))
if a != 0: #Se cumple siempre y cuando a no sea igual a cero.
    x = -b / a
    print 'solución', x
if a == 0: # Se inicia y tiene dos if anidados, si el primero no se cumple el segundo lo hace.
    if b != 0: #Si b es diferente a 0 se ejecuta este if y el siguiente no lo hace.
        print 'La ecuación no tiene solución'
    if b == 0: # Si se ejecuta hasta aqui quiere decir que a == 0 y b == 0, y que el resto es falso.
        print 'La ecuacion tiene infinitas soluciones.'
Corrigeme si me equivoco en mi interpretación, me podrías enseñar como publicar el código de la manera que lo haces, lo he intentado con las herramientas del editor pero nada.
Gracias.

Última edición por Okapps; 11/02/2012 a las 20:45
  #4 (permalink)  
Antiguo 11/02/2012, 21:18
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: sentencias condicionales anidadas, un if dentro de otro if

Estas lejos de captar el concepto por lo que te recomiendo practicar más y leer más (incluso después de escribir tu código, léelo, preferentemente en voz alta).

Código Python:
Ver original
  1. a = float(raw_input('Dame el valor de a: '))
  2. b = float(raw_input('Dame el valor de b: '))
  3. if a != 0: #Se cumple siempre y cuando a no sea igual a cero.
  4.     x = -b / a
  5.     print 'solución', x
  6. else: # Si no, puedo asumir perfectamente que a es cero
  7.     if b != 0: #Si b es diferente a 0 se ejecuta el codigo dentro de este if
  8.         print 'La ecuación no tiene solución'
  9.     else: # Si se ejecuta hasta aqui quiere decir que a == 0 y b == 0, y que el resto es falso.
  10.         print 'La ecuacion tiene infinitas soluciones.'

Por cierto, no respondiste mi pregunta acerca de los libros.

Puedes usar la etiqueta [HIGHLIGHT="Python"][/HIGHLIGHT] en lugar de la etiqueta [CODE][/CODE], para resaltar el código.
  #5 (permalink)  
Antiguo 11/02/2012, 22:13
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 12 años, 5 meses
Puntos: 2
Respuesta: sentencias condicionales anidadas, un if dentro de otro if

Hola, el ejercicio lo saque de exactamente un libro virtual en PDF de 399 paginas, yo tuve la idea que tienes, pero me confundió el ejercicio porque es directamente del libro. El cual voy en la pagina 89 y ya me he leido otros libros pero mas que todo sobre fundamentos de programación. Aqui el link del libro.
  #6 (permalink)  
Antiguo 12/02/2012, 09:40
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: sentencias condicionales anidadas, un if dentro de otro if

Cita:
Iniciado por Okapps Ver Mensaje
Hola, aun no entiendo cuando y porque se usa un if dentro de otro if, si perfectamente se puede usar un elif
porque a veces querés hacer algo únicamente si se cumplen varias condiciones, pero querés manejar la condición que no se cumple dependiendo de cuál sea.

Un ejemplo

Código Python:
Ver original
  1. if a:
  2.     if b:
  3.         if c:
  4.             todo correcto
  5.         else:
  6.             falla c
  7.     else:
  8.         falla b
  9. else:
  10.     falla a

Esta forma no es facilmente representable con un elif, requeriría algo como

Código Python:
Ver original
  1. if a and b and c:
  2.     todo correcto
  3. elif a and b and not c:
  4.     falla c
  5. elif a and not b and c:
  6. ....

que no es igual de claro que la primera forma.


Saludos.
  #7 (permalink)  
Antiguo 12/02/2012, 16:46
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 12 años, 5 meses
Puntos: 2
Respuesta: sentencias condicionales anidadas, un if dentro de otro if

Vaya yo he logrado ahora si entender el if el elif y el else, y me sirvió mucho la ayuda que me ofrecisteis AlvaroG, pude solucionar un ejercicio quemando neuronas al principio ya que no lo entendia bien, pero me puse a mirar tu ejemplo y compararlo y aprendi.

Mira este ejercicio:
Código Python:
Ver original
  1. no = raw_input('Danos un caracter: ')
  2. if no == 'a' or no == 'b':
  3.     print 'es minuscula'
  4. else:
  5.     if no == 'c' or no == 'd':
  6.         print 'es minuscula'
  7.     else:
  8.         if no == 'e' or no == 'f':
  9.             print 'es minuscula'
  10.         else:
  11.             if no == 'g' or no == 'h':
  12.                 print 'es minuscula'
  13.             else:
  14.                 if no == 'i' or no == 'j':
  15.                     print 'es minuscula'
  16.                 else:
  17.                     print 'Es Mayuscula'
Ahora si esta mas que solucionado el tema, muchas gracias a todos, por el tiempo y la ayuda.

Otro ejemplo con ecuaciones:
Código Python:
Ver original
  1. from math import sqrt
  2. a = int(raw_input('Danos a: '))
  3. b = int(raw_input('Danos b: '))
  4. c = int(raw_input('Danos c: '))
  5.  
  6. if a != 0:
  7.     print 'ecuacion de segundo grado'
  8. else: # Asusmo que a = 0
  9.     if b != 0:
  10.         print 'ecuacion de primer grado'
  11.     else: # Asumo que a = 0 y b = 0
  12.         if c != 0:
  13.             print 'la ecuacion no tiene solucion'
  14.         else: # Asumo que a = 0 b = 0 c = 0
  15.             print 'la ecuacion tiene infinitas soluciones'

Última edición por Okapps; 12/02/2012 a las 16:57
  #8 (permalink)  
Antiguo 12/02/2012, 19:50
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: sentencias condicionales anidadas, un if dentro de otro if

Pues en realidad tu primer ejemplo no es apropiado, porque solamente tenés una condición que comprobar y una situación que manejar (minúscula contra mayúscula). En vez de anidar los if de esa forma, es mejor
Código Python:
Ver original
  1. if (no == 'a' or no == 'b') and (no == 'c' or no == 'd') and (no == 'e' or no == 'f') and
  2.    (no == 'g' or no == 'h') and (no == 'i' or no == 'j'):
  3.     print 'es minuscula'
  4. else
  5.     print 'Es Mayuscula'
Esto se transforma a
Código Python:
Ver original
  1. if no == 'a' or no == 'b' or no == 'c' or no == 'd' or no == 'e' or no == 'f' or no == 'g'
  2.    or no == 'h' or no == 'i' or no == 'j':
O, siendo más pythonista, a
Código Python:
Ver original
  1. if no in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i')
o incluso
Código Python:
Ver original
  1. if no in string.ascii_lower[:10]
dependiendo de lo que quieras.

El segundo ejemplo está mejor.


Saludos.

Etiquetas: anidadas, condicionales, programa, sentencias, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:51.