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

Iniciado por Hu0r, Marzo 04, 2013, 03:54:15 AM

Tema anterior - Siguiente tema

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

Marzo 04, 2013, 03:54:15 AM Ultima modificación: Septiembre 09, 2014, 08:46:56 PM por Expermicid
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

#!/usr/bin/python
# -*- coding: utf-8 -*-

print "¿Deseas buscar manualmente?"
opt = raw_input("Si/No?: ")

if opt == "Si":

   print "Las secciones son... "
   print "Sección 1"
   print "Sección 2"
   # etc
   print "Sección 20"

   section = raw_input("Selecciona una: ")

    if section == "Sección 1":
       # acción
    elif section == "Sección 2":
        # acción
       
    # etc...

    elif section == "Sección 20":
        # acción
       
    else:
        print "No existe esta sección..."
   
elif opt = "No"
    print "Búsqueda automática..."

else:
    print "Debes escribir Si o No..."

raw_input()


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!!

Marzo 04, 2013, 11:16:13 AM #1 Ultima modificación: Marzo 04, 2013, 11:18:46 AM por blozzter
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".

Citarpero 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

#!/usr/bin/python
# -*- coding: utf-8 -*-

opt = "1"

while(opt != "Si" and opt != "No"):   # mientras sea un valor invalido seguira repitiendo el ciclo
print "Deseas buscar manualmente?"
opt = raw_input("Si/No?: ")

if opt == "Si":

print "Las secciones son... "
print "Seccion 1"
print "Seccion 2"
# etc
print "Seccion 20"

section = raw_input("Selecciona una: ")

if section == "Seccion 1":
pass

elif section == "Seccion 2":
pass

elif section == "Seccion 20":
pass

# etc...

else:
print "No existe esta seccion..."

elif opt == "No":
print "Busqueda automatica..."



y una salida:

Código: php

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.
¡< blozzter >!

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

No tienes permitido ver los links. Registrarse o Entrar a mi 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 >!

Es una forma de controlar el bucle while, es decir, es para evitar bucles infinitos.

Por ej.,:
Código: python

salir = 0
while salir!=1:
    opt = raw_input("Adivina que número estoy pensando: ")
    if opt == "25":
        salir=1
    else:
        continue
print "Muy bien! Adivinaste!"


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

Saludos!
WhiZ


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi 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 permitido ver los links. Registrarse o Entrar a mi cuenta
Es una forma de controlar el bucle while, es decir, es para evitar bucles infinitos.

Por ej.,:
Código: python

salir = 0
while salir!=1:
    opt = raw_input("Adivina que número estoy pensando: ")
    if opt == "25":
        salir=1
    else:
        continue
print "Muy bien! Adivinaste!"


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!