Ejercicios con estructuras de control en python

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í.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.