comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[SOLUCIONADO] If, elif, else... return?

  • 5 Respuestas
  • 2016 Vistas

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

Desconectado Hu0r

  • *
  • Underc0der
  • Mensajes: 37
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Marzo 04, 2013, 03:54:15 am »
Hola de nuevo, he vuelto con más dudas jajja. Resulta que quiero realizar varias peticiones y subpeticiones con condicionales (if, elif, else), pero no resulta como quiero, quizá sea la identación... No estoy seguro. Por ejemplo, si tengo este código:

Código: Python
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. print "¿Deseas buscar manualmente?"
  5. opt = raw_input("Si/No?: ")
  6.  
  7. if opt == "Si":
  8.  
  9.    print "Las secciones son... "
  10.    print "Sección 1"
  11.    print "Sección 2"
  12.    # etc
  13.    print "Sección 20"
  14.  
  15.    section = raw_input("Selecciona una: ")
  16.  
  17.     if section == "Sección 1":
  18.        # acción
  19.     elif section == "Sección 2":
  20.         # acción
  21.        
  22.     # etc...
  23.  
  24.     elif section == "Sección 20":
  25.         # acción
  26.        
  27.     else:
  28.         print "No existe esta sección..."
  29.    
  30. elif opt = "No"
  31.     print "Búsqueda automática..."
  32.  
  33. else:
  34.     print "Debes escribir Si o No..."
  35.  
  36. raw_input()
  37.  

El primer problema es que, si escribo Si, me aparece el listado de secciones (esto está bien), pero si escribo No o cualquier otra cosa, también aparecen listadas. Asimismo, cuando escojo una Sección, si no es la primera, se ejecuta sólo la segunda. (Es decir, si escojo la tecera, funciona la segunda...)

La idea es que (en rojo lo que escribo):

¿Búsqueda Manual?:

- Si
---- Imprime secciones---
---- Sección 1
---- Sección 2
---- ¿Cuál sección?
---- Sección 1
---------- Ejecutar acción

---------------------------------------------

¿Búsqueda Manual?:

- No
---- Ejecutar Acción

---------------------------------------------


¿Búsqueda Manual?:

- ASDFasdfadsfdsf
---- Debes introducir Si o No.

# Preguntar de nuevo

¿Búsqueda Manual?:

...

---------------------------------------------

No sé si entendí mal los if, o no sé.

PD: ¿Y cómo haría lo que está en verde? Es decir, que si no recibe lo que quiero, que se devuelva a la sentencia anterior.

Saludos y gracias!!
« Última modificación: Septiembre 09, 2014, 08:46:56 pm por Expermicid »

Desconectado blozzter

  • *
  • Underc0der
  • Mensajes: 106
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • blozzter-blz
« Respuesta #1 en: Marzo 04, 2013, 11:16:13 am »
Hu0r, antes de postear código asegúrate de no tener errores en tu identación y de que se pueda ejecutar sin problemas, porque quienes te lo revisamos para ayudarte perdemos tiempo haciendo correcciones básicas.

Sobre lo que dices en color verde, debes hacerlo con un ciclo while, pero conste que no es hacer "que se repita la sentencia anterior".

Citar
pero si escribo No o cualquier otra cosa, también aparecen listadas.

Eso pasa por un error en la identación.
Por lo que veo, entiendes el concepto de los if, elif y else de buena forma.

Te recomiendo el IDE Spyder para que trabajes con python, te ayudará mucho en el tema de la identación.

Dejo tu código corregido, borré algunas cosas innecesarias. Uso pass para no dejar la sentencia siguiente a los if en blanco porque daría error. con pass simplemente no hace nada.

Código: Python
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. opt = "1"
  5.  
  6. while(opt != "Si" and opt != "No"):   # mientras sea un valor invalido seguira repitiendo el ciclo
  7.         print "Deseas buscar manualmente?"
  8.         opt = raw_input("Si/No?: ")
  9.  
  10.         if opt == "Si":
  11.          
  12.                 print "Las secciones son... "
  13.                 print "Seccion 1"
  14.                 print "Seccion 2"
  15.                 # etc
  16.                 print "Seccion 20"
  17.          
  18.                 section = raw_input("Selecciona una: ")
  19.          
  20.                 if section == "Seccion 1":
  21.                         pass
  22.                        
  23.                 elif section == "Seccion 2":
  24.                         pass
  25.                
  26.                 elif section == "Seccion 20":
  27.                         pass
  28.                        
  29.                 # etc...
  30.                        
  31.                 else:
  32.                         print "No existe esta seccion..."
  33.                        
  34.         elif opt == "No":
  35.                 print "Busqueda automatica..."
  36.  
  37.  

y una salida:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Deseas buscar manualmente?
Si/No?: Hu0r
Deseas buscar manualmente?
Si/No?: Blz
Deseas buscar manualmente?
Si/No?: Si
Las secciones son...
Seccion 1
Seccion 2
Seccion 20
Selecciona una: Seccion 1

C:\Users\...\Desktop>python g.py
Deseas buscar manualmente?
Si/No?: No
Busqueda automatica...

