Skip to content

Commit

Permalink
ejercicios agregados
Browse files Browse the repository at this point in the history
  • Loading branch information
jfgg committed Dec 12, 2024
1 parent 2413dbd commit 5bd42cd
Show file tree
Hide file tree
Showing 20 changed files with 249 additions and 4 deletions.
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,19 @@ Ya que tengas cargada la carpeta ve al menú terminal -> nueva terminal



## Progreso
Para llevar un control de tu avance, utiliza el archivo `progress/template_progreso.json` como base. Completa el archivo con tus datos y sincronízalo con el servidor usando `sincronizar_progreso.py`.
## Progreso de los temas
Para llevar un control de tu avance en cada Notebook encontrarás una celda, al final, en la que deberás de agregar tu correo y tu nombre completo para después ejecutarlar.
Si te responde con un error, vuelve a correr la celda ya que ello indica que no se ha sincronizado con el servidor.


## Ejercicios y avance

Aquí mismo encontrarás una carpeta llamada **ejercicios** donde vienen 8 carpetas con 1 ejercicio cada una.

1. Abre el archivo main.py y busca `USER_MAIL`, agrega por tu correo y guarda el archivo.
2. Debes de abrir la carpeta y el archivo `solucion.py` de cada ejercicio.
3. En este archivo debes de escribir el código de tu solución.
4. ¡No olvides de guardar!
5. En la terminal debes de correr el comando `python main.py <carpeta del ejercicio> "nombre del ejercicio"` (en la terminal debes de estar en el directorio raíz del curso) ejemplo: python main.py 7_funciones_numero_primos "numeros primos"

¡Buena suerte!
11 changes: 11 additions & 0 deletions ejercicios/1_variables_y_tipos_de_datos/solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# solucion.py

"""
Ejercicio:
Crea una variable llamada `edad` y asígnale el valor 25.
Crea otra variable llamada `nombre` y asígnale tu nombre.
Devuelve un string con el formato:
"Mi nombre es {nombre} y tengo {edad} años"
"""

# Escribe tu solución aquí
11 changes: 11 additions & 0 deletions ejercicios/1_variables_y_tipos_de_datos/test_solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# test_solucion.py

from solucion import edad, nombre, presentar

def test_tipos_correctos():
assert isinstance(edad, int), "La variable `edad` debe ser un entero"
assert isinstance(nombre, str), "La variable `nombre` debe ser un string"

def test_valores_correctos():
assert edad == 25, "La variable `edad` debe ser igual a 25"
assert "Mi nombre es" in presentar(), "El formato del mensaje es incorrecto"
8 changes: 8 additions & 0 deletions ejercicios/2_comentarios/solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# solucion.py

"""
Ejercicio:
Suma dos números, añade comentarios explicando cada paso y devuelve el resultado.
"""

# Escribe tu solución aquí
6 changes: 6 additions & 0 deletions ejercicios/2_comentarios/test_solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# test_solucion.py

from solucion import resultado

def test_resultado_correcto():
assert resultado == 15, "El resultado debe ser igual a 15"
18 changes: 18 additions & 0 deletions ejercicios/3_operadores/solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# solucion.py

"""
Ejercicio:
Crea funciones para:
- Sumar dos números.
- Restar dos números.
- Calcular el resto de una división.
"""

def sumar(a, b):
pass

def restar(a, b):
pass

def residuo(a, b):
pass
8 changes: 8 additions & 0 deletions ejercicios/3_operadores/test_solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# test_solucion.py

from solucion import sumar, restar, residuo

def test_operadores():
assert sumar(10, 5) == 15
assert restar(10, 5) == 5
assert residuo(10, 3) == 1
9 changes: 9 additions & 0 deletions ejercicios/4_strings/solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# solucion.py

"""
Ejercicio:
Crea una función que reciba un string y lo devuelva en mayúsculas.
"""

def convertir_a_mayusculas(texto):
pass
7 changes: 7 additions & 0 deletions ejercicios/4_strings/test_solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# test_solucion.py

from solucion import convertir_a_mayusculas

def test_strings():
assert convertir_a_mayusculas("hola") == "HOLA"
assert convertir_a_mayusculas("Python") == "PYTHON"
9 changes: 9 additions & 0 deletions ejercicios/5_vectores/solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# solucion.py

"""
Ejercicio:
Crea una función que sume todos los elementos de una lista.
"""

def suma_lista(lista):
pass
7 changes: 7 additions & 0 deletions ejercicios/5_vectores/test_solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# test_solucion.py

from solucion import suma_lista

def test_vectores():
assert suma_lista([1, 2, 3]) == 6
assert suma_lista([10, -5, 5]) == 10
9 changes: 9 additions & 0 deletions ejercicios/6_estructuras_de_control/solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# solucion.py

