Ejemplos con los bucles for y while más menú del conversor - Python avanzado - Capítulo 11


En este capítulo verás algunos ejemplos con los bucles while y for. Además, al final del capítulo, tienes un pequeño menú para hacer funcionar los conversores del capítulo anterior.

Empecemos por algo fácil, un bucle while con un if.

A este bucle le paso como condición la variable 'a' desde que vale 0 hasta qué vale menos de 10. No solo eso, también le añado un condicional if que dice que no se ejecute hasta que valga 10, que la ejecución se rompa o se termine en el valor 5 de la variable 'a' y que no haga caso a la condición del bucle.

Ya sé que se suele escribir por convención una i a las variables de los bucles, pero a mí no siempre me gusta seguir las convenciones...

Código

a = 0
while a < 10:
    print(a)
    if a == 5:
        print("Saliendo del bucle antes de tiempo...")
        break
    a += 1

Resultado

0
1
2
3
4
5
Saliendo del bucle antes de tiempo...

Podemos hacer esto de otra forma con un bucle for.

Código

for a in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10):
    print(a)
    if a == 5:
        print("Saliendo del bucle antes de tiempo...")
        break

Resultado

1
2
3
4
5
Saliendo del bucle antes de tiempo...

Puedes mejorar este bucle for con un rango (imagina si en lugar de poner los números del 1 al 10 fueran del 1 al 10.000).

Código

for a in range(1, 10):
	print(a)
	if a == 5:
	    print("Saliendo del bucle antes de tiempo...")
	    break

Resultado

1
2
3
4
5
Saliendo del bucle antes de tiempo...

Empecemos a complicar un poco la cosa, podemos combinar varios if con continue y break por ejemplo.

Código

for a in range(1, 10):
	if a == 5 or a == 7:
	    print("Se omitió este número...")
	    continue
	if a == 9:
	    print("Saliendo del bucle antes de tiempo...")
	    break
	print(a)

Resultado

Lo que hace aquí es muy sencillo, tenemos el rango que va a imprimir del número 1 al 10, sin embargo, el print() está abajo del todo, para que lea primero el código de los if en cada vuelta.
Cuando el valor en el bucle es 5 o 7 se imprime el texto "Se omitió este número...". Esto es lo que imprime en lugar del valor. Gracias al continue que es el que se salta esa parte del bucle pero no lo rompe como si hace el break cuando a vale 9.

1
2
3
4
Se omitió este número...
6
Se omitió este número...
8
Saliendo del bucle antes de tiempo...

Iterar listas y tuplas con el bucle for

Veamos un bucle for para recorrer y presentar una lista o una tupla.

Código

for indice, elemento in enumerate(['rojo', 'azul', 'verde', 'amarillo']):
    print(indice, '-', elemento)

Resultado

Lo que hace aquí es muy sencillo, tenemos el rango que va a imprimir del número 1 al 10, sin embargo, el print() está abajo del todo, para que lea primero el código de los if en cada vuelta.
Cuando el valor en el bucle es 5 o 7 se imprime el texto "Se omitió este número...". Esto es lo que imprime en lugar del valor. Gracias al continue que es el que se salta esa parte del bucle pero no lo rompe como si hace el break cuando a vale 9.

0 - rojo
1 - azul
2 - verde
3 - amarillo

No se si te habrás fijado, pero los números de la lista se generan automáticamente con el número de elemento iterado en el bucle, por eso cuenta desde el 0. Esto puede ser en muchos casos que no sea lo esperado o lo que queramos hacer. Hagamos que la lista empiece desde el número 1.
Esto se hace añadiendo un nuevo atributo al enumerate(), en mi caso es un 1, pero si quieres que empiece a contar desde por ejemplo el 50, le pones un 50.

Código

for indice, elemento in enumerate(['rojo', 'azul', 'verde', 'amarillo'], 1):
	print(indice, '-', elemento)

Resultado

1 - rojo
2 - azul
3 - verde
4 - amarillo

Si quieres hacer un índice random, no hace falta que utilices ninguna función random en este caso, puedes aprovechar los sets:

Cada vez que esta lista se carga, la ordena de manera diferente, ya que es un set y los sets son desordenados, unas veces estará verde en el puesto número 1, otras estará azul, etc.

Código

for indice, elemento in enumerate({'rojo', 'azul', 'verde', 'amarillo'}, 1):
	print(indice, '-', elemento)

Resultado

Pongo un par de resultados diferentes obtenidos en la consola:

1 - verde
2 - rojo
3 - amarillo
4 - azul
1 - amarillo
2 - verde
3 - azul
4 - rojo

Menú para el conversor del vídeo

Hice un conversor de consola que se puede adaptar con interfaz gráfica, para números de muchos tipos. En el vídeo podrás ver su funcionamiento. Te dejo aquí el código por si quieres probarlo:

Código

def convierte():
    print()
    numero = input("Introduce un número:\n")
    sistema = input(
        "Introduce un sistema:\n1-Binario a decimal.\n2-Octal a decimal\n3-Hexadecimal a decimal.\n4-Base 32 a "
        "decimal.\n5-Salir.\n\n")

    if sistema == "1":
        sistema = 2
        final = int(numero, sistema)
        print("El número binario ", numero, " es el número ", final, " en decimales.")

    elif sistema == "2":
        sistema = 8
        final = int(numero, sistema)
        print("El número octal ", numero, " es el número ", final, " en decimales.")

    elif sistema == "3":
        sistema = 16
        final = int(numero, sistema)
        print("El número hexadecimal ", numero, " es el número ", final, " en decimales.")

    elif sistema == "4":
        sistema = 32
        final = int(numero, sistema)
        print("El número con base 32 ", numero, " es el número ", final, " en decimales.")

    elif sistema == "5":
        pass
    else:
        print("No has introducido una opción válida.")


def binario_decimal():
    numero = int(input("Introduce un número:\n"))
    convertido = bin(numero)[2:]
    print(convertido)


def octal_decimal():
    numero = int(input("Introduce un número:\n"))
    convertido = oct(numero)[2:]
    print(convertido)


def hexadecimal_decimal():
    numero = int(input("Introduce un número:\n"))
    convertido = hex(numero)[2:]
    print(convertido)


def menu():
    print("Elige una opción:\n",
          "1-Conversiones a decimal.\n",
          "2-Conversión de decimal a binario.\n",
          "3-Conversión de decimal a octal.\n",
          "4-Conversión de decimal a hexadecimal.\n",
          "5-Salir.\n")

    opcion = input("Escribe un número y pulsa enter: ")

    if opcion == "1":
        convierte()

    elif opcion == "2":
        binario_decimal()

    elif opcion == "3":
        octal_decimal()

    elif opcion == "4":
        hexadecimal_decimal()

    elif opcion == "5":
        pass

    else:
        print("No has introducido una opción válida.")


menu()

Suscríbete a mi canal de YouTube para apoyarme

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.


Comentarios

Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.