Si tu surge alguna duda, solo pregunta.
PD: creo que es más comodo para el usuario responder a preguntas con número en lugar de tener que escribir texto.

Saludos.
« Última modificación: Marzo 04, 2013, 11:18:46 am por blozzter »
¡< blozzter >!

Desconectado Hu0r

  • *
  • Underc0der
  • Mensajes: 37
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 en: Marzo 04, 2013, 01:41:34 pm »
Gracias, he entendido. Los conceptos los manejo pero tengo un grave problema con la identación... no sé por qué me ocurre eso. Estudiaré eso de los while. A todo esto, por qué a la variable le asignas la string "1"?

PD: Qué significa tu PD? xD

Desconectado blozzter

  • *
  • Underc0der
  • Mensajes: 106
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • blozzter-blz
« Respuesta #3 en: Marzo 04, 2013, 02:27:16 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Gracias, he entendido. Los conceptos los manejo pero tengo un grave problema con la identación... no sé por qué me ocurre eso. Estudiaré eso de los while. A todo esto, por qué a la variable le asignas la string "1"?

PD: Qué significa tu PD? xD

Le asigno una cadena que será inválida para que vuelva a preguntar de inmediato, si le pusiera "Si" o "No" no se ejecutaría el ciclo.
Con la PD me refiero a que podrías listar las secciones, ejemplo:
1.- Seccion 1
2.- Seccion 2

entonces, al momento de responder el usuario no tendría que escribir "Seccion 1" , sino que simplemente poner 1.

Saludos.
¡< blozzter >!

Desconectado WhiZ

  • *
  • Underc0der
  • Mensajes: 395
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 en: Marzo 04, 2013, 02:37:24 pm »
Es una forma de controlar el bucle while, es decir, es para evitar bucles infinitos.

Por ej.,:
Código: Python
  1. salir = 0
  2. while salir!=1:
  3.     opt = raw_input("Adivina que número estoy pensando: ")
  4.     if opt == "25":
  5.         salir=1
  6.     else:
  7.         continue
  8. print "Muy bien! Adivinaste!"
  9.  

Jeje es un ejemplo boludo pero creo que responde a tu duda.

Saludos!
WhiZ


Desconectado Hu0r

  • *
  • Underc0der
  • Mensajes: 37
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #5 en: Marzo 04, 2013, 02:48:53 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Gracias, he entendido. Los conceptos los manejo pero tengo un grave problema con la identación... no sé por qué me ocurre eso. Estudiaré eso de los while. A todo esto, por qué a la variable le asignas la string "1"?

PD: Qué significa tu PD? xD

Le asigno una cadena que será inválida para que vuelva a preguntar de inmediato, si le pusiera "Si" o "No" no se ejecutaría el ciclo.
Con la PD me refiero a que podrías listar las secciones, ejemplo:
1.- Seccion 1
2.- Seccion 2

entonces, al momento de responder el usuario no tendría que escribir "Seccion 1" , sino que simplemente poner 1.

Saludos.

No tienes permisos para ver links. Registrate o Entra con tu cuenta
Es una forma de controlar el bucle while, es decir, es para evitar bucles infinitos.

Por ej.,:
Código: Python
  1. salir = 0
  2. while salir!=1:
  3.     opt = raw_input("Adivina que número estoy pensando: ")
  4.     if opt == "25":
  5.         salir=1
  6.     else:
  7.         continue
  8. print "Muy bien! Adivinaste!"
  9.  

Jeje es un ejemplo boludo pero creo que responde a tu duda.

Saludos!
WhiZ

Muchísimas gracias a los dos!!. Modifiqué un poco el código, para que no preguntara siempre lo mismo y pude realizar un if dentro de un while sin que sea un loop infinito (fue todo un desafío, me costó darme cuenta que tenía que usar break).

Así da gusto aprender!! Saludos!

 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] ¿Kali Linux o Kali Linux Ligth ?

Iniciado por worq

Respuestas: 2
Vistas: 6198
Último mensaje Noviembre 21, 2017, 12:28:54 pm
por Codig0Bit
[SOLUCIONADO] ¿Como publicar un software como software libre?

Iniciado por FuriosoJack

Respuestas: 2
Vistas: 1529
Último mensaje Mayo 23, 2017, 07:24:22 am
por HATI
[SOLUCIONADO] Multiuploader de imagenes con mysql, hosting de imagenes con mysql

Iniciado por graphixx

Respuestas: 4
Vistas: 2123
Último mensaje Marzo 26, 2013, 05:42:58 pm
por Xt3mP
[SOLUCIONADO] Linux Mint, errores, errores y mas errores...

Iniciado por n1sendev

Respuestas: 12
Vistas: 2662
Último mensaje Noviembre 22, 2017, 06:50:55 am
por RuidosoBSD
[SOLUCIONADO] Ayuda urgente con Virus "Virus.Win32Sality"

Iniciado por Napsters

Respuestas: 6
Vistas: 3338
Último mensaje Junio 11, 2012, 03:38:18 am
por Satyricon