"""
Ejercicio:
Determina si un número es par o impar.
"""

def par_impar(numero):
pass
7 changes: 7 additions & 0 deletions ejercicios/6_estructuras_de_control/test_solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# test_solucion.py

from solucion import par_impar

def test_estructuras_control():
assert par_impar(4) == "Par"
assert par_impar(7) == "Impar"
16 changes: 16 additions & 0 deletions ejercicios/7_funciones_numero_primos/solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# solucion.py
"""
Ejercicio:
Crea una función llamada `es_primo` que reciba un número entero positivo y
devuelva `True` si el número es primo, o `False` si no lo es.
Un número primo es un número mayor que 1 que solo es divisible entre 1 y sí mismo.
Ejemplo:
es_primo(2) => True
es_primo(4) => False
"""

def es_primo(numero):
# Escribe tu solución aquí
pass
17 changes: 17 additions & 0 deletions ejercicios/7_funciones_numero_primos/test_solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# test_solucion.py

from solucion import es_primo

def test_numero_primo():
assert es_primo(2) == True
assert es_primo(3) == True
assert es_primo(13) == True

def test_numero_no_primo():
assert es_primo(1) == False # 1 no es primo
assert es_primo(4) == False
assert es_primo(9) == False

def test_numeros_especiales():
assert es_primo(0) == False # 0 no es primo
assert es_primo(-5) == False # Números negativos no son primos
11 changes: 11 additions & 0 deletions ejercicios/8_programacion_orientada_a_objetos/solucion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# solucion.py

"""
Ejercicio:
Crea una clase `Persona` que tenga:
- Atributos: `nombre`, `edad`.
- Método: `saludar` que devuelva "Hola, mi nombre es {nombre} y tengo {edad} años".
"""

class Persona:
pass
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# test_solucion.py

from solucion import Persona

def test_poo():
persona = Persona("Juan", 30)
assert persona.nombre == "Juan"
assert persona.edad == 30
assert persona.saludar() == "Hola, mi nombre es Juan y tengo 30 años"
69 changes: 69 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import subprocess
import requests
import sys

# Configuración del usuario y del backend
USER_MAIL = "" # Cambiar según sea necesario, agrega tu correo
ENDPOINT_URL = "https://apiprogreso.hackademy.lat/submit-progress" # Cambia la URL según tu backend

def ejecutar_pruebas(archivo_prueba):
"""
Ejecuta pytest en el archivo de prueba especificado.
"""
try:
resultado = subprocess.run(
["pytest", archivo_prueba, "--tb=short", "--disable-warnings"],
stdout=subprocess.PIPE,
text=True
)
print(resultado.stdout)
return resultado.returncode, resultado.stdout
except Exception as e:
print(f"Error al ejecutar las pruebas: {e}")
sys.exit(1)

def enviar_progreso(exercise_name, status, score):
"""
Envía el progreso al backend.
"""
payload = {
"user_mail": USER_MAIL,
"exercise_name": exercise_name,
"status": status,
"score": score
}

try:
response = requests.post(ENDPOINT_URL, json=payload)
if response.status_code == 201:
print("✅ Progreso registrado exitosamente.")
else:
print(f"❌ Error al registrar progreso: {response.json().get('error')}")
except Exception as e:
print(f"❌ Error al conectar con el backend: {e}")

def main():
"""
Ejecuta las pruebas y envía los resultados si todas las pruebas pasan.
"""
if len(sys.argv) != 3:
print("Uso: python main.py <carpeta_ejercicio> <nombre_ejercicio>")
sys.exit(1)

carpeta_ejercicio = sys.argv[1]
nombre_ejercicio = sys.argv[2]

archivo_prueba = f"ejercicios/{carpeta_ejercicio}/test_solucion.py"

print(f"🔍 Ejecutando pruebas para el ejercicio: {nombre_ejercicio}...")
return_code, pytest_output = ejecutar_pruebas(archivo_prueba)

if return_code == 0:
print("✅ Todas las pruebas pasaron.")
enviar_progreso(nombre_ejercicio, status="completado", score=100)
else:
print("❌ Las pruebas fallaron. Por favor, revisa los errores e intenta nuevamente.")
print(pytest_output)

if __name__ == "__main__":
main()
2 changes: 1 addition & 1 deletion notebooks/02_variables_constantes_tipos_datos.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "venv",
"display_name": "env",
"language": "python",
"name": "python3"
},
Expand Down
3 changes: 2 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ notebook==7.3.1
matplotlib==3.9.3
pandas==2.2.3
numpy==2.0.2
requests==2.32.3
requests==2.32.3
pytest==8.1.1

0 comments on commit 5bd42cd

Please sign in to comment.