Bucle while - Soluciones (1)

Se ofrecen a continuación unas posibles soluciones de los ejercicios (1) de bucle while.

Bucle while (1) - 1

def main():
    print("NÚMERO MAYOR")
    primero = int(input("Escriba un número: "))
    segundo = int(input(f"Escriba un número mayor que {primero}: "))

    while segundo <= primero:
        segundo = int(
            input(f"{segundo} no es mayor que {primero}. Inténtelo de nuevo: ")
        )

    print()
    print(f"Los números que ha escrito son {primero} y {segundo}.")


if __name__ == "__main__":
    main()

Bucle while (1) - 2

def main():
    print("NÚMEROS MAYORES")
    primero = float(input("Escriba un número: "))
    segundo = float(input(f"Escriba un número mayor que {primero}: "))

    while segundo > primero:
        segundo = float(input(f"Escriba un número mayor que {primero}: "))

    print()
    print(f"{segundo} no es mayor que {primero}.")


if __name__ == "__main__":
    main()

Bucle while (1) - 3

def main():
    print("CADA VEZ MÁS GRANDES")
    primero = int(input("Escriba un número: "))
    segundo = int(input(f"Escriba un número mayor que {primero}: "))

    while segundo > primero:
        primero = segundo
        segundo = int(input(f"Escriba un número mayor que {primero}: "))

    print()
    print(f"{segundo} no es mayor que {primero}.")


if __name__ == "__main__":
    main()

Bucle while (1) - 4

def main():
    print("NÚMEROS POSITIVOS")
    objetivo = int(input("Escriba la cantidad de números positivos a escribir: "))
    while objetivo < 1:
        objetivo = int(input("La cantidad debe ser mayor que 0. Inténtelo de nuevo: "))

    print()
    numero = int(input("Escriba un número: "))
    total = 1
    if numero > 0:
        cantidad = 1
    else:
        cantidad = 0

    while cantidad < objetivo:
        numero = int(input("Escriba otro número: "))
        if numero > 0:
            cantidad += 1
        total += 1

    print()
    if total == 1:
        print("Ha escrito 1 número positivo.")
    elif objetivo == 1:
        print(f"Ha escrito {total} números, {objetivo} de ellos positivo.")
    else:
        print(f"Ha escrito {total} números, {objetivo} de ellos positivos.")


if __name__ == "__main__":
    main()

Bucle while (1) - 5

def main():
    print("SUMA DE NÚMEROS")
    numero = int(input("Escriba un número: "))
    suma = 0
    while numero >= 0:
        suma += numero
        numero = int(input("Escriba otro número: "))
    print()
    print(f"La suma de los números positivos introducidos es {suma}.")


if __name__ == "__main__":
    main()

Bucle while (1) - 6

def main():
    print("HASTA EL LÍMITE")
    limite = float(input("Escriba el valor límite: "))
    while limite <= 0:
        limite = float(input("El límite debe ser mayor que 0. Inténtelo de nuevo: "))

    print()
    numero = float(input("Escriba un número: "))
    suma = numero

    while suma < limite:
        numero = float(input("Escriba otro número: "))
        suma += numero

    print()
    print(f"Ha superado el límite. La suma de los números introducidos es {suma}.")


if __name__ == "__main__":
    main()

Bucle while (1) - 7

def main():
    print("ENTRE DOS VALORES")
    minimo = int(input("Escriba un número: "))
    maximo = int(input(f"Escriba un número mayor que {minimo}: "))
    while minimo >= maximo:
        maximo = int(input(f"{maximo} no es mayor que {minimo}. Inténtelo de nuevo: "))

    print()
    numero = float(input(f"Escriba un número entre {minimo} y {maximo}: "))
    contador = 0

    while minimo <= numero and numero <= maximo:
        contador += 1
        numero = float(input(f"Escriba otro número entre {minimo} y {maximo}: "))

    print()
    if contador == 0:
        print(f"No ha escrito ningún número entre {minimo} y {maximo}.")
    elif contador == 1:
        print(f"Ha escrito 1 número entre {minimo} y {maximo}.")
    else:
        print(f"Ha escrito {contador} números entre {minimo} y {maximo}.")


if __name__ == "__main__":
    main()

Bucle while (1) - 8

def main():
    print("CUENTA PARES (1)")
    numero = int(input("Escriba un número par: "))
    while numero % 2 != 0:
        numero = int(input(f"{numero} no es un número par. Inténtelo de nuevo: "))
    contador = 1
    respuesta = input("¿Quiere escribir otro número par? (S/N): ")

    while respuesta == "S" or respuesta == "s":
        numero = int(input("Escriba un número par: "))
        while numero % 2 != 0:
            numero = int(input(f"{numero} no es un número par. Inténtelo de nuevo: "))
        contador += 1
        respuesta = input("¿Quiere escribir otro número par? (S/N): ")

    print()
    if contador == 1:
        print("Ha escrito 1 número par.")
    else:
        print(f"Ha escrito {contador} números pares.")


if __name__ == "__main__":
    main()

8-2 - Aceptar únicamente S, s, N o n

La versión que sólo acepta S, N, s o n por respuesta podría ser:

def main():
    print("CUENTA PARES (2)")
    numero = int(input("Escriba un número par: "))
    while numero % 2 != 0:
        numero = int(input(f"{numero} no es un número par. Inténtelo de nuevo: "))
    contador = 1
    respuesta = input("¿Quiere escribir otro número par? (S/N): ")
    while (
        respuesta != "S" and respuesta != "N" and respuesta != "s" and respuesta != "n"
    ):
        respuesta = input("¿Quiere escribir otro número par? (S/N): ")

    while respuesta == "S" or respuesta == "s":
        numero = int(input("Escriba un número par: "))
        while numero % 2 != 0:
            numero = int(input(f"{numero} no es un número par. Inténtelo de nuevo: "))
        contador += 1
        respuesta = input("¿Quiere escribir otro número par? (S/N): ")

    print()
    if contador == 1:
        print("Ha escrito 1 número par.")
    else:
        print(f"Ha escrito {contador} números pares.")


if __name__ == "__main__":
    main()

Bucle while (1) - 9

Un algoritmo sencillo, pero poco eficiente, sería el siguiente:

def main():
    print("DESCOMPOSICIÓN EN NÚMEROS PRIMOS")
    numero = int(input("Escriba un número entero mayor que 1: "))
    while numero <= 1:
        numero = int(input(f"{numero} no es mayor que 1. Inténtelo de nuevo: "))
    copia = numero

    print("Descomposición en factores primos:", end="")
    for i in range(2, numero + 1):
        while copia % i == 0:
            copia = copia // i
            print(f" {i}", end="")
    print()


if __name__ == "__main__":
    main()

Una solución más complicada, pero mucho más rápida, sería la siguiente:

def main():
    print("DESCOMPOSICIÓN EN NÚMEROS PRIMOS")
    numero = int(input("Escriba un número entero mayor que 1: "))
    while numero <= 1:
        numero = int(input(f"{numero} no es mayor que 1. Inténtelo de nuevo: "))
    copia = numero

    print("Descomposición en factores primos:", end="")
    i = 2
    while copia > i:
        while copia % i == 0:
            copia = copia // i
            print(f" {i}", end="")
        i += 1
    if copia != 1:
        print(f" {copia}")


if __name__ == "__main__":
    main()

Solución que, ligeramente modificada, sería más rápida para números grandes:

def main():
    print("DESCOMPOSICIÓN EN NÚMEROS PRIMOS")
    numero = int(input("Escriba un número entero mayor que 1: "))
    while numero <= 1:
        numero = int(input(f"{numero} no es mayor que 1. Inténtelo de nuevo: "))
    copia = numero

    print("Descomposición en factores primos:", end="")
    i = 2
    while copia > i * i:
        while copia % i == 0:
            copia = copia // i
            print(f" {i}", end="")
        i += 1
    if copia != 1:
        print(f" {copia}")


if __name__ == "__main__":
    main()