En este post aprovecho para proponer algunos ejercicios con estructuras de control en python, para practicar con lo explicado en Estructuras de Control.
Ejercicio 1: Suma de los primeros N números naturales
Escribe un programa que solicite al usuario un número entero positivo N y calcule la suma de los primeros N números naturales.
Por ejemplo:
- Número introducido: 6
- Resultado = 21
Solución propuesta:
# Solicitar al usuario un número entero positivo N
n = int(input("Introduce un número entero positivo N: "))
# Inicializar la variable para almacenar la suma
suma = 0
# Calcular la suma de los primeros N números naturales
for i in range(1, n + 1):
suma += i
# Imprimir el resultado
print("Resultado =", suma)
Ejercicio 2: Suma de números pares en rango
Realiza un programa que pida al usuario que introduzca dos números enteros y muestre la suma de todos los números pares en ese rango, incluidos los números introducidos.
El programa debe funcionar con independencia de si se introduce primero el número mayor o el menor.
Por ejemplo:
- números introducidos = 2 y 8
- Resultado = 20
Solución propuesa:
# Solicitar al usuario que introduzca dos números enteros
numero1 = int(input("Introduce el primer número entero: "))
numero2 = int(input("Introduce el segundo número entero: "))
# Asegurarse de que num1 es el menor y num2 es el mayor
num1 = min(numero1, numero2)
num2 = max(numero1, numero2)
# Inicializar la suma de los números pares en el rango
suma_pares = 0
# Iterar sobre el rango desde num1 hasta num2 (incluyendo num2)
for numero in range(num1, num2 + 1):
if numero % 2 == 0: # Verificar si el número es par
suma_pares += numero
# Imprimir el resultado
print("Resultado =", suma_pares)
Ejercicio 3: Cifrado Cesar
Crea un programa que implemente el cifrado César, donde cada letra en el texto original se desplaza un número fijo de posiciones en el alfabeto.
El usuario tiene que introducir las posiciones que quiere que se desplace cada letra y el texto a cifrar con el cifrado Cesar.
Finalmente, el programa presenta por pantalla el texto cifrado.
Ejemplo:
- Posiciones a desplazar: 2
- Texto introducido: “La casa de Maria”
- Texto cifrado: “Nc ecuc fg ñctkc”
NOTA: El método index aplicado a una cadena de texto devuelve el índice del primer carácter que coincida con el argumento que se le pasa como parámetro.
Ejemplo:
abecedario = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’
indice= abecedario.index(d) -> resultado: indice = 3
Solución propuesta 1:
def cifrado_cesar(texto, desplazamiento):
texto_cifrado = ""
for caracter in texto:
# Comprobar si el caracter es una letra del alfabeto
if caracter.isalpha():
# Obtener el código ASCII del caracter
codigo = ord(caracter)
# Aplicar el desplazamiento al código ASCII
if caracter.islower():
codigo_cifrado = (codigo - ord('a') + desplazamiento) % 26 + ord('a')
elif caracter.isupper():
codigo_cifrado = (codigo - ord('A') + desplazamiento) % 26 + ord('A')
# Convertir el código ASCII cifrado de nuevo a caracter
caracter_cifrado = chr(codigo_cifrado)
texto_cifrado += caracter_cifrado
else:
texto_cifrado += caracter
return texto_cifrado
# Solicitar al usuario las posiciones a desplazar y el texto a cifrar
desplazamiento = int(input("Posiciones a desplazar: "))
texto = input("Texto introducido: ")
# Aplicar el cifrado César al texto
texto_cifrado = cifrado_cesar(texto, desplazamiento)
# Presentar el texto cifrado por pantalla
print("Texto cifrado:", texto_cifrado)
Solución propuesta 2:
def cifrado_cesar(texto, desplazamiento):
abecedario = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
texto_cifrado = ""
for caracter in texto:
if caracter in abecedario:
indice_original = abecedario.index(caracter)
indice_cifrado = indice_original + desplazamiento
if indice_cifrado >= len(abecedario):
indice_cifrado -= len(abecedario)
caracter_cifrado = abecedario[indice_cifrado]
texto_cifrado += caracter_cifrado
else:
texto_cifrado += caracter
return texto_cifrado
# Solicitar al usuario las posiciones a desplazar y el texto a cifrar
desplazamiento = int(input("Posiciones a desplazar: "))
texto = input("Texto introducido: ")
# Aplicar el cifrado César al texto
texto_cifrado = cifrado_cesar(texto, desplazamiento)
# Presentar el texto cifrado por pantalla
print("Texto cifrado:", texto_cifrado)
Ejercicio 4: Acertar nombre
Realiza un programa para acertar el nombre de una persona. Dicho nombre estará hardcodeado (no hay que pedir al usuario que introduzca los datos, sino que los escribimos directamente en el código).
El programa pide al usuario repetidamente que introduzca un nombre hasta que acierte. A cada fallo, el programa da una pista que consiste en mostrar por pantalla las letras del nombre hasta la posición igual al número de fallos que se lleven.
Ejemplo: Nombre = “Eustaquio”
1ª Introducción: “ Elena” -> fallo -> 1ª pista: “E”
2ª Introducción: “Enrique” -> fallo -> 2ª pista: “Eu”
3ª Introducción: “Eulalia” -> fallo -> 3ª pista: “Eus”
4ª Introducción: “Eusebio” -> fallo -> 4ª pista: “Eust”
5ª Introducción: “Eustaquio” -> acierto – > fin del programa
Solución propuesta:
# Nombre a adivinar
nombre_correcto = "Eustaquio"
# Inicializar el número de intentos fallidos y la pista
intentos_fallidos = 0
pista = ""
# Bucle para solicitar al usuario que introduzca un nombre hasta que lo adivine
while True:
# Solicitar al usuario que introduzca un nombre
nombre = input("Introduce un nombre: ")
# Verificar si el nombre es correcto
if nombre == nombre_correcto:
print("¡Felicidades! Has adivinado el nombre correctamente.")
break
# Incrementar el número de intentos fallidos y actualizar la pista
intentos_fallidos += 1
pista = nombre_correcto[:intentos_fallidos]
# Mostrar la pista al usuario
print(f"Fallo {intentos_fallidos}. Pista: {pista}")
Ejercicio 5: Tablas de multiplicar
Dibujar por pantalla las tablas de multiplicar:
Solución propuesta:
for i in range(1,11):
print(" ")
print("TABLA DEL ",i)
print("-------------")
for j in range(1,11):
print(i,"x",j," =",i*j)
Ejercicio 6: Soluciones de la ecuación de segundo grado
Calcular los resultados de una ecuación de segundo grado. El programa pide los coeficientes al usuario y muestra sus soluciones reales. Si no existen, debe indicarlo
Solución propuesta:
import math
entrada=input("Introduce el coeficiente de segundo grado:")
a=float(entrada)
entrada=input("Introduce el coeficiente de primer grado:")
b=float(entrada)
entrada=input("Introduce el termino independiente:")
c=float(entrada)
d=(b*b)-(4*a*c)
if d<0:
print('No hay soluciones reales')
else:
solucion1=-(b+math.sqrt(d))/(2*a);
solucion2=-(b-math.sqrt(d))/(2*a);
print('la primera solucion es: ',solucion1)
print('la segunda solucion es: ',solucion2)
Ejercicio 7: Cuadrado compacto de lado N
Dibujar por pantalla un cuadrado compacto de caracteres de lado n, siendo n un número entero introducido por el usuario. Como carácter podemos escoger el que queramos.
Solución propuesta 1:
lon=input("Introduce la longitud del lado\n")
n=int(lon)
for i in range(1,n+1):
print("")
for j in range(1,n+1):
print("X",end="")
Solución propuesta 2:
lon=int(input("Introduce la longitud del lado\n"))
for i in range(1,n+1):
print("X"*n)
Ejercicio 8: Cuadrado hueco de lado N
Dibujar por pantalla los lados de un cuadrado de caracteres de lado n, siendo n un número entero introducido por el usuario. Como carácter podemos escoger el que queramos
Solución propuesta:
def dibujar_lineaCompacta(a):
for j in range(1,a+1):
print("X",end="")
if j==a:
print("")
def dibujar_lineaHueca(a):
for j in range(1,a+1):
if j==1:
print("X",end="")
elif j==n:
print("X")
else:
print(" ",end="")
lon=input("Introduce la longitud del lado\n")
n=int(lon)
for i in range(1,n+1):
if (i==1)|(i==n):
dibujar_lineaCompacta(n)
else:
dibujar_lineaHueca(n)
Ejercicio 9: Traducir Nota
Pedir una nota de 0 a 10 y mostrarla de la forma: Insuficiente, Suficiente, Bien, Notable, Sobresaliente
Solución propuesta:
a=input("Introduce tu nota\n")
nota=float(a)
if (nota<0.0)|(nota>10.0):
print("la nota introducida no esta dentro de los limites posibles (0-10)")
exit()
if nota<5:
texto="Insuficiente"
elif nota<6:
texto="Suficiente"
elif nota<7:
texto="Bien"
elif nota<9:
texto="Notable"
else:
texto="Sobresaliente"
print("La nota obtenida es ",texto)
Ejercicio 10: Acertar número
El usuario tiene que acertar un número entero entre 0 y 1.000 que está hardcodeado. Tras cada introducción del usuario, el programa indicará si el número introducido es mayor o menor que el número a acertar.
No hay límite de intentos y el programa seguira pidiendo al usuario que introduzca un número hasta que lo acierte.
El programa termina cuando el usuario acierta el número y tiene que presentar por pantalla un mensaje de éxito y el número de intentos que ha empleado el usuario para acertar el número
Solución propuesta:
numero=567
intentos=0
acertado=False
print("Tu objetivo es acertar un número entre 0 y 1.000")
print("Tienes un número ilimitado de intentos")
print("Después de cada introducción se te indicara si el número buscado es mayor o menor que el que introduciste")
while not acertado:
a=input("Introduce el número: ")
a=int(a)
intentos=intentos+1
if a ==numero:
print("Has acertado. Has necesitado ",intentos," intentos")
acertado=True
elif a<numero:
print("El número que has introducido es menor que el numero buscado")
print("Prueba con un número mayor")
else:
print("El número que has introducido es mayor que el numero buscado")
print("Prueba con un número menor")
Ejercicio 11: Número primo
El programa pinta por pantalla todos los números primos iguales o menor a un número introducido por el usuario.
Solución propuesta:
print("Este programa calcula los números primos menores al número introducido")
numero=input("Por favor, introduce un número:")
numero=int(numero)
for i in range(1,numero+1):
contador=0
for j in range(1,i+1):
if i%j==0:
contador=contador+1
if contador==2:
print(i)
Ejercicio 12: Factorial de un número
Pedir un número entero y calcular su factorial
Solución propuesta (usando recursividad):
a=int(input("Introduce un número entero y calculo su factorial \n"))
factorial=1
for i in range(2,a+1):
factorial=factorial*i
print("el factorial del numero ",a," es ",factorial)
Ejercicio 13: Media de números enteros
Realiza un programa que pida al usuario que introduzca varios números enteros. Cuando el usuario introduzca un 0 (cero), finaliza la introducción de números y el programa pinta por pantalla la media de los números introducidos
Solución propuesta:
contador=0
suma=0
num=int(input("introduce un numero entero\n"))
while (num !=0):
contador=contador+1
suma=suma+num
num=int(input("introduce un numero entero\n"))
print("la media de los numeros introducidos es: ",suma/contador)
Ejercicio 14: Cuadrados de números enteros
Realiza un programa que pida de manera ininterrumpida al usuario que introduzca un número entero positivo. El programa dejará de pedir al usuario que introduzca un número cuando el número introducido sea el cero.
Pintar por pantalla los números introducidos y sus cuadrados.
Solución propuesta:
while True:
numero = int(input("Introduce un número entero positivo (0 para salir): "))
if numero == 0:
break
elif numero < 0:
print("Por favor, introduce un número entero positivo.")
continue
cuadrado = numero ** 2
print(f"El cuadrado de {numero} es {cuadrado}")
NOTA:
Este post es parte de la colección “Python”. Puedes ver el índice de esta colección aquí.