entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Problema con sentencia else después de un bucle

Hola, estoy aprendiendo Python y como proyecto me propuse hacer una agenda, libreta de direcciones...

Hasta ahora sirve para

  • Buscar contactos
  • Crear contactos
  • Mostrar todos los contactos

(Después le añadiré más funciones)

Pero tengo un bug cuando busco un contacto:

arturo, balbuena, aguilar, 2-65-43-12, avenida lomas feo, [email protected]
#El contacto si fue encontrado como se muestra arriba
#Pero se imprime esto:
No se encontró el contacto

Ésta es mi función para buscar contactos:

def buscar():   #Funcion para buscar contactos
    doc = open('hola.txt', 'r')
    busqueda = input('Palabra clave a buscar: ')
    for line in doc:
        if busqueda in line:
        print(line)
    else:
        print('No se encontró el contacto.')

Espero me puedan ayudar diciéndome que estoy haciendo mal.
Para mas información aquí está el código completo

1voto

juan_luis_cano comentado

El código completo no ha hecho falta, has diagnosticado muy bien tu problema seleccionando el fragmento de código que te daba problemas :) Sin embargo, yo te recomendaría cambiar el título a «Problema con sentencia else después de un bucle» o algo así. En cuanto a la categoría, no es muy explicativa tampoco pero no había mejor opción :P

2 Respuestas

3votos

juan_luis_cano Puntos1520

Como explican en el tutorial de Python en español:

Las sentencias de lazo pueden tener una cláusula else que es ejecutada
cuando el lazo termina, luego de agotar la lista (con for) o cuando la
condición se hace falsa (con while), pero no cuando el lazo es
terminado con la sentencia break

Es decir: la sentencia else se ejecutará si se acaba el bucle sin que lo cortes tú con una sentencia break. Por tanto, lo que te falta es cortar el bucle cuando encuentras el contacto:

def buscar():   #Funcion para buscar contactos
    doc = open('hola.txt', 'r')
    busqueda = input('Palabra clave a buscar: ')
    for line in doc:
        if busqueda in line:
        print(line)
        break
    else:
        print('No se encontró el contacto.')

0voto

arturo_balbuena comentado

No sabía de esa documentación en español, muchas gracias!

2votos

Petrakis Puntos180

Buenas, quería comentar un breve matiz

En python hay 2 formas de recoger entrada, con el input() y con el raw_input()

(Nota: desconozco el python3 pero según tengo entendido ahí las cosas cambian y se elimina el input() )

Normalmente el input() se utiliza cuando vas a recoger datos numéricos y el raw_input() strings

Lo cierto es que en realidad el input() es como un eval() es decir recoge expresiones del lenguaje python esto es, si pones paco supongo que te lo tomara como una variable y no como una string ya que al input() deberias introducirlo como "paco" y claro el usuario va a introducir una string en lenguaje natural, no tiene porque entender la sintaxis de python , por ejemplo cuando te registras introduces por teclado tu usuario pero no lo haces de esta manera "usuario" pues el input() para que funcione lo requiere, por ello existe el raw_input() que como su nombre indica recoge datos raw o en bruto

esto es a primera vista, no se si es el problema porque no he tenido tiempo de mirarl con detenimiento, por eso era un breve matiz

Saludos

0voto

arturo_balbuena comentado

Gracias por responder, en efecto, raw_input desaparece en Python 3, e input() se queda tomando enteros, strings, variables...etc

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta