Se ofrecen a continuación unas posibles soluciones de los ejercicios de bucle for (1).
def main():
print("PARES E IMPARES")
numero_1 = int(input("Escriba un número entero: "))
numero_2 = int(input(f"Escriba un número entero mayor o igual que {numero_1}: "))
if numero_2 < numero_1:
print(f"¡Le he pedido un número entero mayor o igual que {numero_1}!")
else:
for i in range(numero_1, numero_2 + 1):
if i % 2 == 0:
print(f"El número {i} es par.")
else:
print(f"El número {i} es impar.")
if __name__ == "__main__":
main()
print("PARES E IMPARES")
numero_1 = int(input("Escriba un número entero: "))
numero_2 = int(input(f"Escriba un número entero mayor o igual que {numero_1}: "))
if numero_2 < numero_1:
print(f"¡Le he pedido un número entero mayor o igual que {numero_1}!")
else:
...
for i in range(numero_1, numero_2 + 1):
...
if i % 2 == 0:
print(f"El número {i} es par.")
else:
print(f"El número {i} es impar.")
def main():
print("DIVISORES")
numero = int(input("Escriba un número entero mayor que cero: "))
if numero <= 0:
print("¡Le he pedido un número entero mayor que cero!")
else:
print(f"Los divisores de {numero} son ", end="")
for i in range(1, numero + 1):
if numero % i == 0:
print(i, end=" ")
if __name__ == "__main__":
main()
print(f"Los divisores de {numero} son ", end="")
for i in range(1, numero + 1):
if numero % i == 0:
...
if numero % i == 0:
print(i, end=" ")
Como los divisores de un números son siempre inferiores o igual a la mitad del número (exceptuando el propio número, claro), no hace falta comprobar todos los valores desde 1 hasta el número, basta con probar hasta la mitad del número.
def main():
print("DIVISORES")
numero = int(input("Escriba un número entero mayor que cero: "))
if numero <= 0:
print("¡Le he pedido un número entero mayor que cero!")
else:
print(f"Los divisores de {numero} son ", end="")
for i in range(1, numero // 2 + 1):
if numero % i == 0:
print(i, end=" ")
print(f"{numero} ")
if __name__ == "__main__":
main()
for i in range(1, numero // 2 + 1):
print(f"{numero} ")
def main():
print("MAYORES QUE EL PRIMERO")
valores = int(input("¿Cuántos valores va a introducir? "))
if valores < 1:
print("¡Imposible!")
else:
primero = int(input("Escriba un número: "))
for i in range(valores - 1):
numero = int(input(f"Escriba un número más grande que {primero}: "))
if numero <= primero:
print(f"¡{numero} no es mayor que {primero}!")
print("Gracias por su colaboración.")
if __name__ == "__main__":
main()
for i in range(valores - 1):
numero = int(input(f"Escriba un número más grande que {primero}: "))
def main():
print("MAYORES QUE EL ANTERIOR")
valores = int(input("¿Cuántos valores va a introducir? "))
if valores < 1:
print("¡Imposible!")
else:
anterior = int(input("Escriba un número: "))
for i in range(valores - 1):
numero = int(input(f"Escriba un número más grande que {anterior}: "))
if numero <= anterior:
print(f"¡{numero} no es mayor que {anterior}!")
anterior = numero
print("Gracias por su colaboración.")
if __name__ == "__main__":
main()
anterior = numero
def main():
print("NÚMEROS NEGATIVOS")
numero = int(input("¿Cuántos valores va a introducir? "))
if numero < 0:
print("¡Imposible!")
else:
contador = 0
for i in range(1, numero + 1):
valor = float(input(f"Escriba el número {i}: "))
if valor < 0:
contador = contador + 1
if contador == 0:
print("No ha escrito ningún número negativo.")
elif contador == 1:
print("Ha escrito 1 número negativo.")
else:
print(f"Ha escrito {contador} números negativos.")
if __name__ == "__main__":
main()
for i in range(1, numero + 1):
...
valor = float(input(f"Escriba el número {i}: "))
contador = 0
if valor < 0:
...
contador = contador + 1
if contador == 0:
print("No ha escrito ningún número negativo.")
elif contador == 1:
print("Ha escrito 1 número negativo.")
else:
print(f"Ha escrito {contador} números negativos.")
def main():
print("CONTADOR DE PARES E IMPARES")
valores = int(input("¿Cuántos valores va a introducir? "))
if valores < 0:
print("¡Imposible!")
else:
pares = 0
for i in range(1, valores + 1):
numero = int(input(f"Escriba el valor {i}: "))
if numero % 2 == 0:
pares += 1
print(f"Ha escrito {pares} números pares y {valores - pares} números impares.")
print("Gracias por su colaboración.")
if __name__ == "__main__":
main()
pares = 0
if numero % 2 == 0:
pares += 1
print(f"Ha escrito {pares} números pares y {valores - pares} números impares.")
def main():
print("NÚMERO PRIMO")
numero = int(input("Escriba un número entero mayor que 1: "))
if numero <= 1:
print("¡Le he pedido un número entero mayor que 1!")
else:
contador = 0
for i in range(1, numero + 1):
if numero % i == 0:
contador = contador + 1
if contador == 2:
print(f"{numero} es primo.")
else:
print(f"{numero} no es primo.")
if __name__ == "__main__":
main()
contador = 0
for i in range(1, numero + 1):
if numero % i == 0:
contador = contador + 1
if contador == 2:
print(f"{numero} es primo")
else:
print(f"{numero} no es primo")
Para que el programa vaya mucho más rápido, se podría probar únicamente la divisibilidad por los números hasta la raíz cuadrada del número, puesto que si es divisible por algún número mayor que su raíz cuadrada, lo será también por un número menor que su raíz cuadrada.
def main():
print("NÚMERO PRIMO")
numero = int(input("Escriba un número entero mayor que 1: "))
if numero <= 1:
print("¡Le he pedido un número entero mayor que 1!")
else:
contador = 0
limite = round(numero ** 0.5)
for i in range(1, limite + 1):
if numero % i == 0:
contador = contador + 1
if contador == 1:
print(f"{numero} es primo.")
else:
print(f"{numero} no es primo.")
if __name__ == "__main__":
main()
def main():
print("SUMA DE VALORES")
numero = int(input("¿Cuántos valores va a introducir? "))
if numero <= 0:
print("¡Imposible!")
else:
suma = 0
for i in range(1, numero + 1):
valor = float(input(f"Escriba el número {i}: "))
suma = suma + valor
print(f"La suma de los números que ha escrito es {suma}")
if __name__ == "__main__":
main()
for i in range(1, numero + 1):
...
valor = float(input(f"Escriba el número {i}: "))
suma = 0
suma = suma + valor
print(f"La suma de los números que ha escrito es {suma}")
def main():
print("SUMA ENTRE VALORES")
numero_1 = int(input("Escriba un número entero positivo: "))
if numero_1 <= 0:
print("¡Le he pedido un número entero positivo!")
else:
numero_2 = int(input(f"Escriba un número entero mayor que {numero_1}: "))
if numero_2 <= numero_1:
print(f"¡Le he pedido un número entero mayor que {numero_1}!")
else:
suma = 0
for i in range(numero_1, numero_2 + 1):
suma = suma + i
print(f"La suma desde {numero_1} hasta {numero_2} es {suma}")
if __name__ == "__main__":
main()
suma = 0
for i in range(numero_1, numero_2 + 1):
suma = suma + i
print(f"La suma desde {numero_1} hasta {numero_2} es {suma}")
def main():
print("SUMA ENTRE VALORES")
numero_1 = int(input("Escriba un número entero positivo: "))
if numero_1 <= 0:
print("¡Le he pedido un número entero positivo!")
else:
numero_2 = int(input(f"Escriba un número entero mayor que {numero_1}: "))
if numero_2 <= numero_1:
print(f"¡Le he pedido un número entero mayor que {numero_1}!")
else:
suma = 0
for i in range(numero_1, numero_2 + 1):
suma = suma + i
print(f"La suma desde {numero_1} hasta {numero_2} es {suma}")
for i in range(numero_1, numero_2):
print(f"{i} + ", end="")
print(f"{numero_2} = {suma}")
if __name__ == "__main__":
main()
for i in range(numero_1, numero_2):
print(f"{i} + ", end="")
print(f"{numero_2} = {suma}")
def main():
print("MAYOR, MENOR Y MEDIA ARITMÉTICA")
numero = int(input("¿Cuántos valores va a introducir? "))
if numero <= 0:
print("¡Imposible!")
else:
valor = float(input("Escriba el número 1: "))
minimo = maximo = suma = valor
for i in range(2, numero + 1):
valor = float(input(f"Escriba el número {i}: "))
suma = suma + valor
if valor < minimo:
minimo = valor
if valor > maximo:
maximo = valor
print(f"El número más pequeño de los introducidos es {minimo}")
print(f"El número más grande de los introducidos es {maximo}")
print(f"La media de los números introducidos es {suma / numero}")
if __name__ == "__main__":
main()
En cada iteración del bucle que va pidiendo valores al usuario, el programa comprueba si el valor introducido es menor que el mínimo o mayor que el máximo y, si es así, se guarda el nuevo valor.
if valor < minimo:
minimo = valor
if valor > maximo:
maximo = valor
El problema es que las variables minimo y maximo necesitan tener un valor inicial, pero, independientemente del valor elegido, el usuario puede escribir números que no sean menores (o mayores) que el valor inicial y por tanto ese valor no se modificaría durante la ejecución del programa. Por ejemplo, si damos el valor 0 a mínimo y el usuario sólo escribe valores positivos, minimo no se modificaría.
La solución es guardar como valor inicial de minimo y maximo el primer valor que introduzca el usuario.
valor = float(input("Escriba el número 1: "))
minimo = maximo = suma = valor
for i in range(2, numero + 1):
...
valor = float(input(f"Escriba el número {i}: "))
suma = suma + valor
minimo = maximo = suma = valor
print(f"El número más pequeño de los introducidos es {minimo}")
print(f"El número más grande de los introducidos es {maximo}")
print(f"La media de los números introducidos es {suma / numero}")
def main():
print("FACTORIAL")
numero = int(input("Escriba un número entero mayor que cero: "))
if numero <= 0:
print("¡Le he pedido un número entero mayor que cero!")
else:
factorial = 1
for i in range(1, numero + 1):
factorial = factorial * i
print(f"El factorial de {numero} es {factorial}.")
if __name__ == "__main__":
main()
factorial = 1
for i in range(1, numero + 1):
factorial = factorial * i
print(f"El factorial de {numero} es {factorial}")
for i in range(1, numero + 1):
...
factorial = factorial * i
factorial = 1
print(f"El factorial de {numero} es {factorial}.")