From 624f4d359fdfd8cead610c9630de3a838a0b1a59 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 27 Oct 2025 14:10:22 +0100 Subject: [PATCH 001/323] =?UTF-8?q?feat:=20agregar=20ejercicio=20guiado=20?= =?UTF-8?q?n=C2=BA1=20de=2001=5Fintro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/primer_script/primer_script.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 01_intro/primer_script/primer_script.py diff --git a/01_intro/primer_script/primer_script.py b/01_intro/primer_script/primer_script.py new file mode 100644 index 0000000..e69de29 From d07755db57d2891b2358667ad7c5fcf5c66fc13c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 27 Oct 2025 14:11:32 +0100 Subject: [PATCH 002/323] feat: declarar variable nombre = Ana 01_intro --- 01_intro/primer_script/primer_script.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/01_intro/primer_script/primer_script.py b/01_intro/primer_script/primer_script.py index e69de29..00dfc26 100644 --- a/01_intro/primer_script/primer_script.py +++ b/01_intro/primer_script/primer_script.py @@ -0,0 +1,2 @@ +# Variable +nombre = 'Ana' \ No newline at end of file From b92f840d6f54038bd8a734db08d2d562a8467917 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 27 Oct 2025 14:13:57 +0100 Subject: [PATCH 003/323] =?UTF-8?q?feat:=20imprimir=20Hola=20Python=20usan?= =?UTF-8?q?do=20f-strings=20en=20ejercicio=20guiado=20n=C2=BA1=20de=2001?= =?UTF-8?q?=5Fintro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/primer_script/primer_script.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/01_intro/primer_script/primer_script.py b/01_intro/primer_script/primer_script.py index 00dfc26..d66b8fe 100644 --- a/01_intro/primer_script/primer_script.py +++ b/01_intro/primer_script/primer_script.py @@ -1,2 +1,5 @@ # Variable -nombre = 'Ana' \ No newline at end of file +nombre = 'Ana' + +#Imprimir 'Hola Python' +print(f"Hola, Python") \ No newline at end of file From 9053bad0e8331d4156c8f5c0925c7eebfcf9b42b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 27 Oct 2025 14:16:07 +0100 Subject: [PATCH 004/323] =?UTF-8?q?feat:=20imprimir=20Hola=20{nombre}=20us?= =?UTF-8?q?ando=20f-strings=20en=20ejercicio=20guiado=20n=C2=BA1=20de=2001?= =?UTF-8?q?=5Fintro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/primer_script/primer_script.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/01_intro/primer_script/primer_script.py b/01_intro/primer_script/primer_script.py index d66b8fe..a2c2938 100644 --- a/01_intro/primer_script/primer_script.py +++ b/01_intro/primer_script/primer_script.py @@ -1,5 +1,8 @@ # Variable nombre = 'Ana' -#Imprimir 'Hola Python' -print(f"Hola, Python") \ No newline at end of file +#Imprimir 'Hola, Python' +print(f"Hola, Python") + +#Imprimir 'Hola, {nombre}' +print(f"Hola, {nombre}") \ No newline at end of file From 040d6f94baa4cc9601fa57ee85c4ee31f9198ad5 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 27 Oct 2025 14:22:14 +0100 Subject: [PATCH 005/323] test: prueba de primer_script.py de 01_intro y validacion de salida --- 01_intro/primer_script/primer_script.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/primer_script/primer_script.py b/01_intro/primer_script/primer_script.py index a2c2938..c7e4e52 100644 --- a/01_intro/primer_script/primer_script.py +++ b/01_intro/primer_script/primer_script.py @@ -5,4 +5,6 @@ print(f"Hola, Python") #Imprimir 'Hola, {nombre}' -print(f"Hola, {nombre}") \ No newline at end of file +print(f"Hola, {nombre}") + +#Prueba testing completada \ No newline at end of file From b1960dc4d82cc0fb712edfc754d236fe6bfbe29b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 27 Oct 2025 14:24:53 +0100 Subject: [PATCH 006/323] =?UTF-8?q?feat:=20agregar=20ejercicio=20guiado=20?= =?UTF-8?q?n=C2=BA2=20de=2001=5Fintro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/saludo_input/saludo_input.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 01_intro/saludo_input/saludo_input.py diff --git a/01_intro/saludo_input/saludo_input.py b/01_intro/saludo_input/saludo_input.py new file mode 100644 index 0000000..e69de29 From 35dc61196b5295939b5ce077cf84fdef1e5089e9 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 27 Oct 2025 14:27:31 +0100 Subject: [PATCH 007/323] =?UTF-8?q?feat:=20declarar=20variable=20nombre=20?= =?UTF-8?q?para=20leer=20input('=C2=BFC=C3=B3mo=20te=20llamas=3F')=20en=20?= =?UTF-8?q?saludo=5Finput.py=20de=20=2001=5Fintro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/saludo_input/saludo_input.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/saludo_input/saludo_input.py b/01_intro/saludo_input/saludo_input.py index e69de29..236bddb 100644 --- a/01_intro/saludo_input/saludo_input.py +++ b/01_intro/saludo_input/saludo_input.py @@ -0,0 +1 @@ +nombre = input("¿Cómo te llamas?") \ No newline at end of file From 720ef6ba9ed1ffce57269f356bcab438ae7c5f4c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 27 Oct 2025 14:32:20 +0100 Subject: [PATCH 008/323] refactor: imprimir Hola, {nombre} usando f-string en saludo_input.py de 01_intro --- 01_intro/saludo_input/saludo_input.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/saludo_input/saludo_input.py b/01_intro/saludo_input/saludo_input.py index 236bddb..a2d4e7b 100644 --- a/01_intro/saludo_input/saludo_input.py +++ b/01_intro/saludo_input/saludo_input.py @@ -1 +1,3 @@ -nombre = input("¿Cómo te llamas?") \ No newline at end of file +nombre = input("¿Cómo te llamas?") + +print(f"Hola, {nombre}") \ No newline at end of file From 364d124d5a9f6c04e1fbf8b8bd224ae7d3c64f75 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 27 Oct 2025 14:39:46 +0100 Subject: [PATCH 009/323] test: prueba de saludo_input.py de 01_intro y validacion de salida --- 01_intro/saludo_input/saludo_input.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/01_intro/saludo_input/saludo_input.py b/01_intro/saludo_input/saludo_input.py index a2d4e7b..1966af3 100644 --- a/01_intro/saludo_input/saludo_input.py +++ b/01_intro/saludo_input/saludo_input.py @@ -1,3 +1,5 @@ -nombre = input("¿Cómo te llamas?") +nombre = input("¿Cómo te llamas? --> ") -print(f"Hola, {nombre}") \ No newline at end of file +print(f"Hola, {nombre}") + +# Prueba test pasada \ No newline at end of file From 4cea828a88fa5746c6a28edb84147faedc633cb8 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 27 Oct 2025 14:41:07 +0100 Subject: [PATCH 010/323] docs: documentacion saludo_input.py de 01_intro --- 01_intro/saludo_input/saludo_input.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/01_intro/saludo_input/saludo_input.py b/01_intro/saludo_input/saludo_input.py index 1966af3..9acb0ed 100644 --- a/01_intro/saludo_input/saludo_input.py +++ b/01_intro/saludo_input/saludo_input.py @@ -1,5 +1,7 @@ +# Variable nombre = input("¿Cómo te llamas? --> ") +# Imprimir 'Hola, {nombre}' print(f"Hola, {nombre}") # Prueba test pasada \ No newline at end of file From ccbafff090a0f1cfef21a3b2b59af0ba8c597035 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 09:18:13 +0100 Subject: [PATCH 011/323] feat: agregar ejercicios autonomos de 01_intro; agregar ejercicio variebles_basicas.py de 01_intro --- 01_intro/autonomos/variables_basicas.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 01_intro/autonomos/variables_basicas.py diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py new file mode 100644 index 0000000..e69de29 From 36b2250a1729350de4dc2ae3d960168bca96f476 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 09:21:11 +0100 Subject: [PATCH 012/323] feat: declaracion de variable 'nombre' en variables_basicas.py --- 01_intro/autonomos/variables_basicas.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py index e69de29..2a2096f 100644 --- a/01_intro/autonomos/variables_basicas.py +++ b/01_intro/autonomos/variables_basicas.py @@ -0,0 +1 @@ +nombre = "David" \ No newline at end of file From 3e9ddc18240c6e817f1137aebe784cbc683c9f28 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 09:22:28 +0100 Subject: [PATCH 013/323] feat: declaracion de variable 'ciudad' en variables_basicas.py --- 01_intro/autonomos/variables_basicas.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py index 2a2096f..9970852 100644 --- a/01_intro/autonomos/variables_basicas.py +++ b/01_intro/autonomos/variables_basicas.py @@ -1 +1,2 @@ -nombre = "David" \ No newline at end of file +nombre = "David" +ciudad = "Asturias" \ No newline at end of file From c13d48f0943e05a8296444a3bd77916d63c690eb Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 09:30:05 +0100 Subject: [PATCH 014/323] feat: declaracion de variable 'mensaje' en variables_basicas.py --- 01_intro/autonomos/variables_basicas.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py index 9970852..189cffe 100644 --- a/01_intro/autonomos/variables_basicas.py +++ b/01_intro/autonomos/variables_basicas.py @@ -1,2 +1,3 @@ nombre = "David" -ciudad = "Asturias" \ No newline at end of file +ciudad = "Asturias" +mensaje = f"{nombre} vive en {ciudad}" From 17f5cb41f94174a94e48553c2081435cbf5f2a74 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 09:31:14 +0100 Subject: [PATCH 015/323] feat: imprimir 'mensaje' en variables_basicas.py --- 01_intro/autonomos/variables_basicas.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py index 189cffe..e32d198 100644 --- a/01_intro/autonomos/variables_basicas.py +++ b/01_intro/autonomos/variables_basicas.py @@ -1,3 +1,4 @@ nombre = "David" ciudad = "Asturias" mensaje = f"{nombre} vive en {ciudad}" +print(mensaje) \ No newline at end of file From 7a2c226219538ade1ef020954723cdc70a0dacb5 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 09:37:14 +0100 Subject: [PATCH 016/323] test: prueba 'python variables_basicas' imprimido mensaje 'David vive en Asturias' --- 01_intro/autonomos/variables_basicas.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py index e32d198..8953f62 100644 --- a/01_intro/autonomos/variables_basicas.py +++ b/01_intro/autonomos/variables_basicas.py @@ -1,4 +1,6 @@ nombre = "David" ciudad = "Asturias" mensaje = f"{nombre} vive en {ciudad}" -print(mensaje) \ No newline at end of file +print(mensaje) + +# Prueba 'python variables_basicas' Funciona ✅ \ No newline at end of file From 8263c3d0235e49a4d6c96f9692fb2fccc162fd10 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 09:38:17 +0100 Subject: [PATCH 017/323] docs: Documentado Variable nombre en variables_basicas.py --- 01_intro/autonomos/variables_basicas.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py index 8953f62..9544336 100644 --- a/01_intro/autonomos/variables_basicas.py +++ b/01_intro/autonomos/variables_basicas.py @@ -1,3 +1,4 @@ +# Variable nombre nombre = "David" ciudad = "Asturias" mensaje = f"{nombre} vive en {ciudad}" From 061f9e15d4bad12e2b968af2824a522e24dff3f9 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 09:39:18 +0100 Subject: [PATCH 018/323] docs: Documentado Variable ciudad en variables_basicas.py --- 01_intro/autonomos/variables_basicas.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py index 9544336..4dc89df 100644 --- a/01_intro/autonomos/variables_basicas.py +++ b/01_intro/autonomos/variables_basicas.py @@ -1,5 +1,7 @@ # Variable nombre nombre = "David" + +# Variable ciudad ciudad = "Asturias" mensaje = f"{nombre} vive en {ciudad}" print(mensaje) From 6038988002261aa0ef88027a4db9d323dfac7cd5 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 09:42:21 +0100 Subject: [PATCH 019/323] docs: Documentado Variable mensaje en variables_basicas.py --- 01_intro/autonomos/variables_basicas.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py index 4dc89df..b9accdd 100644 --- a/01_intro/autonomos/variables_basicas.py +++ b/01_intro/autonomos/variables_basicas.py @@ -3,6 +3,8 @@ # Variable ciudad ciudad = "Asturias" + +# Variable mensaje que combina 'nombre' y 'ciudad' en un string mensaje = f"{nombre} vive en {ciudad}" print(mensaje) From b652eef1d08f1e8b657227107ad55857ee048525 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 09:44:10 +0100 Subject: [PATCH 020/323] docs: Documentado imprimir variable mensaje en variables_basicas.py --- 01_intro/autonomos/variables_basicas.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py index b9accdd..a1808f2 100644 --- a/01_intro/autonomos/variables_basicas.py +++ b/01_intro/autonomos/variables_basicas.py @@ -6,6 +6,8 @@ # Variable mensaje que combina 'nombre' y 'ciudad' en un string mensaje = f"{nombre} vive en {ciudad}" + +# Imprimir variable mensaje print(mensaje) # Prueba 'python variables_basicas' Funciona ✅ \ No newline at end of file From 9770a8aa9d13b5806d9debf04ee6c59f39954004 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 09:46:41 +0100 Subject: [PATCH 021/323] feat: agregar ejercicio conversor.py de 01_intro --- 01_intro/autonomos/conversor.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 01_intro/autonomos/conversor.py diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py new file mode 100644 index 0000000..e69de29 From b46885c3383dffbdd33ab2a5179725678977b4da Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 10:01:53 +0100 Subject: [PATCH 022/323] feat: declarar variable 'numero_conv' que pida un numero en conversor.py --- 01_intro/autonomos/conversor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index e69de29..87b5980 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -0,0 +1 @@ +numero_conv = input("Introduce un número a convertirlo en float") \ No newline at end of file From fb02608c682073778dee3d42c1203d74ab0e079d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 10:03:20 +0100 Subject: [PATCH 023/323] feat: imprimir valor introducido de 'numero_conv' en conversor.py --- 01_intro/autonomos/conversor.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index 87b5980..64518b4 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -1 +1,3 @@ -numero_conv = input("Introduce un número a convertirlo en float") \ No newline at end of file +numero_conv = input("Introduce un número a convertirlo en float") + +print(f"Número introducido: {numero_conv}") \ No newline at end of file From afdff66508e0f2a20c1a12769cff9a9ff4a70383 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 10:12:20 +0100 Subject: [PATCH 024/323] feat: imprimir tipo de dato de numero_conv en conversor.py --- 01_intro/autonomos/conversor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index 64518b4..fd81a7d 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -1,3 +1,4 @@ numero_conv = input("Introduce un número a convertirlo en float") -print(f"Número introducido: {numero_conv}") \ No newline at end of file +print(f"Número introducido: {numero_conv}") +print(f"Tipo de dato: {type(numero_conv)}") \ No newline at end of file From 5a1cd1facc571a964fe3160e6c1f7869f3f24163 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 10:15:03 +0100 Subject: [PATCH 025/323] feat: conversion de numero_conv de tipo string a tipo float en conversor.py --- 01_intro/autonomos/conversor.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index fd81a7d..a9f9017 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -1,4 +1,6 @@ numero_conv = input("Introduce un número a convertirlo en float") print(f"Número introducido: {numero_conv}") -print(f"Tipo de dato: {type(numero_conv)}") \ No newline at end of file +print(f"Tipo de dato: {type(numero_conv)}") + +numero_conv = float(numero_conv) \ No newline at end of file From 3aa5230c6176f2487cdb49998d5652776221319c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 10:31:38 +0100 Subject: [PATCH 026/323] feat: imprimir resultado numero_conv de tipo float en conversor.py --- 01_intro/autonomos/conversor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index a9f9017..f82111f 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -3,4 +3,5 @@ print(f"Número introducido: {numero_conv}") print(f"Tipo de dato: {type(numero_conv)}") -numero_conv = float(numero_conv) \ No newline at end of file +numero_conv = float(numero_conv) +print(f"Perfecto! Se ha convertido {numero_conv} en un valor float: {type(numero_conv)}") \ No newline at end of file From 58648d669f919df03b19df8c1d48d1bfc8b97749 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 10:33:24 +0100 Subject: [PATCH 027/323] =?UTF-8?q?test:=20prueba=20de=20numero=20introduc?= =?UTF-8?q?ido=2045.=20Resultado:=20=C3=A9xito?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/autonomos/conversor.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index f82111f..29783ff 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -4,4 +4,6 @@ print(f"Tipo de dato: {type(numero_conv)}") numero_conv = float(numero_conv) -print(f"Perfecto! Se ha convertido {numero_conv} en un valor float: {type(numero_conv)}") \ No newline at end of file +print(f"Perfecto! Se ha convertido {numero_conv} en un valor float: {type(numero_conv)}") + +# Conversion valor 45 convertido a float con éxito ✅ \ No newline at end of file From a18b701ed4aafa4df40147d8b39c359b15f76e96 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 10:35:27 +0100 Subject: [PATCH 028/323] test: prueba de texto introducido 'pepe'. Resultado: Fallido --- 01_intro/autonomos/conversor.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index 29783ff..fa2dcc6 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -6,4 +6,7 @@ numero_conv = float(numero_conv) print(f"Perfecto! Se ha convertido {numero_conv} en un valor float: {type(numero_conv)}") -# Conversion valor 45 convertido a float con éxito ✅ \ No newline at end of file +# Conversion valor 45 convertido a float con éxito ✅ + +# Conversion valor 'pepe' convertido a float fallo ❌ +# Razón: ValueError: could not convert string to float: 'pepe' \ No newline at end of file From 96b5634e09e3c837126d6cff5aee41f41c2010c7 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:17:12 +0100 Subject: [PATCH 029/323] =?UTF-8?q?refactor:=20estructuraci=C3=B3n=20con?= =?UTF-8?q?=20try=20except=20para=20que=20no=20vuelva=20a=20salir=20ValueE?= =?UTF-8?q?rror=20en=20conversor.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/autonomos/conversor.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index fa2dcc6..858cfba 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -3,8 +3,11 @@ print(f"Número introducido: {numero_conv}") print(f"Tipo de dato: {type(numero_conv)}") -numero_conv = float(numero_conv) -print(f"Perfecto! Se ha convertido {numero_conv} en un valor float: {type(numero_conv)}") +try: + numero_conv = float(numero_conv) + print(f"Perfecto! Se ha convertido {numero_conv} en un valor float: {type(numero_conv)}") +except ValueError: + print(f"Lo siento! '{numero_conv}' no es un número válido. Por favor, vuelva a ejecutar de nuevo el archivo") # Conversion valor 45 convertido a float con éxito ✅ From 41c9d0c73838de39f6905a437d432c7ba9cefaf9 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:20:14 +0100 Subject: [PATCH 030/323] test: prueba del fallo anterior conversion 'pepe' en conversor.py; ahora resuelto --- 01_intro/autonomos/conversor.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index 858cfba..2ebc2ac 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -7,9 +7,10 @@ numero_conv = float(numero_conv) print(f"Perfecto! Se ha convertido {numero_conv} en un valor float: {type(numero_conv)}") except ValueError: - print(f"Lo siento! '{numero_conv}' no es un número válido. Por favor, vuelva a ejecutar de nuevo el archivo") + print(f"Lo siento! '{numero_conv}' no es un número válido. Por favor, vuelva a ejecutar de nuevo el archivo sin ningún carácter.") # Conversion valor 45 convertido a float con éxito ✅ # Conversion valor 'pepe' convertido a float fallo ❌ -# Razón: ValueError: could not convert string to float: 'pepe' \ No newline at end of file +# Razón: ValueError: could not convert string to float: 'pepe' +# Fallo resuelto con try/except \ No newline at end of file From 54a1c80c2e7e43a1736fd2b55f24dcae862c80e8 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:21:08 +0100 Subject: [PATCH 031/323] docs: variable numero_conv a pedir un dato --- 01_intro/autonomos/conversor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index 2ebc2ac..424987b 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -1,3 +1,4 @@ +# Variable a introducir un dato numero_conv = input("Introduce un número a convertirlo en float") print(f"Número introducido: {numero_conv}") From 30b776ea61867addc4bd1678c2b01e300b58a1a9 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:21:39 +0100 Subject: [PATCH 032/323] fix: texto numero_conv corregido --- 01_intro/autonomos/conversor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index 424987b..4d91dfb 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -1,5 +1,5 @@ # Variable a introducir un dato -numero_conv = input("Introduce un número a convertirlo en float") +numero_conv = input("Introduce un número a convertirlo en float --> ") print(f"Número introducido: {numero_conv}") print(f"Tipo de dato: {type(numero_conv)}") From 55eae41ae236fafd11ae6f6905985806d6b61426 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:22:51 +0100 Subject: [PATCH 033/323] docs: imprime numero introducido de variable numero_conv y su tipo de dato --- 01_intro/autonomos/conversor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index 4d91dfb..edf42f1 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -1,6 +1,7 @@ # Variable a introducir un dato numero_conv = input("Introduce un número a convertirlo en float --> ") +# Imprimir numero introducido y su tipo print(f"Número introducido: {numero_conv}") print(f"Tipo de dato: {type(numero_conv)}") From 6c2296303e6c8da32c794136bd8e583debbec75c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:23:58 +0100 Subject: [PATCH 034/323] docs: intento de convertir numero_conv a float --- 01_intro/autonomos/conversor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index edf42f1..c915cb8 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -1,11 +1,12 @@ # Variable a introducir un dato numero_conv = input("Introduce un número a convertirlo en float --> ") -# Imprimir numero introducido y su tipo +# Imprimir numero introducido y su tipo de dato print(f"Número introducido: {numero_conv}") print(f"Tipo de dato: {type(numero_conv)}") try: + # Intentamos convertir el dato a float numero_conv = float(numero_conv) print(f"Perfecto! Se ha convertido {numero_conv} en un valor float: {type(numero_conv)}") except ValueError: From 60276ca35b3db6bebdb3e69a6d2a6159da8080fa Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:25:17 +0100 Subject: [PATCH 035/323] docs: mensaje de error ValueError al ingresar string en conversor.py --- 01_intro/autonomos/conversor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index c915cb8..f4858e8 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -10,6 +10,7 @@ numero_conv = float(numero_conv) print(f"Perfecto! Se ha convertido {numero_conv} en un valor float: {type(numero_conv)}") except ValueError: + # Si sale error de valor (ValueError), suelta el mensaje de error print(f"Lo siento! '{numero_conv}' no es un número válido. Por favor, vuelva a ejecutar de nuevo el archivo sin ningún carácter.") # Conversion valor 45 convertido a float con éxito ✅ From 641bc7903064a55a7c0b00aedc972c8e629f0f9e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:27:30 +0100 Subject: [PATCH 036/323] feat: agregar ejercicio tres_prints.py de 01_intro --- 01_intro/autonomos/tres_prints.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 01_intro/autonomos/tres_prints.py diff --git a/01_intro/autonomos/tres_prints.py b/01_intro/autonomos/tres_prints.py new file mode 100644 index 0000000..e69de29 From d688d6f6c843c0ea8c3781da295eac3bfc551801 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:38:07 +0100 Subject: [PATCH 037/323] feat: imprimir primera linea de dato personal en tres_prints.py --- 01_intro/autonomos/tres_prints.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/tres_prints.py b/01_intro/autonomos/tres_prints.py index e69de29..0bc5581 100644 --- a/01_intro/autonomos/tres_prints.py +++ b/01_intro/autonomos/tres_prints.py @@ -0,0 +1 @@ +print("Nombre: David") \ No newline at end of file From 769757e878564fdb70c4498c415570f1ebdca8b4 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:38:47 +0100 Subject: [PATCH 038/323] feat: imprimir segunda linea de dato personal en tres_prints.py --- 01_intro/autonomos/tres_prints.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/tres_prints.py b/01_intro/autonomos/tres_prints.py index 0bc5581..c2eeef5 100644 --- a/01_intro/autonomos/tres_prints.py +++ b/01_intro/autonomos/tres_prints.py @@ -1 +1,2 @@ -print("Nombre: David") \ No newline at end of file +print("Nombre: David") +print("Edad: 27") \ No newline at end of file From e107776978366383e27a33f6cc0608c353bc9125 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:42:57 +0100 Subject: [PATCH 039/323] feat: imprimir tercera linea de dato personal en tres_prints.py --- 01_intro/autonomos/tres_prints.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/tres_prints.py b/01_intro/autonomos/tres_prints.py index c2eeef5..05c3735 100644 --- a/01_intro/autonomos/tres_prints.py +++ b/01_intro/autonomos/tres_prints.py @@ -1,2 +1,3 @@ print("Nombre: David") -print("Edad: 27") \ No newline at end of file +print("Edad: 27") +print("Color favorito: Verde") \ No newline at end of file From f5bcf2ae1e14e39c7521dfd4c04c38e3d7bff23e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:44:30 +0100 Subject: [PATCH 040/323] test: prueba 'python tres_prints.py' completado con exito --- 01_intro/autonomos/tres_prints.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/tres_prints.py b/01_intro/autonomos/tres_prints.py index 05c3735..185c70d 100644 --- a/01_intro/autonomos/tres_prints.py +++ b/01_intro/autonomos/tres_prints.py @@ -1,3 +1,5 @@ print("Nombre: David") print("Edad: 27") -print("Color favorito: Verde") \ No newline at end of file +print("Color favorito: Verde") + +# Prueba 'python tres_prints.py' completado con éxito ✅ \ No newline at end of file From e5b7bc97d7a7454d50b512ca4f0bcfde96d02eed Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:52:00 +0100 Subject: [PATCH 041/323] =?UTF-8?q?docs:=20imprimir=201=C2=AA=20linea=20de?= =?UTF-8?q?=20dato=20personal=20en=20tres=5Fprints.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/autonomos/tres_prints.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/tres_prints.py b/01_intro/autonomos/tres_prints.py index 185c70d..263c2a6 100644 --- a/01_intro/autonomos/tres_prints.py +++ b/01_intro/autonomos/tres_prints.py @@ -1,3 +1,4 @@ +# Imprimir primera línea de dato personal print("Nombre: David") print("Edad: 27") print("Color favorito: Verde") From f886b23cf6e99bbee33863f1b7ece2b54f2ada7c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:52:26 +0100 Subject: [PATCH 042/323] =?UTF-8?q?docs:=20imprimir=202=C2=AA=20linea=20de?= =?UTF-8?q?=20dato=20personal=20en=20tres=5Fprints.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/autonomos/tres_prints.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/tres_prints.py b/01_intro/autonomos/tres_prints.py index 263c2a6..cc7ca34 100644 --- a/01_intro/autonomos/tres_prints.py +++ b/01_intro/autonomos/tres_prints.py @@ -1,5 +1,6 @@ # Imprimir primera línea de dato personal print("Nombre: David") +# Imprimir segunda línea de dato personal print("Edad: 27") print("Color favorito: Verde") From e472bafe770c52ff2f4c91496f2dfcbb7c559e4f Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:52:53 +0100 Subject: [PATCH 043/323] =?UTF-8?q?docs:=20imprimir=203=C2=AA=20linea=20de?= =?UTF-8?q?=20dato=20personal=20en=20tres=5Fprints.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/autonomos/tres_prints.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/tres_prints.py b/01_intro/autonomos/tres_prints.py index cc7ca34..bb14753 100644 --- a/01_intro/autonomos/tres_prints.py +++ b/01_intro/autonomos/tres_prints.py @@ -2,6 +2,7 @@ print("Nombre: David") # Imprimir segunda línea de dato personal print("Edad: 27") +# Imprimir tercera línea de dato personal print("Color favorito: Verde") # Prueba 'python tres_prints.py' completado con éxito ✅ \ No newline at end of file From deccebb3227e717e437861d98c34164ce5b91a19 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 11:59:45 +0100 Subject: [PATCH 044/323] feat: agregar ejercicio eco.py de 01_intro --- 01_intro/autonomos/eco.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 01_intro/autonomos/eco.py diff --git a/01_intro/autonomos/eco.py b/01_intro/autonomos/eco.py new file mode 100644 index 0000000..e69de29 From 5ac53a66643b8cac9e993b3919c6d50a423c6fe3 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:07:36 +0100 Subject: [PATCH 045/323] feat: declarar variable 'texto' a pedir datos en eco.py --- 01_intro/autonomos/eco.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/eco.py b/01_intro/autonomos/eco.py index e69de29..7a8e4fc 100644 --- a/01_intro/autonomos/eco.py +++ b/01_intro/autonomos/eco.py @@ -0,0 +1 @@ +texto = input("Escribe algo") \ No newline at end of file From 8c48b5a5d2f3db98059dda94b5e77a6a193f66bc Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:11:50 +0100 Subject: [PATCH 046/323] feat: imprimir lo que ha pedido el usuario en eco.py --- 01_intro/autonomos/eco.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/eco.py b/01_intro/autonomos/eco.py index 7a8e4fc..26a5243 100644 --- a/01_intro/autonomos/eco.py +++ b/01_intro/autonomos/eco.py @@ -1 +1,3 @@ -texto = input("Escribe algo") \ No newline at end of file +texto = input("Escribe algo") + +print(texto) \ No newline at end of file From 279f8a4ffdf9517987cfa88908eeb85253292687 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:17:03 +0100 Subject: [PATCH 047/323] test: prueba 'python eco.py' introduciendo palabra 'pepe' --- 01_intro/autonomos/eco.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/01_intro/autonomos/eco.py b/01_intro/autonomos/eco.py index 26a5243..28c1d7a 100644 --- a/01_intro/autonomos/eco.py +++ b/01_intro/autonomos/eco.py @@ -1,3 +1,6 @@ texto = input("Escribe algo") -print(texto) \ No newline at end of file +print(texto) + +# Prueba 'python eco.py' introducido palabra 'pepe' +# Completado con éxito ✅ \ No newline at end of file From 547a10ac57eb921a0a69818d82d466cf988d8744 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:18:08 +0100 Subject: [PATCH 048/323] fix: string cambiado en variable 'texto' en eco.py --- 01_intro/autonomos/eco.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01_intro/autonomos/eco.py b/01_intro/autonomos/eco.py index 28c1d7a..82fd2a1 100644 --- a/01_intro/autonomos/eco.py +++ b/01_intro/autonomos/eco.py @@ -1,4 +1,4 @@ -texto = input("Escribe algo") +texto = input("Escribe algo --> ") print(texto) From ba7103daf3b9fb6ed10b8624c3532f124dbcef65 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:19:17 +0100 Subject: [PATCH 049/323] docs: variable texto a pedir datos al usuario --- 01_intro/autonomos/eco.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/eco.py b/01_intro/autonomos/eco.py index 82fd2a1..8e17910 100644 --- a/01_intro/autonomos/eco.py +++ b/01_intro/autonomos/eco.py @@ -1,3 +1,4 @@ +# Pedimos al usuario que escriba algo texto = input("Escribe algo --> ") print(texto) From 4508e094d5d5a6b98cbb53a0122d01362a668d89 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:20:19 +0100 Subject: [PATCH 050/323] docs: imprimir datos introducidos en 'texto' en eco.py --- 01_intro/autonomos/eco.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/autonomos/eco.py b/01_intro/autonomos/eco.py index 8e17910..46a93e5 100644 --- a/01_intro/autonomos/eco.py +++ b/01_intro/autonomos/eco.py @@ -1,6 +1,7 @@ # Pedimos al usuario que escriba algo texto = input("Escribe algo --> ") +# Se repite lo que escribimos print(texto) # Prueba 'python eco.py' introducido palabra 'pepe' From 48db2c2701f083573db59a3dfbeddccd8b1b9762 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:21:10 +0100 Subject: [PATCH 051/323] docs: descripcion eco.py --- 01_intro/autonomos/eco.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/01_intro/autonomos/eco.py b/01_intro/autonomos/eco.py index 46a93e5..2019b2c 100644 --- a/01_intro/autonomos/eco.py +++ b/01_intro/autonomos/eco.py @@ -1,3 +1,5 @@ +# Programa que repite lo que el usuario escribe + # Pedimos al usuario que escriba algo texto = input("Escribe algo --> ") From e44f0ce32e20c50fcb0dc135164c961e8fe3558f Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:24:02 +0100 Subject: [PATCH 052/323] docs: descripcion conversor.py --- 01_intro/autonomos/conversor.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/01_intro/autonomos/conversor.py b/01_intro/autonomos/conversor.py index f4858e8..730435d 100644 --- a/01_intro/autonomos/conversor.py +++ b/01_intro/autonomos/conversor.py @@ -1,3 +1,5 @@ +# Programa que pida un número y lo convierta en float, manejando ValueError con un mensaje amable + # Variable a introducir un dato numero_conv = input("Introduce un número a convertirlo en float --> ") From 22f342dbf307dd6a1264c93e8c2760b9195777ea Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:25:16 +0100 Subject: [PATCH 053/323] docs: descripcion tres_prints.py --- 01_intro/autonomos/tres_prints.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/01_intro/autonomos/tres_prints.py b/01_intro/autonomos/tres_prints.py index bb14753..35a525b 100644 --- a/01_intro/autonomos/tres_prints.py +++ b/01_intro/autonomos/tres_prints.py @@ -1,3 +1,5 @@ +# Programa que imprima tres líneas con información personal + # Imprimir primera línea de dato personal print("Nombre: David") # Imprimir segunda línea de dato personal From de9618a9d7fdcd21b66c2a9458593a327a5f9ab2 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:26:45 +0100 Subject: [PATCH 054/323] docs: descripcion variables_basicas.py --- 01_intro/autonomos/variables_basicas.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py index a1808f2..34dcc91 100644 --- a/01_intro/autonomos/variables_basicas.py +++ b/01_intro/autonomos/variables_basicas.py @@ -1,3 +1,5 @@ +# Programa que combine nombre y ciudad en un string: 'Ana vive en Lima' + # Variable nombre nombre = "David" From 271986686c8d06d4f44016774927429c9c9d2cf0 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:27:55 +0100 Subject: [PATCH 055/323] fix: cambio de valores de variables 'nombre' y 'ciudad' en variables_basicas.py --- 01_intro/autonomos/variables_basicas.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/01_intro/autonomos/variables_basicas.py b/01_intro/autonomos/variables_basicas.py index 34dcc91..d44a342 100644 --- a/01_intro/autonomos/variables_basicas.py +++ b/01_intro/autonomos/variables_basicas.py @@ -1,10 +1,10 @@ # Programa que combine nombre y ciudad en un string: 'Ana vive en Lima' # Variable nombre -nombre = "David" +nombre = "Ana" # Variable ciudad -ciudad = "Asturias" +ciudad = "Lima" # Variable mensaje que combina 'nombre' y 'ciudad' en un string mensaje = f"{nombre} vive en {ciudad}" From 77c09d12021f16e9182e602777c8ebe8530f8a89 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:30:56 +0100 Subject: [PATCH 056/323] feat: agregar desafio Bigotes Felices en 01_intro --- 01_intro/desafio/bigotes_felices.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 01_intro/desafio/bigotes_felices.py diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py new file mode 100644 index 0000000..e69de29 From 29952e2a6b2cd419b3a91e2637c6d347a3339a70 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:32:28 +0100 Subject: [PATCH 057/323] docs: descripcion bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index e69de29..2611855 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -0,0 +1,4 @@ +# Desafio: Bigotes Felices +# En el refugio Bigotes Felices quieren un script que pida el nombre del gato y su edad, +# y muestre: `Gato: (edad: )`. +# Si la edad no es un número, muestra `Edad inválida`. \ No newline at end of file From 51b5bff77771d5e96a04e19f538c449045b79dc3 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 12:34:37 +0100 Subject: [PATCH 058/323] feat: declaracion variable 'nombre_gato' a pedir datos en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index 2611855..9cc05d3 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -1,4 +1,6 @@ # Desafio: Bigotes Felices # En el refugio Bigotes Felices quieren un script que pida el nombre del gato y su edad, # y muestre: `Gato: (edad: )`. -# Si la edad no es un número, muestra `Edad inválida`. \ No newline at end of file +# Si la edad no es un número, muestra `Edad inválida`. + +nombre_gato = input("Nombre del gato --> ") \ No newline at end of file From 4a39a78b53c0d0b7bd43b8257eb44eb6fac53f4d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:10:14 +0100 Subject: [PATCH 059/323] feat: declaracion variable 'edad_gato' a pedir edad del gato en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index 9cc05d3..c249ba2 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -3,4 +3,6 @@ # y muestre: `Gato: (edad: )`. # Si la edad no es un número, muestra `Edad inválida`. -nombre_gato = input("Nombre del gato --> ") \ No newline at end of file +nombre_gato = input("Nombre del gato --> ") + +edad_gato = input("Edad del gato --> ") \ No newline at end of file From f451e8eaf3935131e648997142b321fe2dec9799 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:14:10 +0100 Subject: [PATCH 060/323] feat: declaracion variable 'datos' que muestra el mensaje de salida en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index c249ba2..34b10a2 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -5,4 +5,6 @@ nombre_gato = input("Nombre del gato --> ") -edad_gato = input("Edad del gato --> ") \ No newline at end of file +edad_gato = input("Edad del gato --> ") + +datos = f"Gato: {nombre_gato} (edad: {edad_gato})" \ No newline at end of file From 4126c44c8db5961f6cc74b9fa82371049d349d15 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:15:17 +0100 Subject: [PATCH 061/323] feat: imprimir variable 'datos' en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index 34b10a2..7111fe6 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -7,4 +7,6 @@ edad_gato = input("Edad del gato --> ") -datos = f"Gato: {nombre_gato} (edad: {edad_gato})" \ No newline at end of file +datos = f"Gato: {nombre_gato} (edad: {edad_gato})" + +print(datos) \ No newline at end of file From 49e41c6bcb44340cf4d6ef6e9d410f796ce3555d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:17:04 +0100 Subject: [PATCH 062/323] test: ejecutar 'python bigotes_felices.py' primer test --- 01_intro/desafio/bigotes_felices.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index 7111fe6..72f092b 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -9,4 +9,6 @@ datos = f"Gato: {nombre_gato} (edad: {edad_gato})" -print(datos) \ No newline at end of file +print(datos) + +# Primer test: imprimir datos introducidos de tipo string. Completado ✅ \ No newline at end of file From 6e38187c4a0c3ee898ae349672cdc351e8b6d460 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:18:41 +0100 Subject: [PATCH 063/323] feat: conversion int 'edad_gato' en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index 72f092b..7c4904a 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -7,6 +7,8 @@ edad_gato = input("Edad del gato --> ") +edad_gato = int(edad_gato) + datos = f"Gato: {nombre_gato} (edad: {edad_gato})" print(datos) From e464d4b6cc036b1b8bc680baaa3481d119c882aa Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:22:29 +0100 Subject: [PATCH 064/323] test: ejecutar 'python bigotes_felices.py' segundo test --- 01_intro/desafio/bigotes_felices.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index 7c4904a..3bf894d 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -13,4 +13,10 @@ print(datos) -# Primer test: imprimir datos introducidos de tipo string. Completado ✅ \ No newline at end of file +# Primer test: imprimir datos introducidos de tipo string. Completado ✅ +# Segundo test: imprimir datos de nombre_gato (string: cadena de texto) y de edad_gato (int: numero entero) +# Prueba: +# Nombre del gato --> pepe +# Edad del gato --> julio +# Error ❌ +# Motivo: ValueError: invalid literal for int() with base 10: 'julio' \ No newline at end of file From 8100a6f2b7ceb9f79272f4591c334ff50344129a Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:25:27 +0100 Subject: [PATCH 065/323] feat: agregar try/except para validar int 'edad_gato' en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index 3bf894d..e81cdcb 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -7,11 +7,15 @@ edad_gato = input("Edad del gato --> ") -edad_gato = int(edad_gato) +try: + edad_gato = int(edad_gato) -datos = f"Gato: {nombre_gato} (edad: {edad_gato})" + datos = f"Gato: {nombre_gato} (edad: {edad_gato})" -print(datos) + print(datos) + +except ValueError: + print("Edad inválida") # Primer test: imprimir datos introducidos de tipo string. Completado ✅ # Segundo test: imprimir datos de nombre_gato (string: cadena de texto) y de edad_gato (int: numero entero) From d0b9174b73b9eb8081cbe0850deb1d6cfcb79567 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:27:41 +0100 Subject: [PATCH 066/323] test: reanudar segundo test; Sale error --- 01_intro/desafio/bigotes_felices.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index e81cdcb..f8a5904 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -23,4 +23,4 @@ # Nombre del gato --> pepe # Edad del gato --> julio # Error ❌ -# Motivo: ValueError: invalid literal for int() with base 10: 'julio' \ No newline at end of file +# Mensaje enviado: Edad inválida \ No newline at end of file From 65743d86fbe4f6de84b16ef1404496aab14e2cc6 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:29:26 +0100 Subject: [PATCH 067/323] =?UTF-8?q?fix:=20correci=C3=B3n=20en=20las=20prue?= =?UTF-8?q?bas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/desafio/bigotes_felices.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index f8a5904..38e18ae 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -17,10 +17,13 @@ except ValueError: print("Edad inválida") -# Primer test: imprimir datos introducidos de tipo string. Completado ✅ +# Primer test: imprimir datos introducidos de tipo string. +# Prueba: +# Nombre del gato --> pepe +# Edad del gato --> viyuela +# Mensaje mostrado: Gato: pepe (edad: viyuela) ✅ # Segundo test: imprimir datos de nombre_gato (string: cadena de texto) y de edad_gato (int: numero entero) # Prueba: # Nombre del gato --> pepe # Edad del gato --> julio -# Error ❌ -# Mensaje enviado: Edad inválida \ No newline at end of file +# Mensaje enviado: Edad inválida ❌ \ No newline at end of file From 6577eef69538f9a215ad56212f855b0a865fc88e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:32:47 +0100 Subject: [PATCH 068/323] test: ejecutar 'python bigotes_felices.py' tercer test --- 01_intro/desafio/bigotes_felices.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index 38e18ae..a2f466b 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -21,9 +21,16 @@ # Prueba: # Nombre del gato --> pepe # Edad del gato --> viyuela -# Mensaje mostrado: Gato: pepe (edad: viyuela) ✅ +# Mensaje de salida: Gato: pepe (edad: viyuela) ✅ + # Segundo test: imprimir datos de nombre_gato (string: cadena de texto) y de edad_gato (int: numero entero) # Prueba: # Nombre del gato --> pepe # Edad del gato --> julio -# Mensaje enviado: Edad inválida ❌ \ No newline at end of file +# Mensaje de salida: Edad inválida ❌ + +# Tercer test: imprimir los datos validando try/except +# Prueba: +# Nombre del gato --> pepe +# Edad del gato --> 10 +# Mensaje de salida: Gato: pepe (edad: 10) ✅ \ No newline at end of file From ca97f90d8829f4092bc1cf1644e7fe81ca079339 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:33:50 +0100 Subject: [PATCH 069/323] docs: variable nombre_gato en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index a2f466b..0ebef06 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -3,6 +3,7 @@ # y muestre: `Gato: (edad: )`. # Si la edad no es un número, muestra `Edad inválida`. +# Variable nombre_gato a introducir dato string nombre_gato = input("Nombre del gato --> ") edad_gato = input("Edad del gato --> ") From 807036c144a8f87e248c6d5ee91a9de5bd30ce28 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:36:02 +0100 Subject: [PATCH 070/323] docs: variable edad_gato en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index 0ebef06..548bb34 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -6,6 +6,7 @@ # Variable nombre_gato a introducir dato string nombre_gato = input("Nombre del gato --> ") +# Variable edad_gato a introducir dato int edad_gato = input("Edad del gato --> ") try: From 7d67d8e39fd34e01ccbf3f8e0c871312271d2328 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:37:14 +0100 Subject: [PATCH 071/323] docs: conversion edad_gato a int en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index 548bb34..af68188 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -10,6 +10,7 @@ edad_gato = input("Edad del gato --> ") try: + # Intentamos convertir valor str a int edad_gato = int(edad_gato) datos = f"Gato: {nombre_gato} (edad: {edad_gato})" From c9ef64f15360127704e3bdcc530508ed4183217c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:38:21 +0100 Subject: [PATCH 072/323] docs: variable datos en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index af68188..f9c43ec 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -13,6 +13,7 @@ # Intentamos convertir valor str a int edad_gato = int(edad_gato) + # Variable datos a mostrar mensaje de los datos introducidos por el usuario datos = f"Gato: {nombre_gato} (edad: {edad_gato})" print(datos) From 81f06effa225252550b04d6b924f24c465e24b51 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:39:35 +0100 Subject: [PATCH 073/323] docs: imprimir mensaje de salida en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index f9c43ec..27e027e 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -16,6 +16,7 @@ # Variable datos a mostrar mensaje de los datos introducidos por el usuario datos = f"Gato: {nombre_gato} (edad: {edad_gato})" + # Imprimir mensaje de salida print(datos) except ValueError: From fe4172f25341db3ff27da2054011d1516c7ea844 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 13:40:24 +0100 Subject: [PATCH 074/323] docs: mensaje de error edad_gato en bigotes_felices.py --- 01_intro/desafio/bigotes_felices.py | 1 + 1 file changed, 1 insertion(+) diff --git a/01_intro/desafio/bigotes_felices.py b/01_intro/desafio/bigotes_felices.py index 27e027e..bee8c10 100644 --- a/01_intro/desafio/bigotes_felices.py +++ b/01_intro/desafio/bigotes_felices.py @@ -20,6 +20,7 @@ print(datos) except ValueError: + # Muestra mensaje de error si edad_gato es un valor string print("Edad inválida") # Primer test: imprimir datos introducidos de tipo string. From ff39b31b4bf8b2ad67069d130b0844f7759ad39b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 14:24:38 +0100 Subject: [PATCH 075/323] feat: agregar ejercicio 'operaciones.py' en 02_estructuras --- 02_estructuras/operaciones/operaciones.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 02_estructuras/operaciones/operaciones.py diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py new file mode 100644 index 0000000..e69de29 From dc41c67331045671a5da0c4a393f21698b9c93f7 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 14:28:16 +0100 Subject: [PATCH 076/323] feat: declaracion variable 'a' en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index e69de29..4b45312 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -0,0 +1 @@ +a = 10 \ No newline at end of file From 67bf90eb00de9c43ac9fefcf4509bc2ade59f876 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 28 Oct 2025 14:28:59 +0100 Subject: [PATCH 077/323] feat: declaracion variable 'b' en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 4b45312..257320d 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -1 +1,2 @@ -a = 10 \ No newline at end of file +a = 10 +b = 3 \ No newline at end of file From 77776316d6e69d47f7ac11e96ebf9ef466aff10a Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 12:20:50 +0100 Subject: [PATCH 078/323] docs: enunciado operaciones.py en 02_estructuras --- 02_estructuras/operaciones/operaciones.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 257320d..81ec721 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -1,2 +1,8 @@ +# EJERCICIO GUIADO 1: OPREACIONES NUMÉRICAS +# Paso 1: Crea `operaciones.py` y define `a=10`, `b=3`. +# Paso 2: Calcula suma, resta, multiplicación y división. +# Paso 3: Imprime los resultados con f-strings. +# Paso 4: Redondea la división a 2 decimales. + a = 10 b = 3 \ No newline at end of file From 3ed52e098ab6d68c6cd2bf7a569d72d3548beaaf Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:02:53 +0100 Subject: [PATCH 079/323] feat: declaracion variable suma en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 81ec721..f0244e4 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -5,4 +5,6 @@ # Paso 4: Redondea la división a 2 decimales. a = 10 -b = 3 \ No newline at end of file +b = 3 + +suma = a + b \ No newline at end of file From 0c4ba157acc235632c3c23b9ea51250743409d67 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:05:10 +0100 Subject: [PATCH 080/323] feat: declaracion variable resta en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index f0244e4..460ba52 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -7,4 +7,5 @@ a = 10 b = 3 -suma = a + b \ No newline at end of file +suma = a + b +resta = a - b \ No newline at end of file From 8bb7b6cb67b8b5fa6a68f8ee5b1006bb240552ed Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:06:09 +0100 Subject: [PATCH 081/323] feat: declaracion variable multiplicacion en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 460ba52..da7f336 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -8,4 +8,5 @@ b = 3 suma = a + b -resta = a - b \ No newline at end of file +resta = a - b +multiplicacion = a * b \ No newline at end of file From f7157ae418908921f886220d6da9e7b22987800d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:08:14 +0100 Subject: [PATCH 082/323] feat: declaracion variable division en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index da7f336..b705d1b 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -9,4 +9,5 @@ suma = a + b resta = a - b -multiplicacion = a * b \ No newline at end of file +multiplicacion = a * b +division = a / b \ No newline at end of file From cbeaf4a4258e33eb3f75acf9b2f0bd06e0b98380 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:09:32 +0100 Subject: [PATCH 083/323] feat: impresion variable a en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index b705d1b..e125162 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -10,4 +10,6 @@ suma = a + b resta = a - b multiplicacion = a * b -division = a / b \ No newline at end of file +division = a / b + +print(f"Valor de a: {a}") \ No newline at end of file From ac96a12e01f802f4ef0efe8c60ce249c8ac9135e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:10:20 +0100 Subject: [PATCH 084/323] feat: impresion variable b en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index e125162..88693ca 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -12,4 +12,5 @@ multiplicacion = a * b division = a / b -print(f"Valor de a: {a}") \ No newline at end of file +print(f"Valor de a: {a}") +print(f"Valor de b: {b}") \ No newline at end of file From 31e28cc8d308b9bc57f5067925d74c16e0cd9a72 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:13:46 +0100 Subject: [PATCH 085/323] feat: impresion variables suma y resta en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 88693ca..50857ae 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -13,4 +13,6 @@ division = a / b print(f"Valor de a: {a}") -print(f"Valor de b: {b}") \ No newline at end of file +print(f"Valor de b: {b}") +print(f"Suma de a y b: {suma}") +print(f"Resta de a y b: {resta}") \ No newline at end of file From 9e339fee4ef456150216d4dd112199b4b6fdee99 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:15:19 +0100 Subject: [PATCH 086/323] fix: correccion en impresion suma y resta en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 50857ae..9864565 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -14,5 +14,5 @@ print(f"Valor de a: {a}") print(f"Valor de b: {b}") -print(f"Suma de a y b: {suma}") -print(f"Resta de a y b: {resta}") \ No newline at end of file +print(f"Suma: {a} + {b} = {suma}") +print(f"Resta: {a} - {b} = {resta}") \ No newline at end of file From 7fbd31ca8daa2cf4a72ae2a8263a1f3935a38525 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:16:20 +0100 Subject: [PATCH 087/323] feat: impresion variable multiplicacion en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 9864565..05de518 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -15,4 +15,5 @@ print(f"Valor de a: {a}") print(f"Valor de b: {b}") print(f"Suma: {a} + {b} = {suma}") -print(f"Resta: {a} - {b} = {resta}") \ No newline at end of file +print(f"Resta: {a} - {b} = {resta}") +print(f"Multiplicación: {a} X {b} = {multiplicacion}") \ No newline at end of file From 4a2aa3d12f383829fe287038bb967e5c7331f83c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:17:35 +0100 Subject: [PATCH 088/323] feat: impresion variable division en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 05de518..3cb72c2 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -16,4 +16,5 @@ print(f"Valor de b: {b}") print(f"Suma: {a} + {b} = {suma}") print(f"Resta: {a} - {b} = {resta}") -print(f"Multiplicación: {a} X {b} = {multiplicacion}") \ No newline at end of file +print(f"Multiplicación: {a} X {b} = {multiplicacion}") +print(f"División: {a} / {b} = {division}") \ No newline at end of file From 17b5ce24fe6130afe0a3e3486f1839aa72494fed Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:18:57 +0100 Subject: [PATCH 089/323] feat: impresion linea divisoria entre valores y operaciones en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 3cb72c2..c22bf4c 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -14,6 +14,7 @@ print(f"Valor de a: {a}") print(f"Valor de b: {b}") +print("---------------------------") print(f"Suma: {a} + {b} = {suma}") print(f"Resta: {a} - {b} = {resta}") print(f"Multiplicación: {a} X {b} = {multiplicacion}") From d409369869de8a456d6e316c9aa018c3dcab92d1 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:21:13 +0100 Subject: [PATCH 090/323] feat: uso funcion round() para redondear la division a 2 decimales en operaciones.py --- 02_estructuras/operaciones/operaciones.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index c22bf4c..83c2923 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -12,6 +12,8 @@ multiplicacion = a * b division = a / b +division = round(division, 2) + print(f"Valor de a: {a}") print(f"Valor de b: {b}") print("---------------------------") From 2d14c5d2a1f2e8bd7467baf5547ff316674cbf91 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:36:33 +0100 Subject: [PATCH 091/323] =?UTF-8?q?test:=20prueba=20de=20ejecuci=C3=B3n=20?= =?UTF-8?q?de=20archivo=20operaciones.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02_estructuras/operaciones/operaciones.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 83c2923..8d780e3 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -4,6 +4,7 @@ # Paso 3: Imprime los resultados con f-strings. # Paso 4: Redondea la división a 2 decimales. + a = 10 b = 3 @@ -20,4 +21,14 @@ print(f"Suma: {a} + {b} = {suma}") print(f"Resta: {a} - {b} = {resta}") print(f"Multiplicación: {a} X {b} = {multiplicacion}") -print(f"División: {a} / {b} = {division}") \ No newline at end of file +print(f"División: {a} / {b} = {division}") + +# Resultado esperado (ptyhon operaciones.py): +# Valor de a: 10 +# Valor de b: 3 +# --------------------------- +# Suma: 10 + 3 = 13 +# Resta: 10 - 3 = 7 +# Multiplicación: 10 X 3 = 30 +# División: 10 / 3 = 3.33 +# Test superado con éxito ✅ \ No newline at end of file From 7d8aef78d68bfa62ee5a909e150586ec7258e954 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:37:20 +0100 Subject: [PATCH 092/323] docs: variables a y b --- 02_estructuras/operaciones/operaciones.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 8d780e3..c0264c2 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -4,7 +4,7 @@ # Paso 3: Imprime los resultados con f-strings. # Paso 4: Redondea la división a 2 decimales. - +# Variables a y b a = 10 b = 3 From af9d4f914ca8a3bb21599aac67fa82cf280a019e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:38:51 +0100 Subject: [PATCH 093/323] =?UTF-8?q?docs:=20operaciones=20num=C3=A9ricas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02_estructuras/operaciones/operaciones.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index c0264c2..58a95c9 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -8,9 +8,14 @@ a = 10 b = 3 +# OPERACIONES NUMÉRICAS +# Suma suma = a + b +# Resta resta = a - b +# Multiplicación multiplicacion = a * b +# División division = a / b division = round(division, 2) From c848ab7258ddb3d608410b35bc6fc881998767a4 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:41:57 +0100 Subject: [PATCH 094/323] docs: funcion round() --- 02_estructuras/operaciones/operaciones.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 58a95c9..0e9aa77 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -18,6 +18,8 @@ # División division = a / b +# Función round() para redondear la division a 2 decimales +# Sintaxis: round('numero float', 'numero decimales a redondear') division = round(division, 2) print(f"Valor de a: {a}") From 404a17282fe53ffa3f408efdbf6a04c979a4f194 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:43:16 +0100 Subject: [PATCH 095/323] docs: impresion resultado de operaciones.py --- 02_estructuras/operaciones/operaciones.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index 0e9aa77..c10556f 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -22,6 +22,7 @@ # Sintaxis: round('numero float', 'numero decimales a redondear') division = round(division, 2) +# Impresión de resultados con f-strings print(f"Valor de a: {a}") print(f"Valor de b: {b}") print("---------------------------") From 8c9b4b5dd2911f5d17d805c5205b4918514470e3 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:45:28 +0100 Subject: [PATCH 096/323] feat: agregar casting.py en 02_estructuras --- 02_estructuras/casting/casting.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 02_estructuras/casting/casting.py diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py new file mode 100644 index 0000000..e69de29 From d03487032995fd3e4f8c2e1c0eb15c3570151b13 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:55:47 +0100 Subject: [PATCH 097/323] fix: enunciado operaciones.py --- 02_estructuras/operaciones/operaciones.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_estructuras/operaciones/operaciones.py b/02_estructuras/operaciones/operaciones.py index c10556f..20140d4 100644 --- a/02_estructuras/operaciones/operaciones.py +++ b/02_estructuras/operaciones/operaciones.py @@ -1,4 +1,4 @@ -# EJERCICIO GUIADO 1: OPREACIONES NUMÉRICAS +# EJERCICIO GUIADO 1: OPERACIONES NUMÉRICAS # Paso 1: Crea `operaciones.py` y define `a=10`, `b=3`. # Paso 2: Calcula suma, resta, multiplicación y división. # Paso 3: Imprime los resultados con f-strings. From 8726e17f6b243adf8fc0516888265749cbed978a Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 13:57:38 +0100 Subject: [PATCH 098/323] docs: enunciado casting.py en 02_estructuras --- 02_estructuras/casting/casting.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index e69de29..66b83e8 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -0,0 +1,4 @@ +# EJERCICIO GUIADO 2: CASTING Y VALICADIÓN +# Paso 1: Crea `casting.py` que pida un número con `input`. +# Paso 2: Convierte a `int` dentro de `try/except`. +# Paso 3: Si falla, imprime `Entrada inválida`. \ No newline at end of file From 37a4d36aa6e7a4a50e85188e0d35ce9f4d29a2f3 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:02:38 +0100 Subject: [PATCH 099/323] =?UTF-8?q?feat:=20declaracion=20variable=20castin?= =?UTF-8?q?g=20que=20pida=20un=20n=C3=BAmero=20en=20casting.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02_estructuras/casting/casting.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index 66b83e8..b31877e 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -1,4 +1,6 @@ # EJERCICIO GUIADO 2: CASTING Y VALICADIÓN # Paso 1: Crea `casting.py` que pida un número con `input`. # Paso 2: Convierte a `int` dentro de `try/except`. -# Paso 3: Si falla, imprime `Entrada inválida`. \ No newline at end of file +# Paso 3: Si falla, imprime `Entrada inválida`. + +casting = input("Introduce un número --> ") \ No newline at end of file From 744d48f90922a5924971de640eb9d8e7f46a2797 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:05:04 +0100 Subject: [PATCH 100/323] feat: conversor int de variable casting en casting.py --- 02_estructuras/casting/casting.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index b31877e..f51a4a6 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -3,4 +3,6 @@ # Paso 2: Convierte a `int` dentro de `try/except`. # Paso 3: Si falla, imprime `Entrada inválida`. -casting = input("Introduce un número --> ") \ No newline at end of file +casting = input("Introduce un número --> ") + +casting = int(casting) \ No newline at end of file From cbbfc6322147a94637d9a70588f68e25cc5cf0ff Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:05:39 +0100 Subject: [PATCH 101/323] feat: imprimir casting en casting.py --- 02_estructuras/casting/casting.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index f51a4a6..519d58f 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -5,4 +5,6 @@ casting = input("Introduce un número --> ") -casting = int(casting) \ No newline at end of file +casting = int(casting) + +print(casting) \ No newline at end of file From 03010f50352ff2b5ff5295bfdd4327fdeb07bc1f Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:06:55 +0100 Subject: [PATCH 102/323] test: primer test --- 02_estructuras/casting/casting.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index 519d58f..fb4e878 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -7,4 +7,6 @@ casting = int(casting) -print(casting) \ No newline at end of file +print(casting) + +# Primer test: introducir 34 --> sale éxito ✅ \ No newline at end of file From 893c54a14cf94b428c60bfb7f646cc2c8176c569 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:08:19 +0100 Subject: [PATCH 103/323] test: segundo test; sale mal --- 02_estructuras/casting/casting.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index fb4e878..a12c88f 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -9,4 +9,5 @@ print(casting) -# Primer test: introducir 34 --> sale éxito ✅ \ No newline at end of file +# Segundo test: introducir python cuando lo pidan --> Sale error ❌ +# Motivo: ValueError: invalid literal for int() with base 10: 'python' \ No newline at end of file From 1d13dee6791c02d64b92fc6df10478c88490ca44 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:16:39 +0100 Subject: [PATCH 104/323] feat: agregar try/except con mensaje de error --- 02_estructuras/casting/casting.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index a12c88f..86e1b2d 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -5,9 +5,11 @@ casting = input("Introduce un número --> ") -casting = int(casting) - -print(casting) +try: + casting = int(casting) + print(casting) +except ValueError: + print(f"Entrada inválida") # Segundo test: introducir python cuando lo pidan --> Sale error ❌ # Motivo: ValueError: invalid literal for int() with base 10: 'python' \ No newline at end of file From c332ae5025ea17bb187b1b73d2b2631efadd9588 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:18:07 +0100 Subject: [PATCH 105/323] test: tercer test; sale bien --- 02_estructuras/casting/casting.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index 86e1b2d..72242f4 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -11,5 +11,5 @@ except ValueError: print(f"Entrada inválida") -# Segundo test: introducir python cuando lo pidan --> Sale error ❌ -# Motivo: ValueError: invalid literal for int() with base 10: 'python' \ No newline at end of file +# Tercer test: introducir python cuando lo pidan +# Resultado impresión: Entrada inválida ✅ \ No newline at end of file From f592e1d7fa9a0c93f51a29d1c8f2974a71b4ba73 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:19:25 +0100 Subject: [PATCH 106/323] docs: variable casting en casting.py --- 02_estructuras/casting/casting.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index 72242f4..3dbe1c3 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -3,6 +3,7 @@ # Paso 2: Convierte a `int` dentro de `try/except`. # Paso 3: Si falla, imprime `Entrada inválida`. +# Variable casting que pide un número con `input` casting = input("Introduce un número --> ") try: From 3ebc7fc918f80049a0c54869f64e273c5b6fe5d5 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:20:35 +0100 Subject: [PATCH 107/323] docs: intento de conversion de casting a int en casting.py --- 02_estructuras/casting/casting.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index 3dbe1c3..07c79c6 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -7,6 +7,7 @@ casting = input("Introduce un número --> ") try: + # Intentamos convertir casting en int casting = int(casting) print(casting) except ValueError: From c7f2b12dadd7808bc4f2cf2299fc37717f797b99 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:21:38 +0100 Subject: [PATCH 108/323] =?UTF-8?q?docs:=20imprimir=20resultado=20en=20cas?= =?UTF-8?q?o=20de=20=C3=A9xito?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02_estructuras/casting/casting.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index 07c79c6..cd3a554 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -9,6 +9,7 @@ try: # Intentamos convertir casting en int casting = int(casting) + # Si lo convierte, imprime en consola print(casting) except ValueError: print(f"Entrada inválida") From 30a3ce367f3fa32a79af9fa84d32b833daabb38b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:23:01 +0100 Subject: [PATCH 109/323] docs: imprimir mensaje de error --- 02_estructuras/casting/casting.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index cd3a554..fe41987 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -12,6 +12,7 @@ # Si lo convierte, imprime en consola print(casting) except ValueError: + # Salta mensaje de error 'ValueError' si el resultado no es un número entero print(f"Entrada inválida") # Tercer test: introducir python cuando lo pidan From e30a5a5ab97b1d08f330df54fb38a6fb7b8f729f Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:24:08 +0100 Subject: [PATCH 110/323] test: cuarto test; sale bien --- 02_estructuras/casting/casting.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/02_estructuras/casting/casting.py b/02_estructuras/casting/casting.py index fe41987..ce12d39 100644 --- a/02_estructuras/casting/casting.py +++ b/02_estructuras/casting/casting.py @@ -15,5 +15,5 @@ # Salta mensaje de error 'ValueError' si el resultado no es un número entero print(f"Entrada inválida") -# Tercer test: introducir python cuando lo pidan -# Resultado impresión: Entrada inválida ✅ \ No newline at end of file +# Cuarto test: introducir 35 cuando lo pidan +# Resultado impresión: 35 ✅ \ No newline at end of file From e847a12bdaef14a54e262c97ee5194639d0fda88 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 29 Oct 2025 14:29:19 +0100 Subject: [PATCH 111/323] feat: agregar booleans.py en 02_estructuras --- 02_estructuras/autonomos/booleans.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 02_estructuras/autonomos/booleans.py diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py new file mode 100644 index 0000000..e69de29 From 3232efa252654fc5e66f970b1bcef387171a977f Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 08:37:52 +0100 Subject: [PATCH 112/323] docs: enunciado ejercicio booleans.py en 02_estructuras --- 02_estructuras/autonomos/booleans.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index e69de29..5c9bfb0 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 1: BOOLEANS +# Enunciado: evalúa condiciones simples (>=, ==) y muestra True/False. \ No newline at end of file From 882bc23d72867034b8e8c8b64be5532fafef0ce9 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 08:57:23 +0100 Subject: [PATCH 113/323] feat: declaracion variables num1 y num2 en booleans.py --- 02_estructuras/autonomos/booleans.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 5c9bfb0..2352267 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -1,2 +1,5 @@ # EJERCICIO AUTÓNOMO 1: BOOLEANS -# Enunciado: evalúa condiciones simples (>=, ==) y muestra True/False. \ No newline at end of file +# Enunciado: evalúa condiciones simples (>=, ==) y muestra True/False. + +num1 = 4 +num2 = 6 \ No newline at end of file From b61a7330ba2f73df70395f472240cd385af1186e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:00:23 +0100 Subject: [PATCH 114/323] feat: declaracion variable 'mayorigualque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 2352267..a6172b1 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -2,4 +2,6 @@ # Enunciado: evalúa condiciones simples (>=, ==) y muestra True/False. num1 = 4 -num2 = 6 \ No newline at end of file +num2 = 6 + +mayorigualque = num1 >= num2 From bb053d3d19cd5c9d09df4122fd9ae1cafa21e899 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:02:30 +0100 Subject: [PATCH 115/323] feat: declaracion variable 'menorigualque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index a6172b1..a51105e 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -5,3 +5,4 @@ num2 = 6 mayorigualque = num1 >= num2 +menorigualque = num1 <= num2 \ No newline at end of file From e5621b4d8e4451e647a36974a644fd24647d0834 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:02:59 +0100 Subject: [PATCH 116/323] feat: declaracion variable 'igualque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index a51105e..76314cf 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -5,4 +5,5 @@ num2 = 6 mayorigualque = num1 >= num2 -menorigualque = num1 <= num2 \ No newline at end of file +menorigualque = num1 <= num2 +igualque = num1 == num2 \ No newline at end of file From 16a885742db8abef278f5b6013559f0d862fb2d4 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:13:22 +0100 Subject: [PATCH 117/323] feat: declaracion variable 'distintoque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 76314cf..ffcb0d7 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -6,4 +6,5 @@ mayorigualque = num1 >= num2 menorigualque = num1 <= num2 -igualque = num1 == num2 \ No newline at end of file +igualque = num1 == num2 +distintoque = num1 != num2 \ No newline at end of file From 2155e0173319c06fad11fa4414522262e1bf3a5a Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:13:48 +0100 Subject: [PATCH 118/323] feat: declaracion variable 'mayorque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index ffcb0d7..93eb43b 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -7,4 +7,5 @@ mayorigualque = num1 >= num2 menorigualque = num1 <= num2 igualque = num1 == num2 -distintoque = num1 != num2 \ No newline at end of file +distintoque = num1 != num2 +mayorque = num1 > num2 \ No newline at end of file From eba9d46873a0976b3172f04c932259c7bc6fc861 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:14:23 +0100 Subject: [PATCH 119/323] feat: declaracion variable 'menorque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 93eb43b..6f33869 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -8,4 +8,5 @@ menorigualque = num1 <= num2 igualque = num1 == num2 distintoque = num1 != num2 -mayorque = num1 > num2 \ No newline at end of file +mayorque = num1 > num2 +menorque = num1 < num2 \ No newline at end of file From b0a1cbe51dfc83a775bac603ce5d79e0dc69dd84 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:18:15 +0100 Subject: [PATCH 120/323] feat: imprime titulo ejercicio en booleans.py --- 02_estructuras/autonomos/booleans.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 6f33869..57339f9 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -9,4 +9,6 @@ igualque = num1 == num2 distintoque = num1 != num2 mayorque = num1 > num2 -menorque = num1 < num2 \ No newline at end of file +menorque = num1 < num2 + +print(f"CONDICIONES SIMPLES:") \ No newline at end of file From 926fd040fcfe732e715609e842be997463fa3f1c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:19:22 +0100 Subject: [PATCH 121/323] feat: imprime 'mayorigualque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 57339f9..1853ecb 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -11,4 +11,5 @@ mayorque = num1 > num2 menorque = num1 < num2 -print(f"CONDICIONES SIMPLES:") \ No newline at end of file +print(f"CONDICIONES SIMPLES:") +print(f"{num1} >= {num2} : {mayorigualque}") \ No newline at end of file From 255aea33870bb2c279dbbed0e3fab0b5175786d2 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:20:10 +0100 Subject: [PATCH 122/323] feat: imprime 'menorigualque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 1853ecb..b1609c7 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -12,4 +12,5 @@ menorque = num1 < num2 print(f"CONDICIONES SIMPLES:") -print(f"{num1} >= {num2} : {mayorigualque}") \ No newline at end of file +print(f"{num1} >= {num2} : {mayorigualque}") +print(f"{num1} <= {num2} : {menorigualque}") \ No newline at end of file From 55c79b4f60e980c01a5b031c8649693fdca9992c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:21:47 +0100 Subject: [PATCH 123/323] feat: imprime 'igualque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index b1609c7..bb7cbb7 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -13,4 +13,5 @@ print(f"CONDICIONES SIMPLES:") print(f"{num1} >= {num2} : {mayorigualque}") -print(f"{num1} <= {num2} : {menorigualque}") \ No newline at end of file +print(f"{num1} <= {num2} : {menorigualque}") +print(f"{num1} == {num2} : {igualque}") \ No newline at end of file From 67b94f1106f924438e983792a066104135c990f6 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:22:46 +0100 Subject: [PATCH 124/323] feat: imprime 'distintoque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index bb7cbb7..5d184e0 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -14,4 +14,5 @@ print(f"CONDICIONES SIMPLES:") print(f"{num1} >= {num2} : {mayorigualque}") print(f"{num1} <= {num2} : {menorigualque}") -print(f"{num1} == {num2} : {igualque}") \ No newline at end of file +print(f"{num1} == {num2} : {igualque}") +print(f"{num1} != {num2} : {distintoque}") \ No newline at end of file From 3c2ff9c9d94d0135a7ae20d6f0c240368295015a Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:23:40 +0100 Subject: [PATCH 125/323] feat: imprime 'mayorque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 5d184e0..c716f2d 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -15,4 +15,5 @@ print(f"{num1} >= {num2} : {mayorigualque}") print(f"{num1} <= {num2} : {menorigualque}") print(f"{num1} == {num2} : {igualque}") -print(f"{num1} != {num2} : {distintoque}") \ No newline at end of file +print(f"{num1} != {num2} : {distintoque}") +print(f"{num1} > {num2} : {mayorque}") \ No newline at end of file From a1ac299dd8b544e229c1804e73ab9b94169b42be Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:25:35 +0100 Subject: [PATCH 126/323] feat: imprime 'menorque' en booleans.py --- 02_estructuras/autonomos/booleans.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index c716f2d..3d6d2ac 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -16,4 +16,5 @@ print(f"{num1} <= {num2} : {menorigualque}") print(f"{num1} == {num2} : {igualque}") print(f"{num1} != {num2} : {distintoque}") -print(f"{num1} > {num2} : {mayorque}") \ No newline at end of file +print(f"{num1} > {num2} : {mayorque}") +print(f"{num1} < {num2} : {menorque}") \ No newline at end of file From 1035613484cffba8ed0d825ce7df5cbd528c7a8e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:27:38 +0100 Subject: [PATCH 127/323] test: ejecucion booleans.py --- 02_estructuras/autonomos/booleans.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 3d6d2ac..8ebc783 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -17,4 +17,13 @@ print(f"{num1} == {num2} : {igualque}") print(f"{num1} != {num2} : {distintoque}") print(f"{num1} > {num2} : {mayorque}") -print(f"{num1} < {num2} : {menorque}") \ No newline at end of file +print(f"{num1} < {num2} : {menorque}") + +# RESULTADO ESPERADO con comando 'python booleans.py': +# CONDICIONES SIMPLES: +# 4 >= 6 : False +# 4 <= 6 : True +# 4 == 6 : False +# 4 != 6 : True +# 4 > 6 : False +# 4 < 6 : True \ No newline at end of file From c1158da5e0190d72ab612bcb11a4423116578b46 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:28:47 +0100 Subject: [PATCH 128/323] =?UTF-8?q?docs:=20variables=20de=20dos=20n=C3=BAm?= =?UTF-8?q?eros=20enteros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02_estructuras/autonomos/booleans.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 8ebc783..a018b89 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -1,6 +1,7 @@ # EJERCICIO AUTÓNOMO 1: BOOLEANS # Enunciado: evalúa condiciones simples (>=, ==) y muestra True/False. +# Variables de dos números enteros num1 = 4 num2 = 6 From 041f8a053dd593908c887243a4f6a4441c569eaa Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:32:59 +0100 Subject: [PATCH 129/323] docs: variables de las condiciones simples --- 02_estructuras/autonomos/booleans.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index a018b89..fc02f3a 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -5,11 +5,18 @@ num1 = 4 num2 = 6 +# Declaramos variables de las condiciones simples: +# Condición si el primer número es Mayor o igual que el segundo número mayorigualque = num1 >= num2 +# Condición si el primer número es Menor o igual que el segundo número menorigualque = num1 <= num2 +# Condición si el primer número es Igual que el segundo número igualque = num1 == num2 +# Condición si el primer número es Distinto que el segundo número distintoque = num1 != num2 +# Condición si el primer número es Mayor que el segundo número mayorque = num1 > num2 +# Condición si el primer número es Menor que el segundo número menorque = num1 < num2 print(f"CONDICIONES SIMPLES:") From 61632b5963e681fb780262e67fe574a9e7b70870 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:36:26 +0100 Subject: [PATCH 130/323] docs: impresion variables de condiciones simples --- 02_estructuras/autonomos/booleans.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index fc02f3a..4578039 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -19,6 +19,7 @@ # Condición si el primer número es Menor que el segundo número menorque = num1 < num2 +# Imprimir las condiciones simples en consola print(f"CONDICIONES SIMPLES:") print(f"{num1} >= {num2} : {mayorigualque}") print(f"{num1} <= {num2} : {menorigualque}") From 504055a11b96f14d07e28dc5d4897d220df89b36 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 09:41:56 +0100 Subject: [PATCH 131/323] feat: agregar ejercicio 'strings.py' en 02_estructuras --- 02_estructuras/autonomos/strings.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 02_estructuras/autonomos/strings.py diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py new file mode 100644 index 0000000..e69de29 From be7dca1a0e9cff22776b55a7c9f8615c5ddc880b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 10:50:18 +0100 Subject: [PATCH 132/323] docs: enunciado ejercicio 'string.py' en 02_estructuras --- 02_estructuras/autonomos/strings.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py index e69de29..7bccb16 100644 --- a/02_estructuras/autonomos/strings.py +++ b/02_estructuras/autonomos/strings.py @@ -0,0 +1,3 @@ +# EJERCICIO AUTÓNOMO 2: STRINGS +# Enunciado: une nombre y apellido con espacio y `title()`. + From e52e2a1c3c9f6848055a7d31e1b247ef0b21093c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 10:53:51 +0100 Subject: [PATCH 133/323] feat: declaracion variable 'nombre' a introducir datos en 'strings.py' --- 02_estructuras/autonomos/strings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py index 7bccb16..cbdf3f7 100644 --- a/02_estructuras/autonomos/strings.py +++ b/02_estructuras/autonomos/strings.py @@ -1,3 +1,4 @@ # EJERCICIO AUTÓNOMO 2: STRINGS # Enunciado: une nombre y apellido con espacio y `title()`. +nombre = input("Escribe tu nombre: ") \ No newline at end of file From 891dcac00cd3cb24e4e51ed53ece642e429498dc Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 11:01:53 +0100 Subject: [PATCH 134/323] feat: declaracion variable 'apellido' a introducir datos en 'strings.py' --- 02_estructuras/autonomos/strings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py index cbdf3f7..8e36970 100644 --- a/02_estructuras/autonomos/strings.py +++ b/02_estructuras/autonomos/strings.py @@ -1,4 +1,5 @@ # EJERCICIO AUTÓNOMO 2: STRINGS # Enunciado: une nombre y apellido con espacio y `title()`. -nombre = input("Escribe tu nombre: ") \ No newline at end of file +nombre = input("Escribe tu nombre: ") +apellido = input("Escribe tu apellido:") \ No newline at end of file From 60e64cf3391e5ff26569001556071e8c34bbc62d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 11:08:53 +0100 Subject: [PATCH 135/323] feat: declaracion variable 'string' a unir variables anteriores en 'strings.py' --- 02_estructuras/autonomos/strings.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py index 8e36970..a3f112a 100644 --- a/02_estructuras/autonomos/strings.py +++ b/02_estructuras/autonomos/strings.py @@ -2,4 +2,6 @@ # Enunciado: une nombre y apellido con espacio y `title()`. nombre = input("Escribe tu nombre: ") -apellido = input("Escribe tu apellido:") \ No newline at end of file +apellido = input("Escribe tu apellido:") + +string = f"{nombre} {apellido}" \ No newline at end of file From 7584a9479d8d98939636ac9c8343b02efbc9e27b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 13:22:29 +0100 Subject: [PATCH 136/323] feat: declaracion variable 'title' a modificar variable 'string' en 'strings.py' --- 02_estructuras/autonomos/strings.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py index a3f112a..3d96e3e 100644 --- a/02_estructuras/autonomos/strings.py +++ b/02_estructuras/autonomos/strings.py @@ -2,6 +2,8 @@ # Enunciado: une nombre y apellido con espacio y `title()`. nombre = input("Escribe tu nombre: ") -apellido = input("Escribe tu apellido:") +apellido = input("Escribe tu apellido: ") -string = f"{nombre} {apellido}" \ No newline at end of file +string = f"{nombre} {apellido}" + +title = string.title() \ No newline at end of file From 1d0cf3c9699de31f01b53f204724c1bf45f310c5 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 13:30:09 +0100 Subject: [PATCH 137/323] feat: imprimir variable 'title' a mostrar nombre y apellido en 'strings.py --- 02_estructuras/autonomos/strings.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py index 3d96e3e..f1406b3 100644 --- a/02_estructuras/autonomos/strings.py +++ b/02_estructuras/autonomos/strings.py @@ -6,4 +6,6 @@ string = f"{nombre} {apellido}" -title = string.title() \ No newline at end of file +title = string.title() + +print(title) \ No newline at end of file From 80a1ef60cecbc7bc63e99ef3d78bcceeafe17311 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 13:44:22 +0100 Subject: [PATCH 138/323] test: primer test --- 02_estructuras/autonomos/strings.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py index f1406b3..fb303a5 100644 --- a/02_estructuras/autonomos/strings.py +++ b/02_estructuras/autonomos/strings.py @@ -8,4 +8,14 @@ title = string.title() -print(title) \ No newline at end of file +print(title) + +# Primer test: ejecutamos 'python strings.py' +# Cuando pida el programa pondremos +# como nombre 'pepe' +# y como apellido 'viyuela' +# Resultado esperado: +# Escribe tu nombre: pepe +# Escribe tu apellido: viyuela +# Pepe Viyuela +# Realizado con éxito ✅ From a134fd9f01df535d6c19dcf70db7681811d5359a Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 13:47:10 +0100 Subject: [PATCH 139/323] docs: variables nombre y apellido en 'strings.py' --- 02_estructuras/autonomos/strings.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py index fb303a5..37f4c65 100644 --- a/02_estructuras/autonomos/strings.py +++ b/02_estructuras/autonomos/strings.py @@ -1,6 +1,9 @@ # EJERCICIO AUTÓNOMO 2: STRINGS # Enunciado: une nombre y apellido con espacio y `title()`. +# Variables nombre y apellido +# nombre: pide al usuario un nombre +# apellido: pide al usuario un apellido nombre = input("Escribe tu nombre: ") apellido = input("Escribe tu apellido: ") From 7208ad3f2f88b618b0ed4dc08971ac2cf6ce8338 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 13:49:32 +0100 Subject: [PATCH 140/323] docs: variable string en 'strings.py' --- 02_estructuras/autonomos/strings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py index 37f4c65..61c41b1 100644 --- a/02_estructuras/autonomos/strings.py +++ b/02_estructuras/autonomos/strings.py @@ -7,6 +7,8 @@ nombre = input("Escribe tu nombre: ") apellido = input("Escribe tu apellido: ") +# Variable string +# string: devuelve una cadena de texto que une nombre y apellido con un espacio string = f"{nombre} {apellido}" title = string.title() From 477b47d9b3a44b00fbb95bc5c07f0a763859f54c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 13:53:24 +0100 Subject: [PATCH 141/323] docs: variable title en 'strings.py' --- 02_estructuras/autonomos/strings.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py index 61c41b1..ee066e2 100644 --- a/02_estructuras/autonomos/strings.py +++ b/02_estructuras/autonomos/strings.py @@ -11,6 +11,10 @@ # string: devuelve una cadena de texto que une nombre y apellido con un espacio string = f"{nombre} {apellido}" +# Variable title +# title: devuelve string que incluye la funcion title() +# title(): devuelve una cadena en la que el primer carácter de cada palabra está en mayúscula. +# Como un encabezado o un título. title = string.title() print(title) From 1ab62feccc922457402ef76287995b8f7d7494f9 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 13:54:10 +0100 Subject: [PATCH 142/323] docs: imprimir title en 'strings.py' --- 02_estructuras/autonomos/strings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/strings.py b/02_estructuras/autonomos/strings.py index ee066e2..63c782d 100644 --- a/02_estructuras/autonomos/strings.py +++ b/02_estructuras/autonomos/strings.py @@ -17,6 +17,7 @@ # Como un encabezado o un título. title = string.title() +# Imprimir variable title en consola print(title) # Primer test: ejecutamos 'python strings.py' From 0aad68b77b0a925c8e0bbdb4d79ac3fc2a61a554 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 13:58:06 +0100 Subject: [PATCH 143/323] fix: variables num1 y num2 en 'booleans.py' --- 02_estructuras/autonomos/booleans.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 4578039..2213b18 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -1,9 +1,9 @@ # EJERCICIO AUTÓNOMO 1: BOOLEANS # Enunciado: evalúa condiciones simples (>=, ==) y muestra True/False. -# Variables de dos números enteros -num1 = 4 -num2 = 6 +# Variables de dos números enteros que piden al usuario +num1 = input("Escribe un número: ") +num2 = input("Escribe otro número: ") # Declaramos variables de las condiciones simples: # Condición si el primer número es Mayor o igual que el segundo número From d1f955b3220d8e1ddb09d43f37add729ad8feede Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 14:04:26 +0100 Subject: [PATCH 144/323] feat: convertir num1/num2 en enteros en booleans.py --- 02_estructuras/autonomos/booleans.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 2213b18..a7e3eb8 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -5,6 +5,9 @@ num1 = input("Escribe un número: ") num2 = input("Escribe otro número: ") +num1 = int(num1) +num2 = int(num2) + # Declaramos variables de las condiciones simples: # Condición si el primer número es Mayor o igual que el segundo número mayorigualque = num1 >= num2 @@ -21,14 +24,15 @@ # Imprimir las condiciones simples en consola print(f"CONDICIONES SIMPLES:") -print(f"{num1} >= {num2} : {mayorigualque}") +print(f"{num1} >= {num2} : {num1 + num2}") print(f"{num1} <= {num2} : {menorigualque}") print(f"{num1} == {num2} : {igualque}") print(f"{num1} != {num2} : {distintoque}") print(f"{num1} > {num2} : {mayorque}") print(f"{num1} < {num2} : {menorque}") -# RESULTADO ESPERADO con comando 'python booleans.py': +# Primer test: introducir '4' como num1 y '6' como num2. +# Resultado: # CONDICIONES SIMPLES: # 4 >= 6 : False # 4 <= 6 : True From 48cb07791449f128ae338c5149f08164a0190631 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 14:05:43 +0100 Subject: [PATCH 145/323] test: primer test --- 02_estructuras/autonomos/booleans.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index a7e3eb8..7b5f015 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -24,7 +24,7 @@ # Imprimir las condiciones simples en consola print(f"CONDICIONES SIMPLES:") -print(f"{num1} >= {num2} : {num1 + num2}") +print(f"{num1} >= {num2} : {mayorigualque}") print(f"{num1} <= {num2} : {menorigualque}") print(f"{num1} == {num2} : {igualque}") print(f"{num1} != {num2} : {distintoque}") @@ -39,4 +39,5 @@ # 4 == 6 : False # 4 != 6 : True # 4 > 6 : False -# 4 < 6 : True \ No newline at end of file +# 4 < 6 : True +# Éxito ✅ \ No newline at end of file From 105dc65bbb076b752e99fee471cae4c332024f5f Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 14:07:08 +0100 Subject: [PATCH 146/323] test: segundo test en booleans.py; sale mal --- 02_estructuras/autonomos/booleans.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 7b5f015..a971c11 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -31,13 +31,7 @@ print(f"{num1} > {num2} : {mayorque}") print(f"{num1} < {num2} : {menorque}") -# Primer test: introducir '4' como num1 y '6' como num2. +# Segundo test: introducir 're' como num1 y 'do' como num2. # Resultado: -# CONDICIONES SIMPLES: -# 4 >= 6 : False -# 4 <= 6 : True -# 4 == 6 : False -# 4 != 6 : True -# 4 > 6 : False -# 4 < 6 : True -# Éxito ✅ \ No newline at end of file +# ERROR ❌ +# Motivo: ValueError: invalid literal for int() with base 10: 're' \ No newline at end of file From 536390ceaba0a61531a7aed90182562e184130df Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 14:11:10 +0100 Subject: [PATCH 147/323] feat: agregar try/except con mensaje error en 'booleans.py' --- 02_estructuras/autonomos/booleans.py | 51 +++++++++++++++------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index a971c11..a21f67b 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -5,31 +5,36 @@ num1 = input("Escribe un número: ") num2 = input("Escribe otro número: ") -num1 = int(num1) -num2 = int(num2) +try : -# Declaramos variables de las condiciones simples: -# Condición si el primer número es Mayor o igual que el segundo número -mayorigualque = num1 >= num2 -# Condición si el primer número es Menor o igual que el segundo número -menorigualque = num1 <= num2 -# Condición si el primer número es Igual que el segundo número -igualque = num1 == num2 -# Condición si el primer número es Distinto que el segundo número -distintoque = num1 != num2 -# Condición si el primer número es Mayor que el segundo número -mayorque = num1 > num2 -# Condición si el primer número es Menor que el segundo número -menorque = num1 < num2 + num1 = int(num1) + num2 = int(num2) -# Imprimir las condiciones simples en consola -print(f"CONDICIONES SIMPLES:") -print(f"{num1} >= {num2} : {mayorigualque}") -print(f"{num1} <= {num2} : {menorigualque}") -print(f"{num1} == {num2} : {igualque}") -print(f"{num1} != {num2} : {distintoque}") -print(f"{num1} > {num2} : {mayorque}") -print(f"{num1} < {num2} : {menorque}") + # Declaramos variables de las condiciones simples: + # Condición si el primer número es Mayor o igual que el segundo número + mayorigualque = num1 >= num2 + # Condición si el primer número es Menor o igual que el segundo número + menorigualque = num1 <= num2 + # Condición si el primer número es Igual que el segundo número + igualque = num1 == num2 + # Condición si el primer número es Distinto que el segundo número + distintoque = num1 != num2 + # Condición si el primer número es Mayor que el segundo número + mayorque = num1 > num2 + # Condición si el primer número es Menor que el segundo número + menorque = num1 < num2 + + # Imprimir las condiciones simples en consola + print(f"CONDICIONES SIMPLES:") + print(f"{num1} >= {num2} : {mayorigualque}") + print(f"{num1} <= {num2} : {menorigualque}") + print(f"{num1} == {num2} : {igualque}") + print(f"{num1} != {num2} : {distintoque}") + print(f"{num1} > {num2} : {mayorque}") + print(f"{num1} < {num2} : {menorque}") + +except ValueError: + print("Inválido. Inténtelo de nuevo.") # Segundo test: introducir 're' como num1 y 'do' como num2. # Resultado: From dc41d3a1c34fa926e3ba04121a17af9ab4845cd0 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 14:12:24 +0100 Subject: [PATCH 148/323] test: tercer test en booleans.py --- 02_estructuras/autonomos/booleans.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index a21f67b..8d370be 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -36,7 +36,9 @@ except ValueError: print("Inválido. Inténtelo de nuevo.") -# Segundo test: introducir 're' como num1 y 'do' como num2. +# Tercer test: introducir 're' como num1 y 'do' como num2. # Resultado: -# ERROR ❌ -# Motivo: ValueError: invalid literal for int() with base 10: 're' \ No newline at end of file +# Escribe un número: re +# Escribe otro número: do +# Inválido. Inténtelo de nuevo. +# Éxito ✅ \ No newline at end of file From 52073073280351def4c510d0a92f06a2cdd3fa96 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 14:13:41 +0100 Subject: [PATCH 149/323] test: cuarto test en booleans.py --- 02_estructuras/autonomos/booleans.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 8d370be..96b3c15 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -36,9 +36,12 @@ except ValueError: print("Inválido. Inténtelo de nuevo.") -# Tercer test: introducir 're' como num1 y 'do' como num2. +# Cuarto test: introducir '10' como num1 y '5' como num2. # Resultado: -# Escribe un número: re -# Escribe otro número: do -# Inválido. Inténtelo de nuevo. +# 10 >= 5 : True +# 10 <= 5 : False +# 10 == 5 : False +# 10 != 5 : True +# 10 > 5 : True +# 10 < 5 : False # Éxito ✅ \ No newline at end of file From 02ce0e0ac1bd194140a8595cf6652412dfaea585 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 14:15:46 +0100 Subject: [PATCH 150/323] docs: try/except en booleans.py --- 02_estructuras/autonomos/booleans.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/booleans.py b/02_estructuras/autonomos/booleans.py index 96b3c15..1ddde8f 100644 --- a/02_estructuras/autonomos/booleans.py +++ b/02_estructuras/autonomos/booleans.py @@ -6,7 +6,7 @@ num2 = input("Escribe otro número: ") try : - + # Intentamos convertir num1 y num2 en enteros num1 = int(num1) num2 = int(num2) @@ -34,6 +34,7 @@ print(f"{num1} < {num2} : {menorque}") except ValueError: + # Si algun valor introducido no es un numero imprime este error. print("Inválido. Inténtelo de nuevo.") # Cuarto test: introducir '10' como num1 y '5' como num2. From 5502d1946d653ba6b27e1f567935f60258ec8235 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:29:27 +0100 Subject: [PATCH 151/323] feat: agregar 'redondeo.py' en 02_estructuras --- 02_estructuras/autonomos/redondeo.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 02_estructuras/autonomos/redondeo.py diff --git a/02_estructuras/autonomos/redondeo.py b/02_estructuras/autonomos/redondeo.py new file mode 100644 index 0000000..e69de29 From b126149fb8a47b0aaa87b1657b4f44387c0452e2 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:30:45 +0100 Subject: [PATCH 152/323] docs: enunciado redondeo.py --- 02_estructuras/autonomos/redondeo.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02_estructuras/autonomos/redondeo.py b/02_estructuras/autonomos/redondeo.py index e69de29..93df401 100644 --- a/02_estructuras/autonomos/redondeo.py +++ b/02_estructuras/autonomos/redondeo.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 3: REDONDEO +# Enunciado: redondea 3.14159 a 3 decimales. \ No newline at end of file From 973c8fffef933a1aa842ee78c66362673cfaa821 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:32:01 +0100 Subject: [PATCH 153/323] feat: declaracion variable 'num' en 'redondeo.py' --- 02_estructuras/autonomos/redondeo.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/redondeo.py b/02_estructuras/autonomos/redondeo.py index 93df401..deae356 100644 --- a/02_estructuras/autonomos/redondeo.py +++ b/02_estructuras/autonomos/redondeo.py @@ -1,2 +1,4 @@ # EJERCICIO AUTÓNOMO 3: REDONDEO -# Enunciado: redondea 3.14159 a 3 decimales. \ No newline at end of file +# Enunciado: redondea 3.14159 a 3 decimales. + +num = 3.14159 \ No newline at end of file From 5ac2cf1b534e8e55e95622db485e573de2c31db9 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:33:50 +0100 Subject: [PATCH 154/323] feat: declaracion variable 'num_redondo' en 'redondo.py' --- 02_estructuras/autonomos/redondeo.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/redondeo.py b/02_estructuras/autonomos/redondeo.py index deae356..007d2af 100644 --- a/02_estructuras/autonomos/redondeo.py +++ b/02_estructuras/autonomos/redondeo.py @@ -1,4 +1,6 @@ # EJERCICIO AUTÓNOMO 3: REDONDEO # Enunciado: redondea 3.14159 a 3 decimales. -num = 3.14159 \ No newline at end of file +num = 3.14159 + +num_redondo = round(num, 3) \ No newline at end of file From 227e1393982140d5798654b940fb0b4862b8aad6 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:35:39 +0100 Subject: [PATCH 155/323] feat: imprimir variables anteriores en 'redondo.py' --- 02_estructuras/autonomos/redondeo.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/redondeo.py b/02_estructuras/autonomos/redondeo.py index 007d2af..ceb181f 100644 --- a/02_estructuras/autonomos/redondeo.py +++ b/02_estructuras/autonomos/redondeo.py @@ -3,4 +3,7 @@ num = 3.14159 -num_redondo = round(num, 3) \ No newline at end of file +num_redondo = round(num, 3) + +print(f"Número: {num}") +print(f"Número redondeado a 3 decimales: {num_redondo}") \ No newline at end of file From 4b4140856d6536678f6ccf18bf21846b4b4398bf Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:37:27 +0100 Subject: [PATCH 156/323] =?UTF-8?q?test:=20test=20de=20ejecuci=C3=B3n=20'r?= =?UTF-8?q?edondo.py';=20sale=20bien?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02_estructuras/autonomos/redondeo.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/redondeo.py b/02_estructuras/autonomos/redondeo.py index ceb181f..535364d 100644 --- a/02_estructuras/autonomos/redondeo.py +++ b/02_estructuras/autonomos/redondeo.py @@ -6,4 +6,10 @@ num_redondo = round(num, 3) print(f"Número: {num}") -print(f"Número redondeado a 3 decimales: {num_redondo}") \ No newline at end of file +print(f"Número redondeado a 3 decimales: {num_redondo}") + +# Test: ejecutar 'python redondeo.py +# Resultado esperado: +# Número: 3.14159 +# Número redondeado a 3 decimales: 3.142 +# Éxito ✅ \ No newline at end of file From c11febcd978f242aa5910364eab6e0ca26f0e059 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:38:29 +0100 Subject: [PATCH 157/323] docs: variable num en 'redondo.py' --- 02_estructuras/autonomos/redondeo.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/redondeo.py b/02_estructuras/autonomos/redondeo.py index 535364d..2fc41df 100644 --- a/02_estructuras/autonomos/redondeo.py +++ b/02_estructuras/autonomos/redondeo.py @@ -1,6 +1,7 @@ # EJERCICIO AUTÓNOMO 3: REDONDEO # Enunciado: redondea 3.14159 a 3 decimales. +# Variable num con el número específico a redondear num = 3.14159 num_redondo = round(num, 3) From a33c98aa440d6c43571314ca0fb42a3a694d11a9 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:47:09 +0100 Subject: [PATCH 158/323] docs: variable num_redondo en 'redondo.py' --- 02_estructuras/autonomos/redondeo.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/02_estructuras/autonomos/redondeo.py b/02_estructuras/autonomos/redondeo.py index 2fc41df..f58f80e 100644 --- a/02_estructuras/autonomos/redondeo.py +++ b/02_estructuras/autonomos/redondeo.py @@ -4,6 +4,13 @@ # Variable num con el número específico a redondear num = 3.14159 +# Variable num_redondo que redondea variable num a 3 decimales +# round(): devuelve un número con decimales que es una versión redondeada del +# mismo, con el número especificado de decimales. +# Sintaxis: round(number, digits) +# number --> Obligatorio. El número a ser redondeado +# digits --> Opcional. El número específico a usar para redondear +# number. Por defecto es 0. num_redondo = round(num, 3) print(f"Número: {num}") From 51e4666c4e31d3a428ffb6ebe0766ca2e90f2e9d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:51:26 +0100 Subject: [PATCH 159/323] docs: imprimir variables anteriores en 'redondeo.py' --- 02_estructuras/autonomos/redondeo.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/redondeo.py b/02_estructuras/autonomos/redondeo.py index f58f80e..019005c 100644 --- a/02_estructuras/autonomos/redondeo.py +++ b/02_estructuras/autonomos/redondeo.py @@ -13,6 +13,7 @@ # number. Por defecto es 0. num_redondo = round(num, 3) +# Imprimir resultado del ejercicio print(f"Número: {num}") print(f"Número redondeado a 3 decimales: {num_redondo}") From 317f3a95bd6cc56ea6bbd117474f468402e80818 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:52:53 +0100 Subject: [PATCH 160/323] feat: agregar 'porcentajes.py' en 02_estructuras --- 02_estructuras/autonomos/porcentajes.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 02_estructuras/autonomos/porcentajes.py diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py new file mode 100644 index 0000000..e69de29 From d48db24267688cc76f03016dadd6579c956bf91b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:53:51 +0100 Subject: [PATCH 161/323] docs: enunciado 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index e69de29..fede2eb 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 4: PORCENTAJES +# Enunciado: calcula el 15% de una cantidad. \ No newline at end of file From ea24a3f2c6e26b93c750ebdf594fac879aa0d1e7 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 19:59:17 +0100 Subject: [PATCH 162/323] feat: declaracion variable 'num' en 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index fede2eb..16bbbd4 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -1,2 +1,4 @@ # EJERCICIO AUTÓNOMO 4: PORCENTAJES -# Enunciado: calcula el 15% de una cantidad. \ No newline at end of file +# Enunciado: calcula el 15% de una cantidad. + +num = input("Introduce un número: ") \ No newline at end of file From 4b784a1aeb08762be5c2ce9a60a781c610f1a53d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:00:49 +0100 Subject: [PATCH 163/323] feat: conversion 'num' a entero en 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index 16bbbd4..c25faed 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -1,4 +1,6 @@ # EJERCICIO AUTÓNOMO 4: PORCENTAJES # Enunciado: calcula el 15% de una cantidad. -num = input("Introduce un número: ") \ No newline at end of file +num = input("Introduce un número: ") + +num = int(num) \ No newline at end of file From adf12f9be0749121eda0cb337234ee26371d6eef Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:03:46 +0100 Subject: [PATCH 164/323] feat: declaracion variable porcentaje en 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index c25faed..74109a2 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -3,4 +3,6 @@ num = input("Introduce un número: ") -num = int(num) \ No newline at end of file +num = int(num) + +porcentaje = 0.15 \ No newline at end of file From d35d468a6c0c7eb99d7985c819385df28c63bc43 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:09:46 +0100 Subject: [PATCH 165/323] feat: declaracion variable resultado en 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index 74109a2..a8080fb 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -5,4 +5,6 @@ num = int(num) -porcentaje = 0.15 \ No newline at end of file +porcentaje = 0.15 + +resultado = num * porcentaje \ No newline at end of file From 61eb8f9698598ad4c1d57edc30023424fc8996a4 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:11:13 +0100 Subject: [PATCH 166/323] feat: imprimir resultado en 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index a8080fb..ab67667 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -7,4 +7,6 @@ porcentaje = 0.15 -resultado = num * porcentaje \ No newline at end of file +resultado = num * porcentaje + +print(f"15% de {num} --> {resultado}") \ No newline at end of file From 07990bf88e6469ccc1c98f384b3ed4ff15089e98 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:14:06 +0100 Subject: [PATCH 167/323] test: primer test en 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index ab67667..57af42c 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -9,4 +9,12 @@ resultado = num * porcentaje -print(f"15% de {num} --> {resultado}") \ No newline at end of file +print(f"15% de {num} --> {resultado}") + +# Primer test: introducir '20' como num cuando lo pide el programa +# Resultado al ejecutar 'python porcentajes.py': +# -------------------------- +# Introduce un número: 20 +# 15% de 20 --> 3.0 +# -------------------------- +# Éxito ✅ \ No newline at end of file From 65dfe0e45b8517f9e9c72973d222b4e2d8ea8e26 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:15:24 +0100 Subject: [PATCH 168/323] test: segundo test en 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index 57af42c..1c9b16e 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -11,10 +11,9 @@ print(f"15% de {num} --> {resultado}") -# Primer test: introducir '20' como num cuando lo pide el programa +# Segundo test: introducir 'Hola' como num cuando lo pide el programa # Resultado al ejecutar 'python porcentajes.py': # -------------------------- -# Introduce un número: 20 -# 15% de 20 --> 3.0 +# ERROR ❌ # -------------------------- -# Éxito ✅ \ No newline at end of file +# Motivo: ValueError: invalid literal for int() with base 10: 'Hola' \ No newline at end of file From 50f4ff991b08ced934d5f259b9dd49a8d06f1966 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:21:05 +0100 Subject: [PATCH 169/323] feat: try/except en 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index 1c9b16e..0820516 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -3,13 +3,17 @@ num = input("Introduce un número: ") -num = int(num) +try: + num = int(num) -porcentaje = 0.15 + porcentaje = 0.15 -resultado = num * porcentaje + resultado = num * porcentaje -print(f"15% de {num} --> {resultado}") + print(f"15% de {num} --> {resultado}") + +except ValueError: + print("Valor incorrecto. Por favor reinicie el programa.") # Segundo test: introducir 'Hola' como num cuando lo pide el programa # Resultado al ejecutar 'python porcentajes.py': From b344022d86557274821bc02c1d3dc55edbae43b1 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:22:00 +0100 Subject: [PATCH 170/323] test: tercer test en 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index 0820516..a038c2c 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -15,9 +15,10 @@ except ValueError: print("Valor incorrecto. Por favor reinicie el programa.") -# Segundo test: introducir 'Hola' como num cuando lo pide el programa +# Tercer test: introducir 'Hola' como num cuando lo pide el programa # Resultado al ejecutar 'python porcentajes.py': # -------------------------- -# ERROR ❌ +# Introduce un número: Hola +# Valor incorrecto. Por favor reinicie el programa. # -------------------------- -# Motivo: ValueError: invalid literal for int() with base 10: 'Hola' \ No newline at end of file +# Éxito ✅ \ No newline at end of file From 32ef50db7b06cf03eac9fce2ca4a47a3526ac455 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:24:44 +0100 Subject: [PATCH 171/323] docs: variable num 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index a038c2c..64f2b30 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -1,6 +1,7 @@ # EJERCICIO AUTÓNOMO 4: PORCENTAJES # Enunciado: calcula el 15% de una cantidad. +# Variable num al pedir un número entero num = input("Introduce un número: ") try: From edbd0670361f7f2f7f5cc4ce17507b664813be77 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:26:29 +0100 Subject: [PATCH 172/323] docs: try/except 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index 64f2b30..29ea428 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -4,7 +4,9 @@ # Variable num al pedir un número entero num = input("Introduce un número: ") +# Efecto try/except por si deja convertir la variable num a entero try: + num = int(num) porcentaje = 0.15 From a7b6394c038bbf161a57ef2e1a2f7716a37cfde2 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:27:21 +0100 Subject: [PATCH 173/323] docs: conversion num 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index 29ea428..3020481 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -6,7 +6,7 @@ # Efecto try/except por si deja convertir la variable num a entero try: - + # Convertir string num a int num num = int(num) porcentaje = 0.15 From 5a6a68e7badad3a072e76fb0bd840a5918427c89 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:28:03 +0100 Subject: [PATCH 174/323] docs: variable porcentaje 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index 3020481..4debb19 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -9,6 +9,7 @@ # Convertir string num a int num num = int(num) + # Variable porcentaje a calcular el 15% del numero dado porcentaje = 0.15 resultado = num * porcentaje From a8cc410b442fb0dc4e7373a2a93ebc91bf348875 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:29:00 +0100 Subject: [PATCH 175/323] docs: variable resultado 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index 4debb19..d77690c 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -12,6 +12,7 @@ # Variable porcentaje a calcular el 15% del numero dado porcentaje = 0.15 + # Variable resultado para calcular el resultado del 15% del numero dado resultado = num * porcentaje print(f"15% de {num} --> {resultado}") From a0e28b1948e92c5ad4b406b9b5a6bcc8155303b2 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:30:57 +0100 Subject: [PATCH 176/323] docs: impresion resultado 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index d77690c..6a86cbe 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -15,6 +15,7 @@ # Variable resultado para calcular el resultado del 15% del numero dado resultado = num * porcentaje + # Imprimir resultado del ejercicio print(f"15% de {num} --> {resultado}") except ValueError: From b7658431b537fc08eaaa7077ce127904db9e03a4 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:31:50 +0100 Subject: [PATCH 177/323] docs: mensaje error 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index 6a86cbe..01f71af 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -19,6 +19,7 @@ print(f"15% de {num} --> {resultado}") except ValueError: + # Si el valor introducido no es un número entero envía este error print("Valor incorrecto. Por favor reinicie el programa.") # Tercer test: introducir 'Hola' como num cuando lo pide el programa From 22ca1af13e79624464a4295240e3b641af3b6a9e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:32:55 +0100 Subject: [PATCH 178/323] test: cuarto test 'porcentajes.py' --- 02_estructuras/autonomos/porcentajes.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/02_estructuras/autonomos/porcentajes.py b/02_estructuras/autonomos/porcentajes.py index 01f71af..9cfe7a2 100644 --- a/02_estructuras/autonomos/porcentajes.py +++ b/02_estructuras/autonomos/porcentajes.py @@ -22,10 +22,10 @@ # Si el valor introducido no es un número entero envía este error print("Valor incorrecto. Por favor reinicie el programa.") -# Tercer test: introducir 'Hola' como num cuando lo pide el programa +# Cuarto test: introducir '100' como num cuando lo pide el programa # Resultado al ejecutar 'python porcentajes.py': # -------------------------- -# Introduce un número: Hola -# Valor incorrecto. Por favor reinicie el programa. +# Introduce un número: 100 +# 15% de 100 --> 15.0 # -------------------------- # Éxito ✅ \ No newline at end of file From 30d949ef5db975c532442b33dfb5e205e9ba4231 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:37:17 +0100 Subject: [PATCH 179/323] feat: agregar desafio 'bigotes_felices.py' en 02_estructuras --- 02_estructuras/desafio/bigotes_felices.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 02_estructuras/desafio/bigotes_felices.py diff --git a/02_estructuras/desafio/bigotes_felices.py b/02_estructuras/desafio/bigotes_felices.py new file mode 100644 index 0000000..e69de29 From 340fc8cb04f29caaa1717339ef58a0b7745be1a8 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:37:48 +0100 Subject: [PATCH 180/323] docs: enunciado 'bigotes_felices.py' en 02_estructuras --- 02_estructuras/desafio/bigotes_felices.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/02_estructuras/desafio/bigotes_felices.py b/02_estructuras/desafio/bigotes_felices.py index e69de29..015d939 100644 --- a/02_estructuras/desafio/bigotes_felices.py +++ b/02_estructuras/desafio/bigotes_felices.py @@ -0,0 +1,3 @@ +# DESAFIO: Bigotes Felices (pesaje) +# Enunciado: Pide el peso de tres gatos y calcula el promedio. +# Valida entradas numéricas. \ No newline at end of file From ea2448a4df532b128793b9bc532deedbdaf5b962 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:39:04 +0100 Subject: [PATCH 181/323] fix: renombrar 'bigotes_felices.py' a 'pesaje.py' en 02_estructuras --- 02_estructuras/desafio/{bigotes_felices.py => pesaje.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 02_estructuras/desafio/{bigotes_felices.py => pesaje.py} (100%) diff --git a/02_estructuras/desafio/bigotes_felices.py b/02_estructuras/desafio/pesaje.py similarity index 100% rename from 02_estructuras/desafio/bigotes_felices.py rename to 02_estructuras/desafio/pesaje.py From c376ec7d05f3518f46662327226ee81310fa02d4 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:49:23 +0100 Subject: [PATCH 182/323] feat: declaracion variables gato1, gato2 y gato3 en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index 015d939..d8bc311 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -1,3 +1,7 @@ # DESAFIO: Bigotes Felices (pesaje) # Enunciado: Pide el peso de tres gatos y calcula el promedio. -# Valida entradas numéricas. \ No newline at end of file +# Valida entradas numéricas. + +gato1 = input("Introduce el peso del primer gato: ") +gato2 = input("Introduce el peso del segundo gato: ") +gato3 = input("Introduce el peso del tercer gato: ") \ No newline at end of file From 8a58cb2ffd32728de6e9a756fbfa69af3a22050b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:53:32 +0100 Subject: [PATCH 183/323] feat: conversion a enteros las variables anteriores en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index d8bc311..dfda11b 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -4,4 +4,8 @@ gato1 = input("Introduce el peso del primer gato: ") gato2 = input("Introduce el peso del segundo gato: ") -gato3 = input("Introduce el peso del tercer gato: ") \ No newline at end of file +gato3 = input("Introduce el peso del tercer gato: ") + +gato1 = int(gato1) +gato2 = int(gato2) +gato3 = int(gato3) \ No newline at end of file From f770a7f679290dcaee87f24febaa17585c480a8a Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:54:40 +0100 Subject: [PATCH 184/323] feat: declaracion variable promedio en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index dfda11b..b885a14 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -8,4 +8,6 @@ gato1 = int(gato1) gato2 = int(gato2) -gato3 = int(gato3) \ No newline at end of file +gato3 = int(gato3) + +promedio = (gato1 + gato2 + gato3) / 3 \ No newline at end of file From 031743ea7d8a67d0738c8f2e39181b876c938d43 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 20:57:30 +0100 Subject: [PATCH 185/323] feat: imprimir pesaje de gatos en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index b885a14..c014081 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -10,4 +10,10 @@ gato2 = int(gato2) gato3 = int(gato3) -promedio = (gato1 + gato2 + gato3) / 3 \ No newline at end of file +promedio = (gato1 + gato2 + gato3) / 3 + +print(f"Pesaje de los gatos: ") +print(f"Gato nº1: {gato1} kg") +print(f"Gato nº2: {gato2} kg") +print(f"Gato nº3: {gato3} kg") +print(f"Calculo promedio de los 3 gatos: {promedio}") \ No newline at end of file From 2d0dd6f458632b1e999d7a212395c28b195a355d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:01:01 +0100 Subject: [PATCH 186/323] test: primer test 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index c014081..f6c0d0c 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -16,4 +16,18 @@ print(f"Gato nº1: {gato1} kg") print(f"Gato nº2: {gato2} kg") print(f"Gato nº3: {gato3} kg") -print(f"Calculo promedio de los 3 gatos: {promedio}") \ No newline at end of file +print(f"Calculo promedio de los 3 gatos: {promedio}") + +# Primer test: introducir '10', '20' y '30' respectivamente cuando le pida el programa +# Resultado al ejecutar 'python pesaje.py': +# --------------------------------------- +# Introduce el peso del primer gato: 10 +# Introduce el peso del segundo gato: 20 +# Introduce el peso del tercer gato: 30 +# Pesaje de los gatos: +# Gato nº1: 10 kg +# Gato nº2: 20 kg +# Gato nº3: 30 kg +# Calculo promedio de los 3 gatos: 20.0 +# --------------------------------------- +# Éxito ✅ \ No newline at end of file From 97ccfa3bd454cf1245c14ffdc0f96209bd835bc8 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:03:23 +0100 Subject: [PATCH 187/323] test: segundo test 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index f6c0d0c..8ae37f6 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -18,16 +18,16 @@ print(f"Gato nº3: {gato3} kg") print(f"Calculo promedio de los 3 gatos: {promedio}") -# Primer test: introducir '10', '20' y '30' respectivamente cuando le pida el programa +# Segundo test: introducir 'hola', 'que' y 'cachopo' respectivamente cuando le pida el programa # Resultado al ejecutar 'python pesaje.py': # --------------------------------------- -# Introduce el peso del primer gato: 10 -# Introduce el peso del segundo gato: 20 -# Introduce el peso del tercer gato: 30 -# Pesaje de los gatos: -# Gato nº1: 10 kg -# Gato nº2: 20 kg -# Gato nº3: 30 kg -# Calculo promedio de los 3 gatos: 20.0 +# Introduce el peso del primer gato: hola +# Introduce el peso del segundo gato: que +# Introduce el peso del tercer gato: cachopo +# Traceback (most recent call last): +# File "C:\Users\Propietario\Documents\Archivos\Repositorios\python-fundamentos\02_estructuras\desafio\pesaje.py", line 9, in +# gato1 = int(gato1) +# ValueError: invalid literal for int() with base 10: 'hola' # --------------------------------------- -# Éxito ✅ \ No newline at end of file +# ERROR ❌ +# Motivo: ValueError \ No newline at end of file From 19a1c0de8510e3d2e2c1a26af7c57926990e3b2f Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:05:28 +0100 Subject: [PATCH 188/323] feat: try/except en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index 8ae37f6..9bbed2c 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -6,17 +6,21 @@ gato2 = input("Introduce el peso del segundo gato: ") gato3 = input("Introduce el peso del tercer gato: ") -gato1 = int(gato1) -gato2 = int(gato2) -gato3 = int(gato3) +try: + gato1 = int(gato1) + gato2 = int(gato2) + gato3 = int(gato3) -promedio = (gato1 + gato2 + gato3) / 3 + promedio = (gato1 + gato2 + gato3) / 3 -print(f"Pesaje de los gatos: ") -print(f"Gato nº1: {gato1} kg") -print(f"Gato nº2: {gato2} kg") -print(f"Gato nº3: {gato3} kg") -print(f"Calculo promedio de los 3 gatos: {promedio}") + print(f"Pesaje de los gatos: ") + print(f"Gato nº1: {gato1} kg") + print(f"Gato nº2: {gato2} kg") + print(f"Gato nº3: {gato3} kg") + print(f"Calculo promedio de los 3 gatos: {promedio}") + +except ValueError: + print(f"Error al introducir los datos. Por favor, vuelva a iniciar el pesaje.") # Segundo test: introducir 'hola', 'que' y 'cachopo' respectivamente cuando le pida el programa # Resultado al ejecutar 'python pesaje.py': From 6ba169be0ee85bc7bdff1148ed95b2e9d3d21e31 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:07:08 +0100 Subject: [PATCH 189/323] test: tercer test 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index 9bbed2c..6f001eb 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -22,16 +22,12 @@ except ValueError: print(f"Error al introducir los datos. Por favor, vuelva a iniciar el pesaje.") -# Segundo test: introducir 'hola', 'que' y 'cachopo' respectivamente cuando le pida el programa +# Tercer test: introducir 'hola', 'que' y 'cachopo' respectivamente cuando le pida el programa # Resultado al ejecutar 'python pesaje.py': # --------------------------------------- # Introduce el peso del primer gato: hola # Introduce el peso del segundo gato: que # Introduce el peso del tercer gato: cachopo -# Traceback (most recent call last): -# File "C:\Users\Propietario\Documents\Archivos\Repositorios\python-fundamentos\02_estructuras\desafio\pesaje.py", line 9, in -# gato1 = int(gato1) -# ValueError: invalid literal for int() with base 10: 'hola' +# Error al introducir los datos. Por favor, vuelva a iniciar el pesaje. # --------------------------------------- -# ERROR ❌ -# Motivo: ValueError \ No newline at end of file +# Éxito ✅ \ No newline at end of file From fe80752b30d9ff0cc3235e75eef47bbe1a0941cb Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:08:45 +0100 Subject: [PATCH 190/323] docs: variables gato1, gato2 y gato3 en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index 6f001eb..f6b9db3 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -2,8 +2,11 @@ # Enunciado: Pide el peso de tres gatos y calcula el promedio. # Valida entradas numéricas. +# Variable gato1 al pedir al usuario el peso del 1º gato gato1 = input("Introduce el peso del primer gato: ") +# Variable gato2 al pedir al usuario el peso del 2º gato gato2 = input("Introduce el peso del segundo gato: ") +# Variable gato3 al pedir al usuario el peso del 3º gato gato3 = input("Introduce el peso del tercer gato: ") try: From a1b54cd3b718b266a89937f0eb860a110c747621 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:09:35 +0100 Subject: [PATCH 191/323] docs: try/except en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index f6b9db3..87d8507 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -9,6 +9,7 @@ # Variable gato3 al pedir al usuario el peso del 3º gato gato3 = input("Introduce el peso del tercer gato: ") +# Try/except para verificar si los datos introducidos son números enteros try: gato1 = int(gato1) gato2 = int(gato2) From 7a683b239e43ea9d6764273cbc4c0ebdab642396 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:10:45 +0100 Subject: [PATCH 192/323] docs: conversion variables en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index 87d8507..3eb2aad 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -11,8 +11,11 @@ # Try/except para verificar si los datos introducidos son números enteros try: + # Intentamos convertir gato1 en número entero gato1 = int(gato1) + # Intentamos convertir gato2 en número entero gato2 = int(gato2) + # Intentamos convertir gato3 en número entero gato3 = int(gato3) promedio = (gato1 + gato2 + gato3) / 3 From c3bce89431f9b76b2343b680ef4dc7b59a72a069 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:11:42 +0100 Subject: [PATCH 193/323] docs: variable promedio en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index 3eb2aad..5b8394c 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -18,6 +18,7 @@ # Intentamos convertir gato3 en número entero gato3 = int(gato3) + # Variable promedio para calcular el peso promedio de los 3 gatos promedio = (gato1 + gato2 + gato3) / 3 print(f"Pesaje de los gatos: ") From 099cc9c874470a3ea6ea8166b74f80b5e4042d40 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:14:09 +0100 Subject: [PATCH 194/323] docs: imprimir resultado en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index 5b8394c..65bfffe 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -21,10 +21,15 @@ # Variable promedio para calcular el peso promedio de los 3 gatos promedio = (gato1 + gato2 + gato3) / 3 + # Imprimir titulo del pesaje de los gatos print(f"Pesaje de los gatos: ") + # Imprimir peso del gato nº1 print(f"Gato nº1: {gato1} kg") + # Imprimir peso del gato nº2 print(f"Gato nº2: {gato2} kg") + # Imprimir peso del gato nº3 print(f"Gato nº3: {gato3} kg") + # Imprimir peso promedio de los 3 gatos print(f"Calculo promedio de los 3 gatos: {promedio}") except ValueError: From 8aa732c3b185d2fdfd8c93442423d6781d692967 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:16:08 +0100 Subject: [PATCH 195/323] docs: mensaje error en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index 65bfffe..a5a13e9 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -32,7 +32,9 @@ # Imprimir peso promedio de los 3 gatos print(f"Calculo promedio de los 3 gatos: {promedio}") +# Metodo except por si el dato introducido no es un número entero except ValueError: + # Si uno de los 3 valores pedidos no es un número entero mostrará este mensaje de error print(f"Error al introducir los datos. Por favor, vuelva a iniciar el pesaje.") # Tercer test: introducir 'hola', 'que' y 'cachopo' respectivamente cuando le pida el programa From e67488aa9af8c125e009393e82fe2a72582f6af5 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:19:55 +0100 Subject: [PATCH 196/323] test: cuarto test en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index a5a13e9..ef6ca32 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -37,12 +37,16 @@ # Si uno de los 3 valores pedidos no es un número entero mostrará este mensaje de error print(f"Error al introducir los datos. Por favor, vuelva a iniciar el pesaje.") -# Tercer test: introducir 'hola', 'que' y 'cachopo' respectivamente cuando le pida el programa +# Cuarto test: introducir '12', '34' y '40' respectivamente cuando le pida el programa # Resultado al ejecutar 'python pesaje.py': # --------------------------------------- -# Introduce el peso del primer gato: hola -# Introduce el peso del segundo gato: que -# Introduce el peso del tercer gato: cachopo -# Error al introducir los datos. Por favor, vuelva a iniciar el pesaje. +# Introduce el peso del primer gato: 12 +# Introduce el peso del segundo gato: 34 +# Introduce el peso del tercer gato: 40 +# Pesaje de los gatos: +# Gato nº1: 12 kg +# Gato nº2: 34 kg +# Gato nº3: 40 kg +# Calculo promedio de los 3 gatos: 28.666666666666668 # --------------------------------------- -# Éxito ✅ \ No newline at end of file +# Éxito, pero le falta redondear promedio a 3 decimales✅ \ No newline at end of file From 4ed43767b9448effdfa9fdc55b330a69409987b7 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:21:49 +0100 Subject: [PATCH 197/323] feat: redondeo de promedio en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index ef6ca32..27032e9 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -21,6 +21,9 @@ # Variable promedio para calcular el peso promedio de los 3 gatos promedio = (gato1 + gato2 + gato3) / 3 + + promedio = round(promedio, 3) + # Imprimir titulo del pesaje de los gatos print(f"Pesaje de los gatos: ") # Imprimir peso del gato nº1 From c30d12fc894f500cc93ce6e4b58d186bc4e34246 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:23:14 +0100 Subject: [PATCH 198/323] docs: redondeo de promedio en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index 27032e9..ac22425 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -21,7 +21,7 @@ # Variable promedio para calcular el peso promedio de los 3 gatos promedio = (gato1 + gato2 + gato3) / 3 - + # Volver a declarar variable promedio para redondear a 3 decimales con la funcion round() promedio = round(promedio, 3) # Imprimir titulo del pesaje de los gatos From 6d225500ebaf00243af130248e792c1e9ea73c9f Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:24:54 +0100 Subject: [PATCH 199/323] test: quinto test en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index ac22425..f627c59 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -40,7 +40,7 @@ # Si uno de los 3 valores pedidos no es un número entero mostrará este mensaje de error print(f"Error al introducir los datos. Por favor, vuelva a iniciar el pesaje.") -# Cuarto test: introducir '12', '34' y '40' respectivamente cuando le pida el programa +# Quinto test: introducir '12', '34' y '40' respectivamente cuando le pida el programa # Resultado al ejecutar 'python pesaje.py': # --------------------------------------- # Introduce el peso del primer gato: 12 @@ -50,6 +50,6 @@ # Gato nº1: 12 kg # Gato nº2: 34 kg # Gato nº3: 40 kg -# Calculo promedio de los 3 gatos: 28.666666666666668 +# Calculo promedio de los 3 gatos: 28.667 # --------------------------------------- -# Éxito, pero le falta redondear promedio a 3 decimales✅ \ No newline at end of file +# Éxito ✅ \ No newline at end of file From ffc71a99be0ebfdc262e34cdffb8fed46cef682c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:26:06 +0100 Subject: [PATCH 200/323] =?UTF-8?q?fix:=20correccion=20en=20=C3=BAltimo=20?= =?UTF-8?q?print=20que=20muestra=20promedio=20en=20'pesaje.py'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02_estructuras/desafio/pesaje.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index f627c59..152ec46 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -33,7 +33,7 @@ # Imprimir peso del gato nº3 print(f"Gato nº3: {gato3} kg") # Imprimir peso promedio de los 3 gatos - print(f"Calculo promedio de los 3 gatos: {promedio}") + print(f"Calculo promedio de los 3 gatos: {promedio} kg") # Metodo except por si el dato introducido no es un número entero except ValueError: From a2e4a9fddc25f64007a05eb719fd08c65a17fc1e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 30 Oct 2025 21:27:37 +0100 Subject: [PATCH 201/323] test: repetir quinto test en 'pesaje.py' --- 02_estructuras/desafio/pesaje.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_estructuras/desafio/pesaje.py b/02_estructuras/desafio/pesaje.py index 152ec46..1ec26df 100644 --- a/02_estructuras/desafio/pesaje.py +++ b/02_estructuras/desafio/pesaje.py @@ -50,6 +50,6 @@ # Gato nº1: 12 kg # Gato nº2: 34 kg # Gato nº3: 40 kg -# Calculo promedio de los 3 gatos: 28.667 +# Calculo promedio de los 3 gatos: 28.667 kg # --------------------------------------- # Éxito ✅ \ No newline at end of file From 52d54bf80f0153eadbcb90c370e4d141d56176f8 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 31 Oct 2025 09:51:27 +0100 Subject: [PATCH 202/323] feat: agregar guia ejercicio calculadora en 01_intro --- 01_intro/ejercicio_guiado/GUIA.md | 64 +++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 01_intro/ejercicio_guiado/GUIA.md diff --git a/01_intro/ejercicio_guiado/GUIA.md b/01_intro/ejercicio_guiado/GUIA.md new file mode 100644 index 0000000..65d8e17 --- /dev/null +++ b/01_intro/ejercicio_guiado/GUIA.md @@ -0,0 +1,64 @@ +# 🎯 La Calculadora que Crece - Versión 1 + +Bienvenid@ al primer paso de un ejercicio que te acompañará durante todo el curso. En esta versión construirás una calculadora muy simple que solo sabe sumar. + +## 🎓 Qué aprenderás + +En este módulo estamos aprendiendo: +- ✅ Variables +- ✅ Entrada con `input()` +- ✅ Salida con `print()` +- ✅ Conversión de tipos (`int()`, `float()`) + +## 🎯 Objetivo de la v1 + +Crear un programa que: +1. Pida al usuario dos números +2. Los sume +3. Muestre el resultado + +**Ejemplo de ejecución:** +``` +Ingresa el primer número: 5 +Ingresa el segundo número: 3 +El resultado es: 8 +``` + +## 📝 Instrucciones + +1. Abre el archivo `calculadora_v1.py` +2. Encontrarás comentarios con instrucciones paso a paso +3. Completa el código siguiendo las pistas +4. Ejecuta y prueba tu programa + +## ✅ Cómo probar tu código + +Ejecuta el programa: +```powershell +python calculadora_v1.py +``` + +Prueba con diferentes números: +- Números positivos: `5` y `3` → debe dar `8` +- Números negativos: `-2` y `7` → debe dar `5` +- Decimales: `3.5` y `2.5` → debe dar `6.0` + +## 🚀 ¿Terminaste? + +¡Genial! Guarda tu trabajo con un commit: +```bash +git add 01_intro/ejercicio_guiado/calculadora_v1.py +git commit -m "feat: completar calculadora v1 - suma básica" +``` + +Cuando llegues al módulo 02, continuarás mejorando esta calculadora añadiendo más operaciones. ¡Cada módulo añade nuevas funcionalidades! + +## 💡 Tips + +- Usa `float()` en lugar de `int()` para permitir decimales +- Recuerda que `input()` siempre devuelve texto (string) +- Si tienes dudas, consulta [`cheatsheets/01_intro.md`](../../cheatsheets/01_intro.md) + +--- + +**Siguiente versión**: [`02_estructuras/ejercicio_guiado/GUIA.md`](../../02_estructuras/ejercicio_guiado/GUIA.md) - Añadirás las 4 operaciones básicas \ No newline at end of file From 5d7ea874bb733e20ccac1ba9666a3f86e6624bc2 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 31 Oct 2025 09:52:53 +0100 Subject: [PATCH 203/323] feat: agregar calculadora_v1.py en 01_intro --- 01_intro/ejercicio_guiado/calculadora_v1.py | 48 +++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 01_intro/ejercicio_guiado/calculadora_v1.py diff --git a/01_intro/ejercicio_guiado/calculadora_v1.py b/01_intro/ejercicio_guiado/calculadora_v1.py new file mode 100644 index 0000000..c3667b4 --- /dev/null +++ b/01_intro/ejercicio_guiado/calculadora_v1.py @@ -0,0 +1,48 @@ +""" +Calculadora v1 - Suma básica +============================= + +En esta primera versión crearás una calculadora simple que solo suma dos números. + +Conceptos aplicados: +- Variables +- input() para leer datos del usuario +- print() para mostrar resultados +- Conversión de tipos (float()) + +Instrucciones: +1. Pide al usuario el primer número +2. Pide al usuario el segundo número +3. Convierte ambos a números decimales (float) +4. Suma los dos números +5. Muestra el resultado +""" + +# TODO 1: Pide el primer número al usuario +# Pista: usa input() y guarda el valor en una variable +# primer_numero = ... + + +# TODO 2: Pide el segundo número al usuario +# segundo_numero = ... + + +# TODO 3: Convierte los strings a números decimales +# Pista: usa float() para permitir decimales (ej: 3.5) +# num1 = float(primer_numero) +# num2 = ... + + +# TODO 4: Realiza la suma +# resultado = ... + + +# TODO 5: Muestra el resultado +# Pista: print("El resultado es:", resultado) + + +# ¡Ya está! Ejecuta el programa y prueba con diferentes números +# Ejemplos para probar: +# - 5 y 3 → debe dar 8 +# - -2 y 7 → debe dar 5 +# - 3.5 y 2.5 → debe dar 6.0 \ No newline at end of file From 3c61dd85776bf950f573f77e2ca053d91e8d4386 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 31 Oct 2025 09:54:39 +0100 Subject: [PATCH 204/323] =?UTF-8?q?feat:=20a=C3=B1adir=20enunciado=20calcu?= =?UTF-8?q?ladora=20en=20ejercicios.md=20en=2001=5Fintro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/ejercicios.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/01_intro/ejercicios.md b/01_intro/ejercicios.md index f1845f2..c1e61d2 100644 --- a/01_intro/ejercicios.md +++ b/01_intro/ejercicios.md @@ -2,6 +2,16 @@ Tiempo estimado: 2–3h +--- + +## 🎯 Ejercicio guiado: La Calculadora que Crece (v1) + +Ejercicio progresivo que evoluciona en cada módulo. En esta versión: calculadora básica con suma. + +👉 **[Ver guía completa: ejercicio_guiado/GUIA.md](./ejercicio_guiado/GUIA.md)** + +--- + ## Guiado 1: Tu primer script Objetivo: imprimir un saludo y una variable. From f78b7ee4fb1b21ee00a4503107acb24d038a1e19 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 31 Oct 2025 12:15:32 +0100 Subject: [PATCH 205/323] feat: declaracion variable 'primer_numero' en 'calculadora_v1.py' --- 01_intro/ejercicio_guiado/calculadora_v1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01_intro/ejercicio_guiado/calculadora_v1.py b/01_intro/ejercicio_guiado/calculadora_v1.py index c3667b4..efa3337 100644 --- a/01_intro/ejercicio_guiado/calculadora_v1.py +++ b/01_intro/ejercicio_guiado/calculadora_v1.py @@ -21,7 +21,7 @@ # TODO 1: Pide el primer número al usuario # Pista: usa input() y guarda el valor en una variable # primer_numero = ... - +primer_numero = input("Ingrese un número: ") # TODO 2: Pide el segundo número al usuario # segundo_numero = ... From 1ac032d32cffe91135810d52872bc696d9713874 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 31 Oct 2025 12:16:18 +0100 Subject: [PATCH 206/323] feat: declaracion variable 'segundo_numero' en 'calculadora_v1.py' --- 01_intro/ejercicio_guiado/calculadora_v1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01_intro/ejercicio_guiado/calculadora_v1.py b/01_intro/ejercicio_guiado/calculadora_v1.py index efa3337..86a12ce 100644 --- a/01_intro/ejercicio_guiado/calculadora_v1.py +++ b/01_intro/ejercicio_guiado/calculadora_v1.py @@ -25,7 +25,7 @@ # TODO 2: Pide el segundo número al usuario # segundo_numero = ... - +segundo_numero = input("Ingrese otro número: ") # TODO 3: Convierte los strings a números decimales # Pista: usa float() para permitir decimales (ej: 3.5) From 213649763e62b3088a7b9cb2e86cf05f08fa7f3f Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 31 Oct 2025 12:18:27 +0100 Subject: [PATCH 207/323] feat: conversion a float las variables declaradas en 'calculadora_v1.py' --- 01_intro/ejercicio_guiado/calculadora_v1.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/01_intro/ejercicio_guiado/calculadora_v1.py b/01_intro/ejercicio_guiado/calculadora_v1.py index 86a12ce..8fc8f78 100644 --- a/01_intro/ejercicio_guiado/calculadora_v1.py +++ b/01_intro/ejercicio_guiado/calculadora_v1.py @@ -31,7 +31,8 @@ # Pista: usa float() para permitir decimales (ej: 3.5) # num1 = float(primer_numero) # num2 = ... - +num_float1 = float(primer_numero) +num_float2 = float(segundo_numero) # TODO 4: Realiza la suma # resultado = ... From b51c73eb43c06b67adab8b04578d7e9efbb46d63 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 31 Oct 2025 12:18:59 +0100 Subject: [PATCH 208/323] feat: declaracion variable 'resultado' en 'calculadora_v1.py' --- 01_intro/ejercicio_guiado/calculadora_v1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01_intro/ejercicio_guiado/calculadora_v1.py b/01_intro/ejercicio_guiado/calculadora_v1.py index 8fc8f78..a7b906e 100644 --- a/01_intro/ejercicio_guiado/calculadora_v1.py +++ b/01_intro/ejercicio_guiado/calculadora_v1.py @@ -36,7 +36,7 @@ # TODO 4: Realiza la suma # resultado = ... - +resultado = num_float1 + num_float2 # TODO 5: Muestra el resultado # Pista: print("El resultado es:", resultado) From c95162b158e0a004f6710688c45a9b20a914d4a0 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 31 Oct 2025 12:21:02 +0100 Subject: [PATCH 209/323] feat: imprimir resultado en consola en 'calculadora_v1.py' --- 01_intro/ejercicio_guiado/calculadora_v1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01_intro/ejercicio_guiado/calculadora_v1.py b/01_intro/ejercicio_guiado/calculadora_v1.py index a7b906e..eefa16f 100644 --- a/01_intro/ejercicio_guiado/calculadora_v1.py +++ b/01_intro/ejercicio_guiado/calculadora_v1.py @@ -40,7 +40,7 @@ # TODO 5: Muestra el resultado # Pista: print("El resultado es:", resultado) - +print(f"{num_float1} + {num_float2} = {resultado}") # ¡Ya está! Ejecuta el programa y prueba con diferentes números # Ejemplos para probar: From 981f103712627c5c301d595b1f64da67ea02b14e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 31 Oct 2025 12:24:14 +0100 Subject: [PATCH 210/323] =?UTF-8?q?feat:=20completada=20calculadora=20v1?= =?UTF-8?q?=20-=20suma=20b=C3=A1sica?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_intro/ejercicio_guiado/calculadora_v1.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/01_intro/ejercicio_guiado/calculadora_v1.py b/01_intro/ejercicio_guiado/calculadora_v1.py index eefa16f..18d4fd0 100644 --- a/01_intro/ejercicio_guiado/calculadora_v1.py +++ b/01_intro/ejercicio_guiado/calculadora_v1.py @@ -46,4 +46,12 @@ # Ejemplos para probar: # - 5 y 3 → debe dar 8 # - -2 y 7 → debe dar 5 -# - 3.5 y 2.5 → debe dar 6.0 \ No newline at end of file +# - 3.5 y 2.5 → debe dar 6.0 +# +# Prueba: +# Comando a ejecutar: 'python calculadora_v1.py' +# Resultado: +# Ingrese un número: 4 +# Ingrese otro número: 9 +# 4.0 + 9.0 = 13.0 +# Éxito ✅ \ No newline at end of file From 50e79a5ffd58d6e3b8b983977bef04c9b9441294 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 31 Oct 2025 12:58:40 +0100 Subject: [PATCH 211/323] feat: agregar calculadora v2 en 02_estructuras --- 02_estructuras/ejercicio_guiado/GUIA.md | 0 02_estructuras/ejercicio_guiado/calculadora_v2.py | 0 02_estructuras/ejercicios.md | 10 ++++++++++ 3 files changed, 10 insertions(+) create mode 100644 02_estructuras/ejercicio_guiado/GUIA.md create mode 100644 02_estructuras/ejercicio_guiado/calculadora_v2.py diff --git a/02_estructuras/ejercicio_guiado/GUIA.md b/02_estructuras/ejercicio_guiado/GUIA.md new file mode 100644 index 0000000..e69de29 diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py new file mode 100644 index 0000000..e69de29 diff --git a/02_estructuras/ejercicios.md b/02_estructuras/ejercicios.md index 171aa85..ea4b87e 100644 --- a/02_estructuras/ejercicios.md +++ b/02_estructuras/ejercicios.md @@ -2,6 +2,16 @@ Tiempo estimado: 3–4h +--- + +## 🎯 Ejercicio guiado: La Calculadora que Crece (v2) + +Evolución de la calculadora: añade las 4 operaciones básicas y usa f-strings. + +👉 **[Ver guía completa: ejercicio_guiado/GUIA.md](./ejercicio_guiado/GUIA.md)** + +--- + ## Guiado 1: Operaciones numéricas Paso 1: Crea `operaciones.py` y define `a=10`, `b=3`. Paso 2: Calcula suma, resta, multiplicación y división. From 3cca74876f97aad5214ca92f8d2a910bc58c2673 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 31 Oct 2025 12:59:52 +0100 Subject: [PATCH 212/323] =?UTF-8?q?feat:=20a=C3=B1adir=20contenido=20calcu?= =?UTF-8?q?ladora=20v2=20en=2002=5Festructuras?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02_estructuras/ejercicio_guiado/GUIA.md | 82 +++++++++++++++++++ .../ejercicio_guiado/calculadora_v2.py | 65 +++++++++++++++ 2 files changed, 147 insertions(+) diff --git a/02_estructuras/ejercicio_guiado/GUIA.md b/02_estructuras/ejercicio_guiado/GUIA.md index e69de29..5a49942 100644 --- a/02_estructuras/ejercicio_guiado/GUIA.md +++ b/02_estructuras/ejercicio_guiado/GUIA.md @@ -0,0 +1,82 @@ +# 🎯 La Calculadora que Crece - Versión 2 + +¡Bienvenid@ de nuevo! En esta versión expandirás tu calculadora para que pueda hacer las cuatro operaciones básicas: suma, resta, multiplicación y división. + +## 🎓 Qué aprenderás + +En este módulo estamos aprendiendo: +- ✅ Operadores aritméticos (`+`, `-`, `*`, `/`) +- ✅ F-strings para formateo elegante +- ✅ Tipos numéricos (int vs float) +- ✅ Condicionales if/elif/else + +## 🎯 Objetivo de la v2 + +Mejorar tu calculadora para que: +1. Pida dos números al usuario +2. Pregunte qué operación realizar (+, -, *, /) +3. Realice la operación correspondiente +4. Muestre el resultado con formato profesional usando f-strings + +**Ejemplo de ejecución:** +``` +Ingresa el primer número: 10 +Ingresa el segundo número: 3 +¿Qué operación deseas realizar? (+, -, *, /): / +El resultado de 10.0 / 3.0 = 3.33 +``` + +## 📝 Instrucciones + +1. Abre el archivo `calculadora_v2.py` +2. Encontrarás comentarios con instrucciones paso a paso +3. Completa el código siguiendo las pistas +4. Ejecuta y prueba tu programa con las 4 operaciones + +## ✅ Cómo probar tu código + +Ejecuta el programa: +```powershell +python calculadora_v2.py +``` + +Prueba cada operación: +- **Suma**: `5 + 3` → debe dar `8.0` +- **Resta**: `10 - 4` → debe dar `6.0` +- **Multiplicación**: `7 * 2` → debe dar `14.0` +- **División**: `10 / 3` → debe dar `3.33` (o similar) + +## 🆚 Cambios respecto a la v1 + +| Aspecto | v1 | v2 | +|---------|----|----| +| Operaciones | Solo suma | 4 operaciones básicas | +| Output | `print()` simple | F-strings con formato | +| Lógica | Directa | If/elif para elegir operación | + +## 🚀 ¿Terminaste? + +¡Excelente! Guarda tu trabajo: +```bash +git add 02_estructuras/ejercicio_guiado/calculadora_v2.py +git commit -m "feat: completar calculadora v2 - cuatro operaciones básicas" +``` + +En el módulo 03 añadirás un menú interactivo que se repite hasta que el usuario decida salir. + +## 💡 Tips + +- Usa if/elif/else para decidir qué operación hacer +- Los f-strings te permiten interpolar variables: `f"Resultado: {resultado}"` +- Puedes formatear decimales así: `f"{numero:.2f}"` (2 decimales) +- ¿Qué pasa si divides por cero? Por ahora Python mostrará un error, lo arreglaremos en v3 + +## 📚 Recursos + +- Consulta [`cheatsheets/02_estructuras.md`](../../cheatsheets/02_estructuras.md) para más sobre f-strings +- Revisa la sección de operadores aritméticos + +--- + +**Versión anterior**: [`01_intro/ejercicio_guiado/GUIA.md`](../../01_intro/ejercicio_guiado/GUIA.md) +**Siguiente versión**: [`03_control_flujo/ejercicio_guiado/GUIA.md`](../../03_control_flujo/ejercicio_guiado/GUIA.md) - Añadirás menú con bucles \ No newline at end of file diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py index e69de29..03ec6e7 100644 --- a/02_estructuras/ejercicio_guiado/calculadora_v2.py +++ b/02_estructuras/ejercicio_guiado/calculadora_v2.py @@ -0,0 +1,65 @@ +""" +Calculadora v2 - Cuatro operaciones básicas +============================================ + +En esta segunda versión expandirás la calculadora para que pueda realizar +las cuatro operaciones básicas: suma, resta, multiplicación y división. + +Conceptos aplicados: +- Operadores aritméticos (+, -, *, /) +- Condicionales if/elif/else +- F-strings para formateo profesional +- Manejo básico de tipos numéricos + +Instrucciones: +1. Pide dos números al usuario +2. Pregunta qué operación desea realizar +3. Usa if/elif/else para realizar la operación correspondiente +4. Muestra el resultado con f-strings formateados +""" + +# TODO 1: Pide el primer número al usuario y conviértelo a float +# num1 = ... + + +# TODO 2: Pide el segundo número al usuario y conviértelo a float +# num2 = ... + + +# TODO 3: Pregunta qué operación desea realizar +# Pista: input("¿Qué operación deseas realizar? (+, -, *, /): ") +# operacion = ... + + +# TODO 4: Realiza la operación correspondiente usando if/elif/else +# Pista: Compara la variable 'operacion' con "+", "-", "*", "/" +# +# if operacion == "+": +# resultado = num1 + num2 +# elif operacion == "-": +# ... +# elif operacion == "*": +# ... +# elif operacion == "/": +# ... +# else: +# print("❌ Operación no válida") + + +# TODO 5: Muestra el resultado usando f-strings +# Pista: f"El resultado de {num1} {operacion} {num2} = {resultado:.2f}" +# El :.2f muestra solo 2 decimales +# print(f"...") + + +# ¡Perfecto! Ahora tu calculadora puede hacer las 4 operaciones básicas +# +# Ejemplos para probar: +# - 10 + 5 → debe dar 15.00 +# - 10 - 3 → debe dar 7.00 +# - 4 * 5 → debe dar 20.00 +# - 10 / 3 → debe dar 3.33 +# - 10 % 3 → (si pruebas una operación no válida, debe mostrar mensaje de error) +# +# 💡 Nota: Si intentas dividir por cero (10 / 0), Python mostrará un error. +# Esto lo arreglaremos en la v3 con validación de entrada. \ No newline at end of file From e7113c160206c282b03a068f2bc2852f40d6bca7 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 2 Nov 2025 21:34:14 +0100 Subject: [PATCH 213/323] feat: declarar variable num1 y convertirlo a float en 'calculadora_v2.py' --- 02_estructuras/ejercicio_guiado/calculadora_v2.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py index 6c652b7..2e1b4db 100644 --- a/02_estructuras/ejercicio_guiado/calculadora_v2.py +++ b/02_estructuras/ejercicio_guiado/calculadora_v2.py @@ -20,7 +20,8 @@ # TODO 1: Pide el primer número al usuario y conviértelo a float # num1 = ... - +num1 = input("Introduce el primer número -->") +float_num1 = float(num1) # TODO 2: Pide el segundo número al usuario y conviértelo a float # num2 = ... From 1f0baeec95e8d2dcfe3ae026fadfe07181342fb2 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 2 Nov 2025 21:35:12 +0100 Subject: [PATCH 214/323] feat: declarar variable num2 y convertirlo a float en 'calculadora_v2.py' --- 02_estructuras/ejercicio_guiado/calculadora_v2.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py index 2e1b4db..0ff3e96 100644 --- a/02_estructuras/ejercicio_guiado/calculadora_v2.py +++ b/02_estructuras/ejercicio_guiado/calculadora_v2.py @@ -20,12 +20,13 @@ # TODO 1: Pide el primer número al usuario y conviértelo a float # num1 = ... -num1 = input("Introduce el primer número -->") +num1 = input("Introduce el primer número --> ") float_num1 = float(num1) # TODO 2: Pide el segundo número al usuario y conviértelo a float # num2 = ... - +num2 = input("Introduce el segundo número --> ") +float_num2 = float(num2) # TODO 3: Pregunta qué operación desea realizar # Pista: input("¿Qué operación deseas realizar? (+, -, *, /): ") From fb1d26010e70cbb2ef20cb50426f855b77f41302 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 2 Nov 2025 21:36:49 +0100 Subject: [PATCH 215/323] feat: declarar variable operacion en 'calculadora_v2.py' --- 02_estructuras/ejercicio_guiado/calculadora_v2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py index 0ff3e96..d742ba8 100644 --- a/02_estructuras/ejercicio_guiado/calculadora_v2.py +++ b/02_estructuras/ejercicio_guiado/calculadora_v2.py @@ -31,7 +31,7 @@ # TODO 3: Pregunta qué operación desea realizar # Pista: input("¿Qué operación deseas realizar? (+, -, *, /): ") # operacion = ... - +operacion = input("¿Qué operación desea realizar? (+, -, *, /) --> ") # TODO 4: Realiza la operación correspondiente usando if/elif/else # Pista: Compara la variable 'operacion' con "+", "-", "*", "/" From bf5e84de20291de4a66fdc32a54e5322fd940569 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 2 Nov 2025 21:45:25 +0100 Subject: [PATCH 216/323] feat: realizar operacion usando if/elif/else en 'calculadora.py' --- 02_estructuras/ejercicio_guiado/calculadora_v2.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py index d742ba8..0b7032c 100644 --- a/02_estructuras/ejercicio_guiado/calculadora_v2.py +++ b/02_estructuras/ejercicio_guiado/calculadora_v2.py @@ -46,6 +46,16 @@ # ... # else: # print("❌ Operación no válida") +if operacion == "+": + resultado = float_num1 + float_num2 +elif operacion == "-": + resultado = float_num1 - float_num2 +elif operacion == "*": + resultado = float_num1 * float_num2 +elif operacion == "/": + resultado = float_num1 / float_num2 +else: + print("❌ Lo siento. No se reconoce la operación que ha introducido. Vuelva a intentarlo.") # TODO 5: Muestra el resultado usando f-strings From f054e5648638e5c09fc17bf4f283dff5619579db Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 2 Nov 2025 21:47:27 +0100 Subject: [PATCH 217/323] feat: mostrar resultado en 'calculadora_v2.py' --- 02_estructuras/ejercicio_guiado/calculadora_v2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py index 0b7032c..9c93ab1 100644 --- a/02_estructuras/ejercicio_guiado/calculadora_v2.py +++ b/02_estructuras/ejercicio_guiado/calculadora_v2.py @@ -62,6 +62,7 @@ # Pista: f"El resultado de {num1} {operacion} {num2} = {resultado:.2f}" # El :.2f muestra solo 2 decimales # print(f"...") +print(f"{float_num1} {operacion} {float_num2} = {round(resultado, 2)}") # ¡Perfecto! Ahora tu calculadora puede hacer las 4 operaciones básicas From 49540e8986a7117331bf161dcd3aecc31ad109f8 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 2 Nov 2025 23:20:52 +0100 Subject: [PATCH 218/323] test: primer test 'calculadora_v2.py' --- .../ejercicio_guiado/calculadora_v2.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py index 9c93ab1..1b88752 100644 --- a/02_estructuras/ejercicio_guiado/calculadora_v2.py +++ b/02_estructuras/ejercicio_guiado/calculadora_v2.py @@ -77,3 +77,36 @@ # 💡 Nota: Si intentas dividir por cero (10 / 0), Python mostrará un error. # Esto lo arreglaremos en la v3 con validación de entrada. +# Primer test: introducir 5 como num1, 3 como num2 y cualquier signo sugerido en operador +# -------------------------------------------------- +# Operador '+': +# Introduce el primer número --> 5 +# Introduce el segundo número --> 3 +# ¿Qué operación desea realizar? (+, -, *, /) --> + +# 5.0 + 3.0 = 8.0 +# -------------------------------------------------- +# Operador '-': +# Introduce el primer número --> 5 +# Introduce el segundo número --> 3 +# ¿Qué operación desea realizar? (+, -, *, /) --> - +# 5.0 - 3.0 = 2.0 +# -------------------------------------------------- +# Operador '*': +# Introduce el primer número --> 5 +# Introduce el segundo número --> 3 +# ¿Qué operación desea realizar? (+, -, *, /) --> * +# 5.0 * 3.0 = 15.0 +# -------------------------------------------------- +# Operador '/': +# Introduce el primer número --> 5 +# Introduce el segundo número --> 3 +# ¿Qué operación desea realizar? (+, -, *, /) --> / +# 5.0 / 3.0 = 1.67 +# -------------------------------------------------- +# Cualquier otro operador '%, (, )...': +# Introduce el primer número --> 5 +# Introduce el segundo número --> 3 +# ¿Qué operación desea realizar? (+, -, *, /) --> % +# ❌ Lo siento. No se reconoce la operación que ha introducido. Vuelva a intentarlo. +# -------------------------------------------------- +# Éxito ✅ \ No newline at end of file From c3202332dc8bcdc1c12c3dc2ed1c0a8aaf4d718a Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 2 Nov 2025 23:25:18 +0100 Subject: [PATCH 219/323] test: segundo test 'calculadora_v2.py' --- 02_estructuras/ejercicio_guiado/calculadora_v2.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py index 1b88752..c1e1cef 100644 --- a/02_estructuras/ejercicio_guiado/calculadora_v2.py +++ b/02_estructuras/ejercicio_guiado/calculadora_v2.py @@ -109,4 +109,11 @@ # ¿Qué operación desea realizar? (+, -, *, /) --> % # ❌ Lo siento. No se reconoce la operación que ha introducido. Vuelva a intentarlo. # -------------------------------------------------- -# Éxito ✅ \ No newline at end of file +# Éxito ✅ +# -------------------------------------------------- +# Segundo test: introducir un string en uno de los dos números que piden al usuario. +# -------------------------------------------------- +# Probar con dato 'hola': +# Introduce el primer número --> hola +# ERROR ❌ +# Motivo: ValueError: could not convert string to float: 'hola' \ No newline at end of file From df909f400d3d6c9a1461f91053416e1fffbac5c4 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 2 Nov 2025 23:35:25 +0100 Subject: [PATCH 220/323] feat: agregar try/except en 'calculadora_v2.py' --- .../ejercicio_guiado/calculadora_v2.py | 71 +++++++++++-------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py index c1e1cef..d9ae913 100644 --- a/02_estructuras/ejercicio_guiado/calculadora_v2.py +++ b/02_estructuras/ejercicio_guiado/calculadora_v2.py @@ -21,48 +21,59 @@ # TODO 1: Pide el primer número al usuario y conviértelo a float # num1 = ... num1 = input("Introduce el primer número --> ") -float_num1 = float(num1) # TODO 2: Pide el segundo número al usuario y conviértelo a float # num2 = ... num2 = input("Introduce el segundo número --> ") -float_num2 = float(num2) # TODO 3: Pregunta qué operación desea realizar # Pista: input("¿Qué operación deseas realizar? (+, -, *, /): ") # operacion = ... operacion = input("¿Qué operación desea realizar? (+, -, *, /) --> ") -# TODO 4: Realiza la operación correspondiente usando if/elif/else -# Pista: Compara la variable 'operacion' con "+", "-", "*", "/" -# -# if operacion == "+": -# resultado = num1 + num2 -# elif operacion == "-": -# ... -# elif operacion == "*": -# ... -# elif operacion == "/": -# ... -# else: -# print("❌ Operación no válida") -if operacion == "+": - resultado = float_num1 + float_num2 -elif operacion == "-": - resultado = float_num1 - float_num2 -elif operacion == "*": - resultado = float_num1 * float_num2 -elif operacion == "/": - resultado = float_num1 / float_num2 -else: - print("❌ Lo siento. No se reconoce la operación que ha introducido. Vuelva a intentarlo.") +# TODO 3.5: Realiza try/except por si surge error al introducir números dados +try: + float_num1 = float(num1) + float_num2 = float(num2) + + # TODO 4: Realiza la operación correspondiente usando if/elif/else + # Pista: Compara la variable 'operacion' con "+", "-", "*", "/" + # + # if operacion == "+": + # resultado = num1 + num2 + # elif operacion == "-": + # ... + # elif operacion == "*": + # ... + # elif operacion == "/": + # ... + # else: + # print("❌ Operación no válida") + if operacion == "+": + resultado = float_num1 + float_num2 + elif operacion == "-": + resultado = float_num1 - float_num2 + elif operacion == "*": + resultado = float_num1 * float_num2 + elif operacion == "/": + resultado = float_num1 / float_num2 + else: + print("❌ Lo siento. No se reconoce la operación que ha introducido. Vuelva a intentarlo.") + + # TODO 5: Muestra el resultado usando f-strings + # Pista: f"El resultado de {num1} {operacion} {num2} = {resultado:.2f}" + # El :.2f muestra solo 2 decimales + # print(f"...") + print(f"{float_num1} {operacion} {float_num2} = {round(resultado, 2)}") -# TODO 5: Muestra el resultado usando f-strings -# Pista: f"El resultado de {num1} {operacion} {num2} = {resultado:.2f}" -# El :.2f muestra solo 2 decimales -# print(f"...") -print(f"{float_num1} {operacion} {float_num2} = {round(resultado, 2)}") +# Añadir dos mensajes de error +except ValueError: + print(f"❌ Inválido. Uno de los números introducidos (num1: {num1} | num2: {num2}) es incorrecto.") + print(f"Por favor, reinicie el programa. 🛠️") +except NameError: + print(f"❌ No ha generado el resultado que esperaba.") + print(f"Por favor, reinicie el programa. 🛠️") # ¡Perfecto! Ahora tu calculadora puede hacer las 4 operaciones básicas From 36aadc307babfcdf745341d518f7fb1a8ce71f3e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 2 Nov 2025 23:40:37 +0100 Subject: [PATCH 221/323] test: tercer test 'calculadora_v2.py' --- 02_estructuras/ejercicio_guiado/calculadora_v2.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py index d9ae913..b4f5fde 100644 --- a/02_estructuras/ejercicio_guiado/calculadora_v2.py +++ b/02_estructuras/ejercicio_guiado/calculadora_v2.py @@ -127,4 +127,14 @@ # Probar con dato 'hola': # Introduce el primer número --> hola # ERROR ❌ -# Motivo: ValueError: could not convert string to float: 'hola' \ No newline at end of file +# Motivo: ValueError: could not convert string to float: 'hola' +# -------------------------------------------------- +# Tercer test: al agregar try/except, volver a ingresar 'hola' por si surge el mensaje. +# -------------------------------------------------- +# Introduce el primer número --> hola +# Introduce el segundo número --> 3 +# ¿Qué operación desea realizar? (+, -, *, /) --> + +# ❌ Inválido. Uno de los números introducidos (num1: hola | num2: 3) es incorrecto. +# Por favor, reinicie el programa. 🛠️ +# -------------------------------------------------- +# Mensaje mostrado con éxito ✅ From badd681c01063accf32c2b88bc7effa6c1c5f106 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 2 Nov 2025 23:44:32 +0100 Subject: [PATCH 222/323] test: cuarto test 'calculador_v2.py' --- 02_estructuras/ejercicio_guiado/calculadora_v2.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/02_estructuras/ejercicio_guiado/calculadora_v2.py b/02_estructuras/ejercicio_guiado/calculadora_v2.py index b4f5fde..2f76299 100644 --- a/02_estructuras/ejercicio_guiado/calculadora_v2.py +++ b/02_estructuras/ejercicio_guiado/calculadora_v2.py @@ -138,3 +138,14 @@ # Por favor, reinicie el programa. 🛠️ # -------------------------------------------------- # Mensaje mostrado con éxito ✅ +# -------------------------------------------------- +# Cuarto test: al agregar try/except, ingresar un operador que no está donde le pide el programa (%) +# -------------------------------------------------- +# Introduce el primer número --> 5 +# Introduce el segundo número --> 3 +# ¿Qué operación desea realizar? (+, -, *, /) --> % +# ❌ Lo siento. No se reconoce la operación que ha introducido. Vuelva a intentarlo. +# ❌ No ha generado el resultado que esperaba. +# Por favor, reinicie el programa. 🛠️ +# -------------------------------------------------- +# Mensaje mostrado con éxito ✅ \ No newline at end of file From 6615c3ab76fec689c7a3d25405b04a18760b6eb0 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 12:55:26 +0100 Subject: [PATCH 223/323] feat: completar calculadora v3 en 03_control_flujo --- .../ejercicio_guiado/calculadora_v3.py | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/03_control_flujo/ejercicio_guiado/calculadora_v3.py b/03_control_flujo/ejercicio_guiado/calculadora_v3.py index 02191bc..a2cf9d2 100644 --- a/03_control_flujo/ejercicio_guiado/calculadora_v3.py +++ b/03_control_flujo/ejercicio_guiado/calculadora_v3.py @@ -24,7 +24,7 @@ # TODO 1: Crea el bucle principal # while True: # # Todo el código va aquí dentro - +while True: # TODO 2: Muestra el menú # print("\n=== CALCULADORA ===") @@ -33,34 +33,46 @@ # print("3. Multiplicar") # print("4. Dividir") # print("5. Salir") - + print("\n==== 💻 CALCULADORA 💻 ====") + print("1. Sumar") + print("2. Restar") + print("3. Multiplicar") + print("4. Dividir") + print("5. Salir") # TODO 3: Pide la opción al usuario # opcion = input("\nElige una opción: ") - + opcion = input("\nElige una opción: ") # TODO 4: Si elige salir (opción 5), termina el programa # if opcion == "5": # print("¡Hasta pronto! 👋") # break # Sale del bucle while - + if opcion == "5": + print("¡Nos vemos pronto!") + break # TODO 5: Valida que la opción sea válida (1, 2, 3 o 4) # if opcion not in ["1", "2", "3", "4"]: # print("❌ Opción no válida. Intenta de nuevo.") # continue # Vuelve al inicio del bucle (muestra el menú de nuevo) - + if opcion not in ["1", "2", "3", "4"]: + print("❌ Opción inválida. Vuelva a intentarlo.") + continue # TODO 6: Pide los dos números # num1 = float(input("Primer número: ")) # num2 = float(input("Segundo número: ")) - + num1 = float(input("Introduce su primer número: ")) + num2 = float(input("Introduce su segundo número: ")) # TODO 7: Controla la división por cero # if opcion == "4" and num2 == 0: # print("❌ Error: No se puede dividir por cero") # continue # Vuelve al menú sin hacer la operación - + if opcion == "4" and num2 == 0: + print("❌ Error: No se puede dividir por 0") + continue # TODO 8: Realiza la operación según la opción elegida # if opcion == "1": @@ -75,11 +87,22 @@ # elif opcion == "4": # resultado = num1 / num2 # simbolo = "/" - + if opcion == "1": + resultado = num1 + num2 + simbolo = "+" + if opcion == "2": + resultado = num1 - num2 + simbolo = "-" + if opcion == "3": + resultado = num1 * num2 + simbolo = "*" + if opcion == "4": + resultado = num1 / num2 + simbolo = "/" # TODO 9: Muestra el resultado con f-string # print(f"✅ {num1} {simbolo} {num2} = {resultado:.2f}") - + print(f"{num1} {simbolo} {num2} = {round(resultado, 2)}") # ¡Excelente trabajo! Ahora tienes una calculadora interactiva que: # - Se repite hasta que el usuario quiera salir From 598a887a6047828b177ee180f6652b145da60c06 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 13:01:21 +0100 Subject: [PATCH 224/323] test: primer test calculadora_v3 --- 03_control_flujo/ejercicio_guiado/calculadora_v3.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03_control_flujo/ejercicio_guiado/calculadora_v3.py b/03_control_flujo/ejercicio_guiado/calculadora_v3.py index a2cf9d2..6279ace 100644 --- a/03_control_flujo/ejercicio_guiado/calculadora_v3.py +++ b/03_control_flujo/ejercicio_guiado/calculadora_v3.py @@ -117,3 +117,6 @@ # 4. Sal con la opción 5 → el programa debe terminar correctamente # # 💡 En la v4 organizarás todo este código en funciones para que sea más limpio +# -------------------------------------------------- +# Primer test: calcular 4 como num1 y 5 como num2 con cualquier operacion +# Resultado: Éxito ✅ From dc474f5a4bc662ddfff683c37c527330138bca62 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 13:22:55 +0100 Subject: [PATCH 225/323] test: segundo test calculadora_v3 --- 03_control_flujo/ejercicio_guiado/calculadora_v3.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03_control_flujo/ejercicio_guiado/calculadora_v3.py b/03_control_flujo/ejercicio_guiado/calculadora_v3.py index 6279ace..2c38baa 100644 --- a/03_control_flujo/ejercicio_guiado/calculadora_v3.py +++ b/03_control_flujo/ejercicio_guiado/calculadora_v3.py @@ -120,3 +120,7 @@ # -------------------------------------------------- # Primer test: calcular 4 como num1 y 5 como num2 con cualquier operacion # Resultado: Éxito ✅ +# -------------------------------------------------- +# Segundo test: calcular 'hola' como num1 y 5 como num2 con cualquier operacion +# Resultado: Error ❌ +# Motivo: ValueError: could not convert string to float: 'hola' From 28f06f5a77b7a47e46e59af572b2cf51c51f1b1d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 13:30:17 +0100 Subject: [PATCH 226/323] feat: try/except en calculadora_v3.py --- .../ejercicio_guiado/calculadora_v3.py | 84 +++++++++++-------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/03_control_flujo/ejercicio_guiado/calculadora_v3.py b/03_control_flujo/ejercicio_guiado/calculadora_v3.py index 2c38baa..72ec017 100644 --- a/03_control_flujo/ejercicio_guiado/calculadora_v3.py +++ b/03_control_flujo/ejercicio_guiado/calculadora_v3.py @@ -63,46 +63,56 @@ # TODO 6: Pide los dos números # num1 = float(input("Primer número: ")) # num2 = float(input("Segundo número: ")) - num1 = float(input("Introduce su primer número: ")) - num2 = float(input("Introduce su segundo número: ")) + num1 = input("Introduce su primer número: ") + num2 = input("Introduce su segundo número: ") - # TODO 7: Controla la división por cero - # if opcion == "4" and num2 == 0: - # print("❌ Error: No se puede dividir por cero") - # continue # Vuelve al menú sin hacer la operación - if opcion == "4" and num2 == 0: - print("❌ Error: No se puede dividir por 0") - continue + # TODO 6.5: Validar si los dos números son de tipo float + try: + num1 = float(num1) + num2 = float(num2) + + # TODO 7: Controla la división por cero + # if opcion == "4" and num2 == 0: + # print("❌ Error: No se puede dividir por cero") + # continue # Vuelve al menú sin hacer la operación + if opcion == "4" and num2 == 0: + print("❌ Error: No se puede dividir por 0") + continue - # TODO 8: Realiza la operación según la opción elegida - # if opcion == "1": - # resultado = num1 + num2 - # simbolo = "+" - # elif opcion == "2": - # resultado = num1 - num2 - # simbolo = "-" - # elif opcion == "3": - # resultado = num1 * num2 - # simbolo = "*" - # elif opcion == "4": - # resultado = num1 / num2 - # simbolo = "/" - if opcion == "1": - resultado = num1 + num2 - simbolo = "+" - if opcion == "2": - resultado = num1 - num2 - simbolo = "-" - if opcion == "3": - resultado = num1 * num2 - simbolo = "*" - if opcion == "4": - resultado = num1 / num2 - simbolo = "/" + # TODO 8: Realiza la operación según la opción elegida + # if opcion == "1": + # resultado = num1 + num2 + # simbolo = "+" + # elif opcion == "2": + # resultado = num1 - num2 + # simbolo = "-" + # elif opcion == "3": + # resultado = num1 * num2 + # simbolo = "*" + # elif opcion == "4": + # resultado = num1 / num2 + # simbolo = "/" + if opcion == "1": + resultado = num1 + num2 + simbolo = "+" + if opcion == "2": + resultado = num1 - num2 + simbolo = "-" + if opcion == "3": + resultado = num1 * num2 + simbolo = "*" + if opcion == "4": + resultado = num1 / num2 + simbolo = "/" - # TODO 9: Muestra el resultado con f-string - # print(f"✅ {num1} {simbolo} {num2} = {resultado:.2f}") - print(f"{num1} {simbolo} {num2} = {round(resultado, 2)}") + # TODO 9: Muestra el resultado con f-string + # print(f"✅ {num1} {simbolo} {num2} = {resultado:.2f}") + print(f"{num1} {simbolo} {num2} = {round(resultado, 2)}") + + # TODO 10: Muestra el mensaje de error usando except + except ValueError: + print(f"ERROR ❌. Uno de los valores introducidos (num1: {num1} | num2: {num2}) no es un número. Vuelva a intentarlo.") + continue # ¡Excelente trabajo! Ahora tienes una calculadora interactiva que: # - Se repite hasta que el usuario quiera salir From 1a7bb400aca32c124297a221d9dff8a8a1ba793c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 13:32:15 +0100 Subject: [PATCH 227/323] test: tercer test calculadora_v3 --- 03_control_flujo/ejercicio_guiado/calculadora_v3.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03_control_flujo/ejercicio_guiado/calculadora_v3.py b/03_control_flujo/ejercicio_guiado/calculadora_v3.py index 72ec017..a7d0505 100644 --- a/03_control_flujo/ejercicio_guiado/calculadora_v3.py +++ b/03_control_flujo/ejercicio_guiado/calculadora_v3.py @@ -134,3 +134,6 @@ # Segundo test: calcular 'hola' como num1 y 5 como num2 con cualquier operacion # Resultado: Error ❌ # Motivo: ValueError: could not convert string to float: 'hola' +# -------------------------------------------------- +# Tercer test: introducir 'hola' para verificar si sale el mensaje de error y que siga corriendo el programa +# Resultado: Éxito ✅ From a60cdfcf5d089d596b60c98f36ae56eaa5595ac6 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 13:41:31 +0100 Subject: [PATCH 228/323] feat: agregar ejercicio clasificador en 03_control_flujo --- 03_control_flujo/clasificador/clasificador.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 03_control_flujo/clasificador/clasificador.py diff --git a/03_control_flujo/clasificador/clasificador.py b/03_control_flujo/clasificador/clasificador.py new file mode 100644 index 0000000..040d17c --- /dev/null +++ b/03_control_flujo/clasificador/clasificador.py @@ -0,0 +1,2 @@ +# EJERCICIO GUIADO 1: Clasificador simple +# Enunciado: Pide un número y clasifícalo como negativo, cero o positivo. Valida `ValueError`. \ No newline at end of file From f3256e4a13c8c26567767d71a50f5863a617acd5 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 13:49:19 +0100 Subject: [PATCH 229/323] feat: completar clasificador simple 03_control_flujo --- 03_control_flujo/clasificador/clasificador.py | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/03_control_flujo/clasificador/clasificador.py b/03_control_flujo/clasificador/clasificador.py index 040d17c..3199ac3 100644 --- a/03_control_flujo/clasificador/clasificador.py +++ b/03_control_flujo/clasificador/clasificador.py @@ -1,2 +1,22 @@ # EJERCICIO GUIADO 1: Clasificador simple -# Enunciado: Pide un número y clasifícalo como negativo, cero o positivo. Valida `ValueError`. \ No newline at end of file +# Enunciado: Pide un número y clasifícalo como negativo, cero o positivo. Valida `ValueError`. + +# TODO 1: Pedir número al usuario +num = input("Escribe un número --> ") + +# TODO 2: Evaluar si es un número usando try/except +try: + # TODO 3: Intentar convertir num a float + num = float(num) + + # TODO 4: clasificar num usando if/elif/else + if num < 0: + print("Negativo") + elif num == 0: + print("Cero") + else: + print("Positivo") + +# TODO 5: Mensaje de error si num no es un número +except ValueError: + print(f"ERROR ❌. El número introducido no es un número.") \ No newline at end of file From a5b6bb57de84e9c5772638e4a0a9847e36d6c834 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 13:51:59 +0100 Subject: [PATCH 230/323] feat: agregar suma acumulada 03_control_flujo --- 03_control_flujo/suma_acumulada/suma_acumulada.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 03_control_flujo/suma_acumulada/suma_acumulada.py diff --git a/03_control_flujo/suma_acumulada/suma_acumulada.py b/03_control_flujo/suma_acumulada/suma_acumulada.py new file mode 100644 index 0000000..ba0c9a1 --- /dev/null +++ b/03_control_flujo/suma_acumulada/suma_acumulada.py @@ -0,0 +1,2 @@ +# EJERCICIO GUIADO 2: Suma acumulada +# Enunciado: Suma números introducidos por el usuario hasta que escriba `fin`. Muestra el total. \ No newline at end of file From 03356f814cca604fccfd9d7655545926fef5b7bf Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 14:01:25 +0100 Subject: [PATCH 231/323] docs: pruebas clasificador simple 03_control_flujo --- 03_control_flujo/clasificador/clasificador.py | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/03_control_flujo/clasificador/clasificador.py b/03_control_flujo/clasificador/clasificador.py index 3199ac3..2cf9751 100644 --- a/03_control_flujo/clasificador/clasificador.py +++ b/03_control_flujo/clasificador/clasificador.py @@ -19,4 +19,24 @@ # TODO 5: Mensaje de error si num no es un número except ValueError: - print(f"ERROR ❌. El número introducido no es un número.") \ No newline at end of file + print(f"ERROR ❌. El número introducido no es un número.") + +# Perfecto! Ahora ya se tiene un clasificador de números interactivo. +# Vamos a hacer pruebas: +# ----------------------------------------------------------------- +# Nº1 +# Escribe un número --> 10 +# Positivo +# ----------------------------------------------------------------- +# Nº2 +# Escribe un número --> -25 +# Negativo +# ----------------------------------------------------------------- +# Nº3 +# Escribe un número --> 0 +# Cero +# ----------------------------------------------------------------- +# Nº4 +# Escribe un número --> pepe +# ERROR ❌. El número introducido no es un número. +# ----------------------------------------------------------------- \ No newline at end of file From 1b31b1fbb48829d6d655903f59326df41ed23b88 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 20:58:08 +0100 Subject: [PATCH 232/323] feat: completar suma acumulada en 03_control_flujo --- .../suma_acumulada/suma_acumulada.py | 63 ++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/03_control_flujo/suma_acumulada/suma_acumulada.py b/03_control_flujo/suma_acumulada/suma_acumulada.py index ba0c9a1..9a8fd7e 100644 --- a/03_control_flujo/suma_acumulada/suma_acumulada.py +++ b/03_control_flujo/suma_acumulada/suma_acumulada.py @@ -1,2 +1,63 @@ # EJERCICIO GUIADO 2: Suma acumulada -# Enunciado: Suma números introducidos por el usuario hasta que escriba `fin`. Muestra el total. \ No newline at end of file +# Enunciado: Suma números introducidos por el usuario hasta que escriba `fin`. Muestra el total. + +# TODO 0: Imprimir título del programa y su descripción +print("---- Suma acumulada ----") +print("Suma números introducidos por el usuario hasta que escriba 'fin'.\n") + +# TODO 1: definir variable que cuente el total de numeros sumados empezando desde 0 +total = 0 + +# TODO 2: iniciar bucle while que permite introducir tantos datos como quiera el usuario hasta escribir 'fin' +while True: + # TODO 3: pedir un número al usuario + num = input("Introduce un número (escribe 'fin' para terminar)--> ") + + # TODO 4: condicional 'if' si escribe 'fin' se acaba el programa y termina el bucle + if (num == 'fin'): + print("\nSe acabó!!") + print("------------------------") + break + + # TODO 5: condicional 'else' si no escribe 'fin' y siga funcionando el bucle + else: + # TODO 6: Evaluar el valor introducido usando try/except + try: + # TODO 7: Intentar convetir num a float + num = float(num) + # TODO 8: Acumular total con el número introducido + total = total + num + # TODO 9: Imprimir numero introducido y el total acumulado + print(f"Número: {num} | Suma total: {total}") + # TODO 10: Mostrar mensaje de error si el valor introducido no es un número + except ValueError: + print(f"El valor introducido ({num}) no es un número.") + print("Por favor, introduce un número válido o 'fin' para terminar\n") + continue + +# TODO 11: Imprimir el total acumulado una vez salido del bucle while +print(f"Total acumulado: {total}") + +# Prueba del programa: +# ---- Suma acumulada ---- +# Suma números introducidos por el usuario hasta que escriba 'fin'. +# +# Introduce un número (escribe 'fin' para terminar)--> 4 +# Número: 4.0 | Suma total: 4.0 +# Introduce un número (escribe 'fin' para terminar)--> 2 +# Número: 2.0 | Suma total: 6.0 +# Introduce un número (escribe 'fin' para terminar)--> 9 +# Número: 9.0 | Suma total: 15.0 +# Introduce un número (escribe 'fin' para terminar)--> 6 +# Número: 6.0 | Suma total: 21.0 +# Introduce un número (escribe 'fin' para terminar)--> yo +# El valor introducido (yo) no es un número. +# Por favor, introduce un número válido o 'fin' para terminar +# +# Introduce un número (escribe 'fin' para terminar)--> fin +# +# Se acabó!! +# ------------------------ +# Total acumulado: 21.0 +# +# Resultado: éxito ✅ \ No newline at end of file From 0a4a89fa20330b97f3f191b733d8dbc8a5c8e41d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 21:07:42 +0100 Subject: [PATCH 233/323] fix: imprimir titulo y descripcion clasificador.py 03_control_flujo --- 03_control_flujo/clasificador/clasificador.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03_control_flujo/clasificador/clasificador.py b/03_control_flujo/clasificador/clasificador.py index 2cf9751..f2425ff 100644 --- a/03_control_flujo/clasificador/clasificador.py +++ b/03_control_flujo/clasificador/clasificador.py @@ -1,6 +1,10 @@ # EJERCICIO GUIADO 1: Clasificador simple # Enunciado: Pide un número y clasifícalo como negativo, cero o positivo. Valida `ValueError`. +# TODO 0: Imprimir título del programa y su descripción +print("---- Clasificador cimple ----") +print("Pide un número y clasifícalo como negativo, cero o positivo.\n") + # TODO 1: Pedir número al usuario num = input("Escribe un número --> ") From cad112b515374b0a6cc79fe680bf0f49c8e0fa25 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 21:10:33 +0100 Subject: [PATCH 234/323] feat: agregar ejercicio autonomo 1 en 03_control_flujo --- 03_control_flujo/autonomos/lista_gatos.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 03_control_flujo/autonomos/lista_gatos.py diff --git a/03_control_flujo/autonomos/lista_gatos.py b/03_control_flujo/autonomos/lista_gatos.py new file mode 100644 index 0000000..ef27a0b --- /dev/null +++ b/03_control_flujo/autonomos/lista_gatos.py @@ -0,0 +1,3 @@ +# EJERCICIO AUTÓNOMO 1: Lista de gatos +# Enunciado: Recorre una lista de gatos y imprime sus nombres. + From 0ee860d89a8de57e47256155785ebbfc3f8131d0 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 21:24:33 +0100 Subject: [PATCH 235/323] feat: completar ejercicio autonomo 1 en 03_control_flujo --- 03_control_flujo/autonomos/lista_gatos.py | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/03_control_flujo/autonomos/lista_gatos.py b/03_control_flujo/autonomos/lista_gatos.py index ef27a0b..2295360 100644 --- a/03_control_flujo/autonomos/lista_gatos.py +++ b/03_control_flujo/autonomos/lista_gatos.py @@ -1,3 +1,28 @@ # EJERCICIO AUTÓNOMO 1: Lista de gatos # Enunciado: Recorre una lista de gatos y imprime sus nombres. +# TODO 0: Imprimir título del programa +print("---- LISTA DE GATOS ----") +# TODO 1: Declarar array con nombres de gatos +gatos = ["Michi", "Leo", "Nico", "Fluffy", "Pimpi"] +# TODO 2: Imprimir nombres de gatos dentro del array +print(f"Nombres de gatos: {gatos}\n") + +# TODO 3: Iniciar bucle for que recorra el array de gatos con su longitud +print(f"Lista:") +for i in range(len(gatos)): + # TODO 4: Imprimir nombres de gatos hasta que no queden más nombres + print(f"Gato nº{i+1} --> {gatos[i]}") + +# Arranque del programa: python lista_gatos.py +# -------------------------------------------- +# Resultado: +# ---- LISTA DE GATOS ---- +# Nombres de gatos: ['Michi', 'Leo', 'Nico', 'Fluffy', 'Pimpi'] + +# Lista: +# Gato nº1 --> Michi +# Gato nº2 --> Leo +# Gato nº3 --> Nico +# Gato nº4 --> Fluffy +# Gato nº5 --> Pimpi \ No newline at end of file From c341233ce749cfdd32e591feee013181122cf031 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 21:30:59 +0100 Subject: [PATCH 236/323] feat: agregar ejercicio autonomo 2 en 03_control_flujo --- 03_control_flujo/autonomos/cuenta_letras.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 03_control_flujo/autonomos/cuenta_letras.py diff --git a/03_control_flujo/autonomos/cuenta_letras.py b/03_control_flujo/autonomos/cuenta_letras.py new file mode 100644 index 0000000..777a834 --- /dev/null +++ b/03_control_flujo/autonomos/cuenta_letras.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 2: Contar letras +# Enunciado: Cuenta letras en un string usando un bucle. \ No newline at end of file From d5eec3be361ee56dc69d03f74d29474ee041ab5b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 3 Nov 2025 21:43:41 +0100 Subject: [PATCH 237/323] feat: completar ejercicio autonomo 2 en 03_control_flujo --- 03_control_flujo/autonomos/cuenta_letras.py | 23 ++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/03_control_flujo/autonomos/cuenta_letras.py b/03_control_flujo/autonomos/cuenta_letras.py index 777a834..885eb10 100644 --- a/03_control_flujo/autonomos/cuenta_letras.py +++ b/03_control_flujo/autonomos/cuenta_letras.py @@ -1,2 +1,23 @@ # EJERCICIO AUTÓNOMO 2: Contar letras -# Enunciado: Cuenta letras en un string usando un bucle. \ No newline at end of file +# Enunciado: Cuenta letras en un string usando un bucle. + +# TODO 0: Imprimir título del programa +print("---- Cuenta Letras ---- \n") + +# TODO 1: Pedir al usuario unas palabras +string = input("Escribe unas palabras --> ") + +# TODO 2: Iniciar un contador para las letras +count = 0 + +# TODO 3: Iniciar bucle for para recorrer cada caracter del string +print("Caracter --> Número") +for i in string: + # TODO 4: Incrementar el contador en 1 cada caracter que recorre + count += 1 + # TODO 5: Imprimir indice y letra del string recorrido + print(f"{i} --> {count}") + + +# TODO 6: Imprimir total del contador +print(f"Letras contadas: {count}") \ No newline at end of file From 643810cdc0b0740f607013ec2be8d1c17e0c1297 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 4 Nov 2025 09:22:11 +0100 Subject: [PATCH 238/323] feat: agregar ejercicio autonomo 3 en 03_control_flujo --- 03_control_flujo/autonomos/tabla_multiplicar.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 03_control_flujo/autonomos/tabla_multiplicar.py diff --git a/03_control_flujo/autonomos/tabla_multiplicar.py b/03_control_flujo/autonomos/tabla_multiplicar.py new file mode 100644 index 0000000..06d56b5 --- /dev/null +++ b/03_control_flujo/autonomos/tabla_multiplicar.py @@ -0,0 +1,3 @@ +# EJERCICIO AUTÓNOMO 3: Tablas de multiplicar +# Enunciado: Genera una tabla de multiplicar del 1 al 5 usando `for` anidados. + From fc28999577a9e29bcc86470bd951611f307776ff Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 4 Nov 2025 09:56:13 +0100 Subject: [PATCH 239/323] feat: completar ejercicio autonomo 3 en 03_control_flujo --- .../autonomos/tabla_multiplicar.py | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/03_control_flujo/autonomos/tabla_multiplicar.py b/03_control_flujo/autonomos/tabla_multiplicar.py index 06d56b5..c455f37 100644 --- a/03_control_flujo/autonomos/tabla_multiplicar.py +++ b/03_control_flujo/autonomos/tabla_multiplicar.py @@ -1,3 +1,57 @@ # EJERCICIO AUTÓNOMO 3: Tablas de multiplicar # Enunciado: Genera una tabla de multiplicar del 1 al 5 usando `for` anidados. +# TODO 0: Imprimir titulo del programa +print("---- TABLA DE MULTIPLICAR ----") + +# TODO 1: Identificar el rango del 1 al 5 para las tablas de multiplicar +numeros = list(range(1, 6)) +print(numeros) + +# TODO 2: Empezar un bucle for que muestre los números de las tablas +for num1 in numeros: + # TODO 3: Imprimir los numeros del 1 al 5 para que visualicen las tablas + print(f"\nTabla del {num1}") + # TODO 4: Añadir segundo bucle dentro del primero para que los numeros se crucen para las tablas + for num2 in numeros: + # TODO 5: Imprimir el calculo de cada tabla junto con el resultado + print(f"{num1} x {num2} = {num1 * num2}") + +# RESULTADO: +# ---- TABLA DE MULTIPLICAR ---- +# [1, 2, 3, 4, 5] +# +# Tabla del 1 +# 1 x 1 = 1 +# 1 x 2 = 2 +# 1 x 3 = 3 +# 1 x 4 = 4 +# 1 x 5 = 5 + +# Tabla del 2 +# 2 x 1 = 2 +# 2 x 2 = 4 +# 2 x 3 = 6 +# 2 x 4 = 8 +# 2 x 5 = 10 +# +# Tabla del 3 +# 3 x 1 = 3 +# 3 x 2 = 6 +# 3 x 3 = 9 +# 3 x 4 = 12 +# 3 x 5 = 15 +# +# Tabla del 4 +# 4 x 1 = 4 +# 4 x 2 = 8 +# 4 x 3 = 12 +# 4 x 4 = 16 +# 4 x 5 = 20 +# +# Tabla del 5 +# 5 x 1 = 5 +# 5 x 2 = 10 +# 5 x 3 = 15 +# 5 x 4 = 20 +# 5 x 5 = 25 \ No newline at end of file From fbfedc83d2eeefeef08cfe51276ce7b8f3ab3830 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 4 Nov 2025 09:59:01 +0100 Subject: [PATCH 240/323] feat: agregar ejercicio autonomo 4 en 03_control_flujo --- "03_control_flujo/autonomos/contrase\303\261as.py" | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 "03_control_flujo/autonomos/contrase\303\261as.py" diff --git "a/03_control_flujo/autonomos/contrase\303\261as.py" "b/03_control_flujo/autonomos/contrase\303\261as.py" new file mode 100644 index 0000000..38b1a32 --- /dev/null +++ "b/03_control_flujo/autonomos/contrase\303\261as.py" @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 4: Contraseñas +# Enunciado: Pide contraseñas hasta que sea `gato123`. \ No newline at end of file From 9f69de67779200275a7f6e209abad39e91f2f46a Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 4 Nov 2025 10:15:45 +0100 Subject: [PATCH 241/323] feat: completar ejercicio autonomo 4 en 03_control_flujo --- .../autonomos/contrase\303\261as.py" | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git "a/03_control_flujo/autonomos/contrase\303\261as.py" "b/03_control_flujo/autonomos/contrase\303\261as.py" index 38b1a32..9301e63 100644 --- "a/03_control_flujo/autonomos/contrase\303\261as.py" +++ "b/03_control_flujo/autonomos/contrase\303\261as.py" @@ -1,2 +1,30 @@ # EJERCICIO AUTÓNOMO 4: Contraseñas -# Enunciado: Pide contraseñas hasta que sea `gato123`. \ No newline at end of file +# Enunciado: Pide contraseñas hasta que sea `gato123`. + +# TODO 0: Imprimir título del programa +print("---- Contraseñas ----") + +# TODO 1: Empezar bucle while que pida contraseñas hasta introducir 'gato123' +while True: + # TODO 2: Pedir contraseña al usuario + contrasena = input("\nIntroduce una contraseña ('gato123' para finalizar) --> ") + # TODO 3: Si se introduce la contraseña especificada se acaba el bucle + if contrasena == "gato123": + print("Fin contraseñas!!!") + break + # TODO 4: Si no se introduce la contraseña especificada se guardará la contraseña introducida y seguirá pidiendo la contraseña + else: + print(f"Contraseña {contrasena} agregada.") + continue + +# RESULTADO: +# ---- Contraseñas ---- +# +# Introduce una contraseña ('gato123' para finalizar) --> pepe +# Contraseña pepe agregada. +# +# Introduce una contraseña ('gato123' para finalizar) --> leoniko +# Contraseña leoniko agregada. +# +# Introduce una contraseña ('gato123' para finalizar) --> gato123 +# Fin contraseñas!!! \ No newline at end of file From b45ce338e5526fe606019acba581db5216749f27 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 4 Nov 2025 12:13:08 +0100 Subject: [PATCH 242/323] feat: completar desafio en 03_control_flujo --- 03_control_flujo/desafio/turnos.py | 68 ++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 03_control_flujo/desafio/turnos.py diff --git a/03_control_flujo/desafio/turnos.py b/03_control_flujo/desafio/turnos.py new file mode 100644 index 0000000..0f152b4 --- /dev/null +++ b/03_control_flujo/desafio/turnos.py @@ -0,0 +1,68 @@ +# DESAFIO: Bigotes Felices (turnos) +# Enunciado: Dado un número de gatos y dos cuidadores, asigna alternadamente gatos a Turno A y B. + +# TODO 0: Imprimir título y descripción del ejercicio +print("---- BIGOTES FELICES ----") +print("-- Asignación de gatos por turnos --") + +# TODO 1: Bucle while qe se repite hasta insertar un número de gatos que sea mayor que 0 +while True: + # TODO 2: Intentar convertir 'gatos' a int a la hora que pida el programa al usuario + try: + # TODO 3: Pedir un número de gatos al usuario + gatos = int(input("\nIntroduce un número de gatos --> ")) + + # TODO 4: Condicional si el numero introducido es 0 o menor y se repetiría el bucle while + if gatos <= 0: + print("Debe ingresar al menos 1 gato para la lista de asignacion.") + continue + # TODO 5: Condicional si se asigna un numero específico de gatos se mostraría una lista de turnos + else: + # TODO 6: Imprimir lista + print(f"\nLista de asignación para {gatos} gatos") + print("---------------------") + # TODO 7: Agregar contadores para el número de turnos que tiene cada cuidador + cuidador_a = 0 + cuidador_b = 0 + + # TODO 8: Añadir bucle for para recorrer el numero de gatos introducido + for i in range(1, gatos + 1): + # TODO 9: Condicional si el numero recorrido es par se le asignará al cuidador A + if i % 2 == 0: + print(f"{i}º gato | Cuidador A") + cuidador_a += 1 + # TODO 10: Condicional si el numero recorrido es impar se le asignará al cuidador B + else: + print(f"{i}º gato | Cuidador B") + cuidador_b += 1 + # TODO 11: Una vez recorrido la lista, salir del bucle while + break + + # TODO 12: Mostrar mensaje de error si el valor introducido por el programa no es un número + except ValueError: + print("ERROR ❌. No ha insertado un número de gatos.") + continue + +# TODO 13: Imprimir cantidad de gatos y el número de turnos de cada cuidador +print(f"\nNúmero de gatos: {gatos}") +print(f"Número de gatos para la cuidadora A: {cuidador_a}") +print(f"Número de gatos para la cuidadora B: {cuidador_b}") + +# RESULTADO: +# ---- BIGOTES FELICES ---- +# -- Asignación de gatos por turnos -- +# +#Introduce un número de gatos --> 6 +# +# Lista de asignación para 6 gatos +# --------------------- +# 1º gato | Cuidador B +# 2º gato | Cuidador A +# 3º gato | Cuidador B +# 4º gato | Cuidador A +# 5º gato | Cuidador B +# 6º gato | Cuidador A +# +# Número de gatos: 6 +# Número de gatos para la cuidadora A: 3 +# Número de gatos para la cuidadora B: 3 \ No newline at end of file From 55ef81e8987ac6bf09ae7ba62027c051719fccb1 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 4 Nov 2025 13:27:14 +0100 Subject: [PATCH 243/323] feat: comienzo 04_funciones --- 03_control_flujo/desafio/turnos.py | 2 +- 04_funciones/ejercicio_guiado/calculadora_v4.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/03_control_flujo/desafio/turnos.py b/03_control_flujo/desafio/turnos.py index 0f152b4..806d2b7 100644 --- a/03_control_flujo/desafio/turnos.py +++ b/03_control_flujo/desafio/turnos.py @@ -5,7 +5,7 @@ print("---- BIGOTES FELICES ----") print("-- Asignación de gatos por turnos --") -# TODO 1: Bucle while qe se repite hasta insertar un número de gatos que sea mayor que 0 +# TODO 1: Bucle while que se repite hasta insertar un número de gatos que sea mayor que 0 while True: # TODO 2: Intentar convertir 'gatos' a int a la hora que pida el programa al usuario try: diff --git a/04_funciones/ejercicio_guiado/calculadora_v4.py b/04_funciones/ejercicio_guiado/calculadora_v4.py index de137ba..6a1a366 100644 --- a/04_funciones/ejercicio_guiado/calculadora_v4.py +++ b/04_funciones/ejercicio_guiado/calculadora_v4.py @@ -19,8 +19,8 @@ 4. Organiza todo en una función main() """ -# TODO 1: Define las funciones para cada operación matemática -# Cada función debe recibir dos parámetros (a, b) y devolver el resultado +# TODO 1: Define las funciones para cada operación matemática +# Cada función debe recibir dos parámetros (a, b) y devolver el resultado def sumar(a, b): """Suma dos números. From 79b86f56444413800f613618d701a9b2220cb18b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 5 Nov 2025 12:41:47 +0100 Subject: [PATCH 244/323] feat: modificar calculadora_v4.py en 04_funciones --- 04_funciones/ejercicio_guiado/calculadora_v4.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/04_funciones/ejercicio_guiado/calculadora_v4.py b/04_funciones/ejercicio_guiado/calculadora_v4.py index 6a1a366..a4b27df 100644 --- a/04_funciones/ejercicio_guiado/calculadora_v4.py +++ b/04_funciones/ejercicio_guiado/calculadora_v4.py @@ -33,7 +33,9 @@ def sumar(a, b): La suma de a y b """ # return a + b - pass # Borra esto y escribe el return + suma = a + b + return suma + # pass # Borra esto y escribe el return def restar(a, b): From 84e914073da508260b2ac88d66594fbb98522e0b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 5 Nov 2025 21:03:16 +0100 Subject: [PATCH 245/323] feat: completar calculadora_v4 en 04_funciones --- .../ejercicio_guiado/calculadora_v4.py | 110 +++++++++++++----- 1 file changed, 79 insertions(+), 31 deletions(-) diff --git a/04_funciones/ejercicio_guiado/calculadora_v4.py b/04_funciones/ejercicio_guiado/calculadora_v4.py index a4b27df..4c89221 100644 --- a/04_funciones/ejercicio_guiado/calculadora_v4.py +++ b/04_funciones/ejercicio_guiado/calculadora_v4.py @@ -41,13 +41,17 @@ def sumar(a, b): def restar(a, b): """Resta dos números.""" # TODO: Implementa la resta - pass + # pass --> sentencia nula + resta = a - b + return resta def multiplicar(a, b): """Multiplica dos números.""" # TODO: Implementa la multiplicación - pass + # pass --> sentencia nula + multi = a * b + return multi def dividir(a, b): @@ -61,7 +65,9 @@ def dividir(a, b): El resultado de a / b """ # TODO: Implementa la división - pass + # pass --> sentencia nula + division = a / b + return division # TODO 2: Crea una función para mostrar el menú @@ -73,7 +79,15 @@ def mostrar_menu(): # print("3. Multiplicar") # print("4. Dividir") # print("5. Salir") - pass + + # pass --> Sentencia nula + print("\n---- Calculadora ----") + print("1. Sumar") + print("2. Restar") + print("3. Multiplicar") + print("4. Dividir") + print("5. Salir") + # TODO 3: Crea una función para obtener dos números del usuario @@ -86,7 +100,11 @@ def obtener_numeros(): # num1 = float(input("Primer número: ")) # num2 = float(input("Segundo número: ")) # return num1, num2 - pass + # pass --> Sentencia nula + num1 = float(input("Primer número --> ")) + num2 = float(input("Segundo número -->")) + return num1, num2 + # TODO 4: Crea la función principal que contiene el bucle del programa @@ -94,56 +112,86 @@ def main(): """Función principal de la calculadora.""" # while True: + while True: # TODO 4.1: Muestra el menú llamando a la función mostrar_menu() # mostrar_menu() + mostrar_menu() # TODO 4.2: Pide la opción al usuario # opcion = input("\nElige una opción: ") + opcion = input("\nElige una opción: ") # TODO 4.3: Si elige salir, termina # if opcion == "5": # print("¡Hasta pronto! 👋") # break + if opcion == "5": + print("Hasta luego Lucas! ✨") + break # TODO 4.4: Valida que la opción sea válida # if opcion not in ["1", "2", "3", "4"]: # print("❌ Opción no válida") # continue + if opcion not in ["1", "2", "3", "4"]: + print("\n❌ Opción no válida.") + continue # TODO 4.5: Obtén los números llamando a la función obtener_numeros() # num1, num2 = obtener_numeros() - - # TODO 4.6: Controla división por cero - # if opcion == "4" and num2 == 0: - # print("❌ No se puede dividir por cero") - # continue - - # TODO 4.7: Llama a la función correspondiente según la opción - # Nota cómo ahora el código es mucho más limpio - # if opcion == "1": - # resultado = sumar(num1, num2) - # simbolo = "+" - # elif opcion == "2": - # resultado = restar(num1, num2) - # simbolo = "-" - # elif opcion == "3": - # resultado = multiplicar(num1, num2) - # simbolo = "*" - # elif opcion == "4": - # resultado = dividir(num1, num2) - # simbolo = "/" - - # TODO 4.8: Muestra el resultado - # print(f"✅ {num1} {simbolo} {num2} = {resultado:.2f}") - - pass + try: + num1, num2 = obtener_numeros() + + # TODO 4.6: Controla división por cero + # if opcion == "4" and num2 == 0: + # print("❌ No se puede dividir por cero") + # continue + if opcion == "4" and num2 == 0: + print("\n❌ No se puede dividir por cero") + continue + + # TODO 4.7: Llama a la función correspondiente según la opción + # Nota cómo ahora el código es mucho más limpio + # if opcion == "1": + # resultado = sumar(num1, num2) + # simbolo = "+" + # elif opcion == "2": + # resultado = restar(num1, num2) + # simbolo = "-" + # elif opcion == "3": + # resultado = multiplicar(num1, num2) + # simbolo = "*" + # elif opcion == "4": + # resultado = dividir(num1, num2) + # simbolo = "/" + if opcion == "1": + resultado = sumar(num1, num2) + simbolo = "+" + elif opcion == "2": + resultado = restar(num1, num2) + simbolo = "-" + elif opcion == "3": + resultado = multiplicar(num1, num2) + simbolo = "X" + elif opcion == "4": + resultado = dividir(num1, num2) + simbolo = "/" + + # TODO 4.8: Muestra el resultado + # print(f"✅ {num1} {simbolo} {num2} = {resultado:.2f}") + print(f"\n{num1} {simbolo} {num2} = {resultado:.2f}") + except ValueError: + print("\n❌ Se debe introducir un número.") + continue + # pass --> Sentencia nula # TODO 5: Punto de entrada del programa # Este patrón permite que el archivo sea importable sin ejecutarse automáticamente # if __name__ == "__main__": # main() - +if __name__ == "__main__": + main() # ¡Excelente! Has refactorizado tu calculadora con funciones. # From 5b8e0654098971b00422e372f06a3918e666ea2b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 5 Nov 2025 21:06:42 +0100 Subject: [PATCH 246/323] fix: calculadora_v4 04_funciones --- 04_funciones/ejercicio_guiado/calculadora_v4.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/04_funciones/ejercicio_guiado/calculadora_v4.py b/04_funciones/ejercicio_guiado/calculadora_v4.py index 4c89221..21a5a00 100644 --- a/04_funciones/ejercicio_guiado/calculadora_v4.py +++ b/04_funciones/ejercicio_guiado/calculadora_v4.py @@ -137,9 +137,11 @@ def main(): print("\n❌ Opción no válida.") continue - # TODO 4.5: Obtén los números llamando a la función obtener_numeros() - # num1, num2 = obtener_numeros() + # TODO 4.4.5: Validar si el valor introducido es número usando try/except try: + + # TODO 4.5: Obtén los números llamando a la función obtener_numeros() + # num1, num2 = obtener_numeros() num1, num2 = obtener_numeros() # TODO 4.6: Controla división por cero @@ -180,6 +182,7 @@ def main(): # TODO 4.8: Muestra el resultado # print(f"✅ {num1} {simbolo} {num2} = {resultado:.2f}") print(f"\n{num1} {simbolo} {num2} = {resultado:.2f}") + # TODO 4.9: Muestra el error si el valor introducido no es un número except ValueError: print("\n❌ Se debe introducir un número.") continue From a7340a2eabe98bc7abb4ad00fd11e3de553da495 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 5 Nov 2025 21:08:53 +0100 Subject: [PATCH 247/323] feat: agregar saludo.py en 04_funciones --- 04_funciones/guiado/saludo.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 04_funciones/guiado/saludo.py diff --git a/04_funciones/guiado/saludo.py b/04_funciones/guiado/saludo.py new file mode 100644 index 0000000..c978e95 --- /dev/null +++ b/04_funciones/guiado/saludo.py @@ -0,0 +1,2 @@ +# Guiado 1: Función saludo +# Crea `def saludar(nombre):` que retorne `Hola, `. \ No newline at end of file From 24f92cb8c3c9d43ad877faad159ec51da67a2940 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 5 Nov 2025 21:26:04 +0100 Subject: [PATCH 248/323] feat: completar saludo.py en 04_funciones --- 04_funciones/guiado/saludo.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/04_funciones/guiado/saludo.py b/04_funciones/guiado/saludo.py index c978e95..eb5d201 100644 --- a/04_funciones/guiado/saludo.py +++ b/04_funciones/guiado/saludo.py @@ -1,2 +1,24 @@ # Guiado 1: Función saludo -# Crea `def saludar(nombre):` que retorne `Hola, `. \ No newline at end of file +# Crea `def saludar(nombre):` que retorne `Hola, `. + +# TODO 0: Imprime el titulo de ejercicio +print("--- Función Saludo ---") +# TODO 1: Crearemos una función con 1 parámetro (nombre) para mostrar el saludo +def saludar(nombre): + # TODO 2: Devuelve el saludo + return f"Hola, {nombre}" + +# TODO 2: Pide un nombre al usuario +nombre = input("\nIntroduce un nombre --> ") + +# TODO 3: Punto de entrada del programa +if __name__ == "__main__": + print(saludar(nombre)) + +# Resultado: +# --- Función Saludo --- +# +# Introduce un nombre --> Pedro +# Hola, Pedro +# ----------------------------- +# Éxito ✅ \ No newline at end of file From a20099fb5ee38163359aec7352bb557e7aa5f792 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 09:27:16 +0100 Subject: [PATCH 249/323] feat: agregar sumar_lista.py en 04_funciones --- 04_funciones/guiado/saludo.py | 2 +- 04_funciones/guiado/sumar_lista.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 04_funciones/guiado/sumar_lista.py diff --git a/04_funciones/guiado/saludo.py b/04_funciones/guiado/saludo.py index eb5d201..2c92097 100644 --- a/04_funciones/guiado/saludo.py +++ b/04_funciones/guiado/saludo.py @@ -1,5 +1,5 @@ # Guiado 1: Función saludo -# Crea `def saludar(nombre):` que retorne `Hola, `. +# Enunciado: Crea `def saludar(nombre):` que retorne `Hola, `. # TODO 0: Imprime el titulo de ejercicio print("--- Función Saludo ---") diff --git a/04_funciones/guiado/sumar_lista.py b/04_funciones/guiado/sumar_lista.py new file mode 100644 index 0000000..375b8ba --- /dev/null +++ b/04_funciones/guiado/sumar_lista.py @@ -0,0 +1,4 @@ +# Guiado 2: Sumar lista +# Enunciado: Crea `def sumar(nums):` que sume elementos y retorne el total. +# Valida que `nums` sea lista. + From 1e7b9364abd734080daa64bbef1bdb52cc4c0afb Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 10:03:50 +0100 Subject: [PATCH 250/323] feat: completar sumar_lista.py en 04_funciones --- 04_funciones/guiado/sumar_lista.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/04_funciones/guiado/sumar_lista.py b/04_funciones/guiado/sumar_lista.py index 375b8ba..dde5ff2 100644 --- a/04_funciones/guiado/sumar_lista.py +++ b/04_funciones/guiado/sumar_lista.py @@ -2,3 +2,33 @@ # Enunciado: Crea `def sumar(nums):` que sume elementos y retorne el total. # Valida que `nums` sea lista. +# TODO 0: Imprime el título del ejercicio +print("--- Función Sumar Lista ---") + +# TODO 1: Crear la funcion 'def sumar(nums)' +def sumar(nums): + # TODO 2: Añadir suma de los números de la lista + suma = 0 + # TODO 3: Iniciar bucle que recorra la lista de números + for i in nums: + # TODO 4: Imprimir numero actual y total actual + print(f"\nNúmero actual: {i} | Suma actual: {suma}") + print(f"Suma parcial: {i} + {suma} =") + # TODO 5: Acumular suma con el numero recorrido e imprimir resultado + suma += i + print(f"{suma}") + # TODO 6: Devolver la suma total + return f"\n --- Suma total: {suma} ---" + +# TODO 7: Declarar lista de números +nums = [9, 3, 2, 12] + +# TODO 8: Punto de entrada del programa +if __name__ == "__main__": + # TODO 9: Validar si 'nums' es una lista de números usando try/except + try: + # TODO 9.5: Imprimir función con el resultado si sale True + print(sumar(nums)) + # TODO 10: Mostrar mensaje de error si 'nums' no es una lista de números o si en la lista de números hay otro valor con diferente tipo de dato + except TypeError: + print("ERROR ❌. La variable 'nums' debe ser una lista de números.") \ No newline at end of file From bf9e1ae77a00b8e60ae759e7948392ea41ba76f6 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 10:06:33 +0100 Subject: [PATCH 251/323] feat: agregar ejercicio autonomo 1 en 04_funciones --- 04_funciones/autonomos/ejercicio1.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 04_funciones/autonomos/ejercicio1.py diff --git a/04_funciones/autonomos/ejercicio1.py b/04_funciones/autonomos/ejercicio1.py new file mode 100644 index 0000000..22bdf3d --- /dev/null +++ b/04_funciones/autonomos/ejercicio1.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 1: Es par +# Enunciado: `es_par(n)` -> bool \ No newline at end of file From ef73395ce9c84cd21ff1c23ef0a99bd81dca4f4e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 10:37:52 +0100 Subject: [PATCH 252/323] feat: completar ejercicio autonomo 1 en 04_funciones --- 04_funciones/autonomos/ejercicio1.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/04_funciones/autonomos/ejercicio1.py b/04_funciones/autonomos/ejercicio1.py index 22bdf3d..23d9123 100644 --- a/04_funciones/autonomos/ejercicio1.py +++ b/04_funciones/autonomos/ejercicio1.py @@ -1,2 +1,27 @@ # EJERCICIO AUTÓNOMO 1: Es par -# Enunciado: `es_par(n)` -> bool \ No newline at end of file +# Enunciado: `es_par(n)` -> bool + +# TODO 0: Imprimir título del ejercicio +print("--- Par o Impar ---") + +# TODO 1: Crear la función 'def es_par(n)' +def es_par(n): + # TODO 2: Verificar si el número es divisible por 2 y devuelva 0 (par) o no es divisible por 2 (impar) + if n % 2 == 0: + # TODO 3: Devuelve True si el número es par + return True + else: + # TODO 4: Devuelve False si el número es impar + return False + +# TODO 5: Punto de entrada del programa +if __name__ == "__main__": + # TODO 6: Verificar si el valor introducido es un número usando try/except + try: + # TODO 7: Pedir un número al usuario + num = int(input("\nEscribe un número (Resultado 'True' si es par; 'False' si es impar) --> ")) + # TODO 8: Imprimir la función con el número introducido + print(es_par(num)) + # TODO 9: Mensaje de error si el valor introducido no es un número + except ValueError: + print("ERROR ❌. Debe introducir un número.") \ No newline at end of file From 623a8d1c4712fb47a2c63bfc3574150afc4c9527 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 10:59:20 +0100 Subject: [PATCH 253/323] feat: agregar ejercicio autonomo 2 en 04_funciones --- 04_funciones/autonomos/ejercicio2.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 04_funciones/autonomos/ejercicio2.py diff --git a/04_funciones/autonomos/ejercicio2.py b/04_funciones/autonomos/ejercicio2.py new file mode 100644 index 0000000..0912b76 --- /dev/null +++ b/04_funciones/autonomos/ejercicio2.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 2: Área del Rextángulo +# Enunciado: `area_rectangulo(a, b)` \ No newline at end of file From fed197e1e1e79c24301b24628edbe35f8c88d759 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 11:45:03 +0100 Subject: [PATCH 254/323] feat: completar ejercicio autonomo 2 en 04_funciones --- 04_funciones/autonomos/ejercicio2.py | 39 +++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/04_funciones/autonomos/ejercicio2.py b/04_funciones/autonomos/ejercicio2.py index 0912b76..b9d8d19 100644 --- a/04_funciones/autonomos/ejercicio2.py +++ b/04_funciones/autonomos/ejercicio2.py @@ -1,2 +1,39 @@ # EJERCICIO AUTÓNOMO 2: Área del Rextángulo -# Enunciado: `area_rectangulo(a, b)` \ No newline at end of file +# Enunciado: `area_rectangulo(a, b)` + +# TODO 0: Imprimir el título del ejercicio +print("--- Área del rectángulo ---") + +# TODO 1: Crear la función 'area_rectangulo(a, b)' +def area_rectangulo(a, b): + # TODO 2: Calcular el area (base X altura) + area = a * b + # TODO 3: Imprimir el area del rectnángulo calculado + return f"\nÁrea del rectángulo: {area}" + +# TODO 4: Punto de entrada del programa +if __name__ == "__main__": + # TODO 5: Verificar si se han introducido dos números usando try/except + try: + # TODO 6: Pedir la base del rectángulo + base = float(input("\nEscribe la base del rectángulo --> ")) + # TODO 7: Pedir la altura del rectángulo + altura = float(input("\nEscribe la altura del rectángulo --> ")) + + # TODO 8: Imprimir la función con la base y la altura introducidos + print(area_rectangulo(base, altura)) + + # TODO 9: Mostrar mensaje de error si uno de los dos valores no es un número + except ValueError: + print("\nERROR ❌. Sólo se permiten introducir números.") + +# EJEMPLO: +# --- Área del rectángulo --- +# +#Escribe la base del rectángulo --> 9 +# +# Escribe la altura del rectángulo --> 4 +# +# Área del rectángulo: 36.0 +# --------------------------------------- +# Éxito ✅ \ No newline at end of file From ebfbc91346b41006ab3db6b355cb8bcad2193d7d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 11:46:43 +0100 Subject: [PATCH 255/323] feat: agregar ejercicio autonomo 3 en 04_funciones --- 04_funciones/autonomos/ejercicio3.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 04_funciones/autonomos/ejercicio3.py diff --git a/04_funciones/autonomos/ejercicio3.py b/04_funciones/autonomos/ejercicio3.py new file mode 100644 index 0000000..cda47f0 --- /dev/null +++ b/04_funciones/autonomos/ejercicio3.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 3: Formatear gato +# Enunciado: `formatear_gato(nombre, edad)` -> string con f-string \ No newline at end of file From d30330d582da10906ca3845b56b63efb663d7f7e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 11:59:47 +0100 Subject: [PATCH 256/323] fix: ejercicio 1 y 2 en autonomos en 04_funciones --- 04_funciones/autonomos/ejercicio1.py | 5 ++--- 04_funciones/autonomos/ejercicio2.py | 5 ++--- 04_funciones/autonomos/ejercicio3.py | 3 ++- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/04_funciones/autonomos/ejercicio1.py b/04_funciones/autonomos/ejercicio1.py index 23d9123..fc502f6 100644 --- a/04_funciones/autonomos/ejercicio1.py +++ b/04_funciones/autonomos/ejercicio1.py @@ -1,9 +1,6 @@ # EJERCICIO AUTÓNOMO 1: Es par # Enunciado: `es_par(n)` -> bool -# TODO 0: Imprimir título del ejercicio -print("--- Par o Impar ---") - # TODO 1: Crear la función 'def es_par(n)' def es_par(n): # TODO 2: Verificar si el número es divisible por 2 y devuelva 0 (par) o no es divisible por 2 (impar) @@ -16,6 +13,8 @@ def es_par(n): # TODO 5: Punto de entrada del programa if __name__ == "__main__": + # TODO 5.1: Imprimir título del ejercicio + print("--- Par o Impar ---") # TODO 6: Verificar si el valor introducido es un número usando try/except try: # TODO 7: Pedir un número al usuario diff --git a/04_funciones/autonomos/ejercicio2.py b/04_funciones/autonomos/ejercicio2.py index b9d8d19..fc1eb01 100644 --- a/04_funciones/autonomos/ejercicio2.py +++ b/04_funciones/autonomos/ejercicio2.py @@ -1,9 +1,6 @@ # EJERCICIO AUTÓNOMO 2: Área del Rextángulo # Enunciado: `area_rectangulo(a, b)` -# TODO 0: Imprimir el título del ejercicio -print("--- Área del rectángulo ---") - # TODO 1: Crear la función 'area_rectangulo(a, b)' def area_rectangulo(a, b): # TODO 2: Calcular el area (base X altura) @@ -13,6 +10,8 @@ def area_rectangulo(a, b): # TODO 4: Punto de entrada del programa if __name__ == "__main__": + # TODO 4.5: Imprimir el título del ejercicio + print("--- Área del rectángulo ---") # TODO 5: Verificar si se han introducido dos números usando try/except try: # TODO 6: Pedir la base del rectángulo diff --git a/04_funciones/autonomos/ejercicio3.py b/04_funciones/autonomos/ejercicio3.py index cda47f0..4467ea2 100644 --- a/04_funciones/autonomos/ejercicio3.py +++ b/04_funciones/autonomos/ejercicio3.py @@ -1,2 +1,3 @@ # EJERCICIO AUTÓNOMO 3: Formatear gato -# Enunciado: `formatear_gato(nombre, edad)` -> string con f-string \ No newline at end of file +# Enunciado: `formatear_gato(nombre, edad)` -> string con f-string + From 3755fb5cf0802558778542b6cbdb619a5e6b9e3d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 12:08:45 +0100 Subject: [PATCH 257/323] feat: completar ejercicio autonomo 3 en 04_funciones --- 04_funciones/autonomos/ejercicio3.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/04_funciones/autonomos/ejercicio3.py b/04_funciones/autonomos/ejercicio3.py index 4467ea2..5cf814f 100644 --- a/04_funciones/autonomos/ejercicio3.py +++ b/04_funciones/autonomos/ejercicio3.py @@ -1,3 +1,26 @@ # EJERCICIO AUTÓNOMO 3: Formatear gato # Enunciado: `formatear_gato(nombre, edad)` -> string con f-string +def formatear_gato(nombre, edad): + return f"Su gato se llama {nombre} y tiene {edad} años." + +if __name__ == "__main__": + print("--- Formatear Gato ---") + + try: + nombre = str(input("\nIntroduce el nombre de su gato --> ")) + edad = int(input("Introduce la edad de su gato --> ")) + + print(formatear_gato(nombre, edad)) + + except ValueError: + print("\nEntrada inválida ❌") + +# EJEMPLO: +# --- Formatear Gato --- +# +# Introduce el nombre de su gato --> Pequeflus +# Introduce la edad de su gato --> 10 +# Su gato se llama Pequeflus y tiene 10 años. +# --------------------------------------------- +# Éxito ✅ \ No newline at end of file From 380bce4df1c1ed01ac90ce92e6cc16879e286e61 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 12:10:22 +0100 Subject: [PATCH 258/323] docs: ejercicio autonomo 1 en 04_funciones --- 04_funciones/autonomos/ejercicio1.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/04_funciones/autonomos/ejercicio1.py b/04_funciones/autonomos/ejercicio1.py index fc502f6..b2e9f2c 100644 --- a/04_funciones/autonomos/ejercicio1.py +++ b/04_funciones/autonomos/ejercicio1.py @@ -23,4 +23,12 @@ def es_par(n): print(es_par(num)) # TODO 9: Mensaje de error si el valor introducido no es un número except ValueError: - print("ERROR ❌. Debe introducir un número.") \ No newline at end of file + print("ERROR ❌. Debe introducir un número.") + +# EJEMPLO: +# --- Par o Impar --- +# +# Escribe un número (Resultado 'True' si es par; 'False' si es impar) --> 4 +# True +# ------------------------------------------------------------------------- +# Éxito ✅ \ No newline at end of file From 0d77960e1c5c31cf94b0424b48033dc2dcb1eb64 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 12:12:33 +0100 Subject: [PATCH 259/323] feat: agregar ejercicio autonomo 4 en 04_funciones --- 04_funciones/autonomos/ejercicio4.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 04_funciones/autonomos/ejercicio4.py diff --git a/04_funciones/autonomos/ejercicio4.py b/04_funciones/autonomos/ejercicio4.py new file mode 100644 index 0000000..e55ae76 --- /dev/null +++ b/04_funciones/autonomos/ejercicio4.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 4: Promedio de números +# Enunciado: `promedio(nums)` con manejo de lista vacía \ No newline at end of file From 30008cc985c367558c6ade41eba7a2b7af2cdf54 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 14:10:02 +0100 Subject: [PATCH 260/323] feat: completar ejercicio autonomo 4 en 04_funciones --- 04_funciones/autonomos/ejercicio4.py | 97 +++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/04_funciones/autonomos/ejercicio4.py b/04_funciones/autonomos/ejercicio4.py index e55ae76..b776ef7 100644 --- a/04_funciones/autonomos/ejercicio4.py +++ b/04_funciones/autonomos/ejercicio4.py @@ -1,2 +1,97 @@ # EJERCICIO AUTÓNOMO 4: Promedio de números -# Enunciado: `promedio(nums)` con manejo de lista vacía \ No newline at end of file +# Enunciado: `promedio(nums)` con manejo de lista vacía + +# TODO 1: Crear la función 'promedio(nums)' +def promedio(nums): + # TODO 2: Imprimir título del ejercicio + print("--- Promedio de lista de números ---") + + # TODO 3: Añadir una suma acumulable para la lista + suma = 0 + + # TODO 4: Agregar bucle 'while' para añadir números en la lista hasta introducir 0 + while True: + # TODO 5: Verificar si el valor introducido es un número usando try/except + try: + # TODO 6: Pedir un número al usuario + num = int(input("\nIntroduce un número (0 para terminar) --> ")) + + # TODO 7: No agregar a la lista si el numero es menor que 0 + if num < 0: + print("ERROR ❌. Introduce un número mayor que 0.") + continue + + # TODO 8: Terminar bucle si el número es 0 + if num == 0: + print("Fin de bucle!!") + break + + # TODO 9: Añadir número introducido a la lista + nums.append(num) + + # TODO 10: Imprimir lista actual + print(f"Lista: {nums}") + + # TODO 11: Acumular la suma de los valores de la lista e imprimir + print(f"Suma parcial: {suma} + {num} = ") + suma += num + print(suma) + + # TODO 12: Imprimir longitud de la lista actual + longitud = len(nums) + print(f"Longitud de la lista actual: {longitud}") + + # TODO 13: Mostrar mensaje de error si el valor introducido no es un número + except ValueError: + print("ERROR ❌. Número no válido.") + continue + + # TODO 14: Imprimir resumen de la lista al finalizar el bucle + print("\nResumen") + print(f"Lista: {nums} | Suma total: {suma} | Longitud: {longitud}") + + # TODO 15: Calcular el promedio de la lista e imprimirlo + medio = suma / longitud + return f"\nCálculo promedio: {medio:.2f}" + +# TODO 16: Agregar lista vacía para dar forma a la función +nums = [] + +# TODO 17: Punto de entrada del programa +if __name__ == "__main__": + # TODO 18: Imprimir función con la lista vacía + print(promedio(nums)) + +# EJEMPLO: +# --- Promedio de lista de números --- +# +# Introduce un número (0 para terminar) --> 2 +# Lista: [2] +# Suma parcial: 0 + 2 = +# 2 +# Longitud de la lista actual: 1 +# +# Introduce un número (0 para terminar) --> 7 +# Lista: [2, 7] +# Suma parcial: 2 + 7 = +# 9 +# Longitud de la lista actual: 2 +# +# Introduce un número (0 para terminar) --> 1 +# Lista: [2, 7, 1] +# Suma parcial: 9 + 1 = +# 10 +# Longitud de la lista actual: 3 +# +# Introduce un número (0 para terminar) --> 0 +# Fin de bucle!! +# +# Resumen +# Lista: [2, 7, 1] | Suma total: 10 | Longitud: 3 +# +# Cálculo promedio: 3.33 +# ------------------------------------------------ +# Éxito ✅ # + + + \ No newline at end of file From 0d3cb440b6aecf0b8a2b83816c6bc88a148c1da4 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 14:27:27 +0100 Subject: [PATCH 261/323] fix: ejercicio autonomo 3 en 04_funciones --- 04_funciones/autonomos/ejercicio3.py | 31 +++++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/04_funciones/autonomos/ejercicio3.py b/04_funciones/autonomos/ejercicio3.py index 5cf814f..d3eecb2 100644 --- a/04_funciones/autonomos/ejercicio3.py +++ b/04_funciones/autonomos/ejercicio3.py @@ -1,20 +1,35 @@ # EJERCICIO AUTÓNOMO 3: Formatear gato # Enunciado: `formatear_gato(nombre, edad)` -> string con f-string +# TODO 1: Crear funcion 'formatear_gato(nombre, edad) def formatear_gato(nombre, edad): - return f"Su gato se llama {nombre} y tiene {edad} años." - -if __name__ == "__main__": + # TODO 2: Imprimir título del ejercicio print("--- Formatear Gato ---") + # TODO 3: Imprimir valores de los parámetros + print(f"Nombre del gato: {nombre}") + print(f"Edad del gato: {edad}") + + # TODO 4: Verificar si edad es un número usando try/except try: - nombre = str(input("\nIntroduce el nombre de su gato --> ")) - edad = int(input("Introduce la edad de su gato --> ")) + # TODO 5: Intentar convertir edad a int + edad = int(edad) + + # TODO 6: Devuelve un string con formato de texto f-string + return f"Su gato se llama {nombre} y tiene {edad} años." - print(formatear_gato(nombre, edad)) - + # TODO 7: Mensaje de error si edad no es un número except ValueError: - print("\nEntrada inválida ❌") + print("\nERROR ❌. Edad debe ser un número") + +# TODO 8: Agregar valores de los parámetros +nombre = "Pequeflus" +edad = 10 + +# TODO 9: Punto de entrada del programa +if __name__ == "__main__": + # TODO 10: Imprimir función con los valores añadidos + print(formatear_gato(nombre, edad)) # EJEMPLO: # --- Formatear Gato --- From 117cc95ce114d6034c4ae6d256a4d7c2d340e21a Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 14:29:30 +0100 Subject: [PATCH 262/323] feat: agregar ejercicio autonomo 5 en 04_funciones --- 04_funciones/autonomos/ejercicio4.py | 5 +---- 04_funciones/autonomos/ejercicio5.py | 2 ++ 2 files changed, 3 insertions(+), 4 deletions(-) create mode 100644 04_funciones/autonomos/ejercicio5.py diff --git a/04_funciones/autonomos/ejercicio4.py b/04_funciones/autonomos/ejercicio4.py index b776ef7..6e0ec33 100644 --- a/04_funciones/autonomos/ejercicio4.py +++ b/04_funciones/autonomos/ejercicio4.py @@ -91,7 +91,4 @@ def promedio(nums): # # Cálculo promedio: 3.33 # ------------------------------------------------ -# Éxito ✅ # - - - \ No newline at end of file +# Éxito ✅ # \ No newline at end of file diff --git a/04_funciones/autonomos/ejercicio5.py b/04_funciones/autonomos/ejercicio5.py new file mode 100644 index 0000000..c7d3d0f --- /dev/null +++ b/04_funciones/autonomos/ejercicio5.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 5: Leer edad +# Enunciado: `leer_edad()` pide una edad por `input()`, valida `ValueError` y retorna un entero o `None`. \ No newline at end of file From bc086c55bf8581af73734079df2592c04f13918f Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 18:31:54 +0100 Subject: [PATCH 263/323] feat: completar ejercicio autonomo 5 en 04_funciones --- 04_funciones/autonomos/ejercicio5.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/04_funciones/autonomos/ejercicio5.py b/04_funciones/autonomos/ejercicio5.py index c7d3d0f..6a0bb5f 100644 --- a/04_funciones/autonomos/ejercicio5.py +++ b/04_funciones/autonomos/ejercicio5.py @@ -1,2 +1,14 @@ # EJERCICIO AUTÓNOMO 5: Leer edad -# Enunciado: `leer_edad()` pide una edad por `input()`, valida `ValueError` y retorna un entero o `None`. \ No newline at end of file +# Enunciado: `leer_edad()` pide una edad por `input()`, valida `ValueError` y retorna un entero o `None`. + +def leer_edad(): + print("--- Leer edad ---") + try: + edad = int(input("\nIntroduce tu edad --> ")) + + return f"\nEdad: {edad} años \n" + except ValueError: + return "None\n" + +if __name__ == "__main__": + print(leer_edad()) From 260790415438f4c0223cb38f9b4aa20f057c9cf9 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 18:33:46 +0100 Subject: [PATCH 264/323] feat: agregar desafio 04_funciones --- 04_funciones/desafio/filtro.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 04_funciones/desafio/filtro.py diff --git a/04_funciones/desafio/filtro.py b/04_funciones/desafio/filtro.py new file mode 100644 index 0000000..ce2264a --- /dev/null +++ b/04_funciones/desafio/filtro.py @@ -0,0 +1,2 @@ +# DESAFÍO DE BIGOTES FELICES: Filtro +# Enunciado: Dada una lista de gatos con edades, retorna sólo los mayores de 5 años. \ No newline at end of file From 668982a9c81572b27836957ed4626d78a104b6b1 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 18:40:20 +0100 Subject: [PATCH 265/323] docs: ejercicio autonomo 5 en 04_funciones --- 04_funciones/autonomos/ejercicio5.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/04_funciones/autonomos/ejercicio5.py b/04_funciones/autonomos/ejercicio5.py index 6a0bb5f..92c197f 100644 --- a/04_funciones/autonomos/ejercicio5.py +++ b/04_funciones/autonomos/ejercicio5.py @@ -1,14 +1,39 @@ # EJERCICIO AUTÓNOMO 5: Leer edad # Enunciado: `leer_edad()` pide una edad por `input()`, valida `ValueError` y retorna un entero o `None`. +# TODO 1: Crear funcion 'leer_edad()' def leer_edad(): + # TODO 2: Imprimir titulo del ejercicio print("--- Leer edad ---") + # TODO 3: Verificar si el valor introducido es un número usando try/except try: + # TODO 4: Pedir la edad del usuario edad = int(input("\nIntroduce tu edad --> ")) + # TODO 5: Retorna el número entero en formato de texto f-string return f"\nEdad: {edad} años \n" + # TODO 6: Mostrar 'None' si el valor introducido no es un número except ValueError: return "None\n" +# TODO 7: Punto de entrada del programa if __name__ == "__main__": + # TODO 8: Imprimir función con el valor a pedir print(leer_edad()) + +# EJEMPLO 1: +# --- Leer edad --- +# +# Introduce tu edad --> 23 +# +# Edad: 23 años +# +# -------------------------- +# EJEMPLO 2: +# --- Leer edad --- +# +# Introduce tu edad --> e +# None +# +#--------------------------- +# Éxito ✅ \ No newline at end of file From 74018382f2fa900b3494d3098f081a79a058ccc4 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 20:25:46 +0100 Subject: [PATCH 266/323] feat: completar desafio 04_funciones --- 04_funciones/desafio/filtro.py | 96 +++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/04_funciones/desafio/filtro.py b/04_funciones/desafio/filtro.py index ce2264a..8d7de93 100644 --- a/04_funciones/desafio/filtro.py +++ b/04_funciones/desafio/filtro.py @@ -1,2 +1,96 @@ # DESAFÍO DE BIGOTES FELICES: Filtro -# Enunciado: Dada una lista de gatos con edades, retorna sólo los mayores de 5 años. \ No newline at end of file +# Enunciado: Dada una lista de gatos con edades, retorna sólo los mayores de 5 años. + +# TODO 1: Crear funcion para recorrer lista de gatos +def listado(lista): + # TODO 1.1: Imprimir titulo de lista actual + print("\n--- Lista actual de gatos Bigotes Felices ---\n") + + # TODO 1.2: 'if/else' si existe la lista asignada en el parámetro + if lista: + # TODO 1.3: bucle 'for' para recorrer la lista + for gato in lista: + # TODO 1.4: Imprimir datos de la lista en formato de texto f-string + print(f"Nombre: {gato['nombre']} | Edad: {gato['edad']} años") + # TODO 1.5: Imprimir longitud de la lista en formato de texto f-string + print(f"\nNúmero de gatos en la lista: {len(lista)}") + # TODO 1.5: 'else' si no existe la lista de gatos + else: + print("No hay gatos en esa lista.") + +# TODO 2: Crear función para filtrar gatos mayores de 5 años +def mayor_de_5(lista): + # TODO 2.1: Crear lista vacía para agregar gatos filtrados + gatos_mayores = [] + + # TODO 2.2: 'if/else' si existe la lista asignada en el parámetro + if lista: + # TODO 2.3: Imprimir advertencia de filtrado + print("\n--- Filtrando lista de gatos mayores de 5 años ---") + # TODO 2.4: bucle 'for' para recorrer la lista + for gato in lista: + # TODO 2.5: filtrar gatos mayores de 5 años + if gato['edad'] > 5: + # TODO 2.6: añadir gato mayor de 5 años en la lista 'gatos_mayores' + gatos_mayores.append(gato) + # TODO 2.7: Devolver la lista con los datos actualizados + return gatos_mayores + # TODO 2.8: 'else' si no existe la lista de gatos + else: + print("No hay una lista para filtrar.") + +# TODO 3: Crear la función principal +def main(): + + # TODO 3.1: Imprimir título del ejercicio + print("--- BIGOTES FELICES (filtro) ---") + # TODO 3.2: Crear lista de objetos con los datos de los gatos + lista_gatos = [ + {"nombre": "Michi", "edad": 10}, + {"nombre": "Pelusa", "edad": 2}, + {"nombre": "Franky", "edad": 4}, + {"nombre": "Niko", "edad": 5}, + {"nombre": "Pachula", "edad": 7}, + {"nombre": "Simba", "edad": 8}, + {"nombre": "Chachito", "edad": 3} + ] + + # TODO 3.3: Llamar la función 'listado(lista_gatos)' + listado(lista_gatos) + + # TODO 3.4: Filtrar los gatos mayores de 5 años usando la función 'mayor_de_5(lista_gatos)' + gatos_mayores = mayor_de_5(lista_gatos) + + # TODO 3.5: Volver a llamar la función 'listado()' con los gatos mayores de 5 años + listado(gatos_mayores) + +# TODO 4: Punto de entrada del programa +if __name__ == "__main__": + main() + +# RESULTADO: +# --- BIGOTES FELICES (filtro) --- +# +# --- Lista actual de gatos Bigotes Felices --- +# +# Nombre: Michi | Edad: 10 años +# Nombre: Pelusa | Edad: 2 años +# Nombre: Franky | Edad: 4 años +# Nombre: Niko | Edad: 5 años +# Nombre: Pachula | Edad: 7 años +# Nombre: Simba | Edad: 8 años +# Nombre: Chachito | Edad: 3 años +# +# Número de gatos en la lista: 7 +# +# --- Filtrando lista de gatos mayores de 5 años --- +# +# --- Lista actual de gatos Bigotes Felices --- +# +# Nombre: Michi | Edad: 10 años +# Nombre: Pachula | Edad: 7 años +# Nombre: Simba | Edad: 8 años +# +# Número de gatos en la lista: 3 +# --------------------------------------------------- +# Éxito ✅ From 91fedb53f1f475915daf851474fda845722d8132 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 6 Nov 2025 20:56:09 +0100 Subject: [PATCH 267/323] =?UTF-8?q?fix:=20optimizar=20ejercicios=20aut?= =?UTF-8?q?=C3=B3nomos=20de=2004=5Ffunciones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 04_funciones/autonomos/ejercicio1.py | 27 ++++++++++------- 04_funciones/autonomos/ejercicio2.py | 44 +++++++++++++++++----------- 04_funciones/autonomos/ejercicio3.py | 37 ++++++++++++----------- 04_funciones/autonomos/ejercicio4.py | 43 ++++++++++++++------------- 04_funciones/autonomos/ejercicio5.py | 24 ++++++++------- 5 files changed, 100 insertions(+), 75 deletions(-) diff --git a/04_funciones/autonomos/ejercicio1.py b/04_funciones/autonomos/ejercicio1.py index b2e9f2c..09a01b9 100644 --- a/04_funciones/autonomos/ejercicio1.py +++ b/04_funciones/autonomos/ejercicio1.py @@ -3,28 +3,33 @@ # TODO 1: Crear la función 'def es_par(n)' def es_par(n): - # TODO 2: Verificar si el número es divisible por 2 y devuelva 0 (par) o no es divisible por 2 (impar) + # TODO 1.1: Verificar si el número es divisible por 2 y devuelva 0 (par) o no es divisible por 2 (impar) if n % 2 == 0: - # TODO 3: Devuelve True si el número es par + # TODO 1.2: Devuelve True si el número es par return True else: - # TODO 4: Devuelve False si el número es impar + # TODO 1.3: Devuelve False si el número es impar return False - -# TODO 5: Punto de entrada del programa -if __name__ == "__main__": - # TODO 5.1: Imprimir título del ejercicio + +# TODO 2: Crear la funcion principal +def main(): + # TODO 2.1: Imprimir título del ejercicio print("--- Par o Impar ---") - # TODO 6: Verificar si el valor introducido es un número usando try/except + # TODO 2.2: Verificar si el valor introducido es un número usando try/except try: - # TODO 7: Pedir un número al usuario + # TODO 2.3: Pedir un número al usuario num = int(input("\nEscribe un número (Resultado 'True' si es par; 'False' si es impar) --> ")) - # TODO 8: Imprimir la función con el número introducido + # TODO 2.4: Imprimir la función con el número introducido print(es_par(num)) - # TODO 9: Mensaje de error si el valor introducido no es un número + # TODO 2.5: Mensaje de error si el valor introducido no es un número except ValueError: print("ERROR ❌. Debe introducir un número.") + +# TODO 3: Punto de entrada del programa +if __name__ == "__main__": + main() + # EJEMPLO: # --- Par o Impar --- # diff --git a/04_funciones/autonomos/ejercicio2.py b/04_funciones/autonomos/ejercicio2.py index fc1eb01..f249580 100644 --- a/04_funciones/autonomos/ejercicio2.py +++ b/04_funciones/autonomos/ejercicio2.py @@ -3,28 +3,38 @@ # TODO 1: Crear la función 'area_rectangulo(a, b)' def area_rectangulo(a, b): - # TODO 2: Calcular el area (base X altura) + # TODO 1.1: Calcular el area (base X altura) area = a * b - # TODO 3: Imprimir el area del rectnángulo calculado + # TODO 1.2: Imprimir el area del rectángulo calculado return f"\nÁrea del rectángulo: {area}" -# TODO 4: Punto de entrada del programa -if __name__ == "__main__": - # TODO 4.5: Imprimir el título del ejercicio - print("--- Área del rectángulo ---") - # TODO 5: Verificar si se han introducido dos números usando try/except - try: - # TODO 6: Pedir la base del rectángulo - base = float(input("\nEscribe la base del rectángulo --> ")) - # TODO 7: Pedir la altura del rectángulo - altura = float(input("\nEscribe la altura del rectángulo --> ")) +# TODO 2: Crear la función principal +def main(): + # TODO 2.1: Bucle 'while' para comprobar si han introducido bien los números + while True: + # TODO 2.2: Imprimir el título del ejercicio + print("--- Área del rectángulo ---") + # TODO 2.3: Verificar si se han introducido dos números usando try/except + try: + # TODO 2.4: Pedir la base del rectángulo + base = float(input("\nEscribe la base del rectángulo --> ")) + # TODO 2.5: Pedir la altura del rectángulo + altura = float(input("\nEscribe la altura del rectángulo --> ")) + + # TODO 2.6: Imprimir la función con la base y la altura introducidos + print(area_rectangulo(base, altura)) + # TODO 2.7: Terminar bucle 'while' al mostrar resultado + break - # TODO 8: Imprimir la función con la base y la altura introducidos - print(area_rectangulo(base, altura)) + # TODO 2.7: Mostrar mensaje de error si uno de los dos valores no es un número + except ValueError: + print("\nERROR ❌. Sólo se permiten introducir números.") + # TODO 2.8: Volver a empezar el bucle si no se han introducidos los datos correctos + continue - # TODO 9: Mostrar mensaje de error si uno de los dos valores no es un número - except ValueError: - print("\nERROR ❌. Sólo se permiten introducir números.") +# TODO 3: Punto de entrada del programa +if __name__ == "__main__": + main() # EJEMPLO: # --- Área del rectángulo --- diff --git a/04_funciones/autonomos/ejercicio3.py b/04_funciones/autonomos/ejercicio3.py index d3eecb2..3823416 100644 --- a/04_funciones/autonomos/ejercicio3.py +++ b/04_funciones/autonomos/ejercicio3.py @@ -3,39 +3,42 @@ # TODO 1: Crear funcion 'formatear_gato(nombre, edad) def formatear_gato(nombre, edad): - # TODO 2: Imprimir título del ejercicio - print("--- Formatear Gato ---") - - # TODO 3: Imprimir valores de los parámetros - print(f"Nombre del gato: {nombre}") - print(f"Edad del gato: {edad}") - # TODO 4: Verificar si edad es un número usando try/except + # TODO 1.1: Verificar si edad es un número usando try/except try: - # TODO 5: Intentar convertir edad a int + # TODO 1.2: Intentar convertir edad a int edad = int(edad) - # TODO 6: Devuelve un string con formato de texto f-string - return f"Su gato se llama {nombre} y tiene {edad} años." + # TODO 1.3: Devuelve un string con formato de texto f-string + return f"\nSu gato se llama {nombre} y tiene {edad} años." - # TODO 7: Mensaje de error si edad no es un número + # TODO 1.4: Mensaje de error si edad no es un número except ValueError: print("\nERROR ❌. Edad debe ser un número") -# TODO 8: Agregar valores de los parámetros -nombre = "Pequeflus" -edad = 10 +# TODO 2: Crear función principal +def main(): + + # TODO 2.1: Imprimir título del ejercicio + print("--- Formatear Gato ---") + + # TODO 2.2: Pedir datos al usuario + nombre = input("\nIntroduce el nombre de su gato --> ") + edad = input("Introduce la edad de su gato --> ") + + # TODO 2.3: Imprimir función con los valores añadidos + print(formatear_gato(nombre, edad)) -# TODO 9: Punto de entrada del programa +# TODO 3: Punto de entrada del programa if __name__ == "__main__": - # TODO 10: Imprimir función con los valores añadidos - print(formatear_gato(nombre, edad)) + main() # EJEMPLO: # --- Formatear Gato --- # # Introduce el nombre de su gato --> Pequeflus # Introduce la edad de su gato --> 10 +# # Su gato se llama Pequeflus y tiene 10 años. # --------------------------------------------- # Éxito ✅ \ No newline at end of file diff --git a/04_funciones/autonomos/ejercicio4.py b/04_funciones/autonomos/ejercicio4.py index 6e0ec33..d56b545 100644 --- a/04_funciones/autonomos/ejercicio4.py +++ b/04_funciones/autonomos/ejercicio4.py @@ -3,64 +3,67 @@ # TODO 1: Crear la función 'promedio(nums)' def promedio(nums): - # TODO 2: Imprimir título del ejercicio - print("--- Promedio de lista de números ---") - # TODO 3: Añadir una suma acumulable para la lista + # TODO 1.2: Añadir una suma acumulable para la lista suma = 0 - # TODO 4: Agregar bucle 'while' para añadir números en la lista hasta introducir 0 + # TODO 1.3: Agregar bucle 'while' para añadir números en la lista hasta introducir 0 while True: - # TODO 5: Verificar si el valor introducido es un número usando try/except + # TODO 1.4: Verificar si el valor introducido es un número usando try/except try: - # TODO 6: Pedir un número al usuario + # TODO 1.4.1: Pedir un número al usuario num = int(input("\nIntroduce un número (0 para terminar) --> ")) - # TODO 7: No agregar a la lista si el numero es menor que 0 + # TODO 1.4.2: No agregar a la lista si el numero es menor que 0 if num < 0: print("ERROR ❌. Introduce un número mayor que 0.") continue - # TODO 8: Terminar bucle si el número es 0 + # TODO 1.4.3: Terminar bucle si el número es 0 if num == 0: print("Fin de bucle!!") break - # TODO 9: Añadir número introducido a la lista + # TODO 1.4.4: Añadir número introducido a la lista nums.append(num) - # TODO 10: Imprimir lista actual + # TODO 1.4.5: Imprimir lista actual print(f"Lista: {nums}") - # TODO 11: Acumular la suma de los valores de la lista e imprimir + # TODO 1.4.6: Acumular la suma de los valores de la lista e imprimir print(f"Suma parcial: {suma} + {num} = ") suma += num print(suma) - # TODO 12: Imprimir longitud de la lista actual + # TODO 1.4.7: Imprimir longitud de la lista actual longitud = len(nums) print(f"Longitud de la lista actual: {longitud}") - # TODO 13: Mostrar mensaje de error si el valor introducido no es un número + # TODO 1.5: Mostrar mensaje de error si el valor introducido no es un número except ValueError: print("ERROR ❌. Número no válido.") continue - # TODO 14: Imprimir resumen de la lista al finalizar el bucle + # TODO 1.6: Imprimir resumen de la lista al finalizar el bucle print("\nResumen") print(f"Lista: {nums} | Suma total: {suma} | Longitud: {longitud}") - # TODO 15: Calcular el promedio de la lista e imprimirlo + # TODO 1.7: Calcular el promedio de la lista e imprimirlo medio = suma / longitud return f"\nCálculo promedio: {medio:.2f}" -# TODO 16: Agregar lista vacía para dar forma a la función -nums = [] +# TODO 2: Crear la función principal +def main(): + # TODO 2.1: Imprimir título del ejercicio + print("--- Promedio de lista de números ---") + # TODO 2.2: Agregar lista vacía para dar forma a la función + nums = [] + # TODO 2.3: Imprimir función con la lista vacía + print(promedio(nums)) -# TODO 17: Punto de entrada del programa +# TODO 3: Punto de entrada del programa if __name__ == "__main__": - # TODO 18: Imprimir función con la lista vacía - print(promedio(nums)) + main() # EJEMPLO: # --- Promedio de lista de números --- diff --git a/04_funciones/autonomos/ejercicio5.py b/04_funciones/autonomos/ejercicio5.py index 92c197f..f1167b8 100644 --- a/04_funciones/autonomos/ejercicio5.py +++ b/04_funciones/autonomos/ejercicio5.py @@ -3,24 +3,28 @@ # TODO 1: Crear funcion 'leer_edad()' def leer_edad(): - # TODO 2: Imprimir titulo del ejercicio - print("--- Leer edad ---") - # TODO 3: Verificar si el valor introducido es un número usando try/except + # TODO 1.2: Verificar si el valor introducido es un número usando try/except try: - # TODO 4: Pedir la edad del usuario + # TODO 1.3: Pedir la edad del usuario edad = int(input("\nIntroduce tu edad --> ")) - # TODO 5: Retorna el número entero en formato de texto f-string + # TODO 1.4: Retorna el número entero en formato de texto f-string return f"\nEdad: {edad} años \n" - # TODO 6: Mostrar 'None' si el valor introducido no es un número + # TODO 1.5: Mostrar 'None' si el valor introducido no es un número except ValueError: - return "None\n" + return None -# TODO 7: Punto de entrada del programa -if __name__ == "__main__": - # TODO 8: Imprimir función con el valor a pedir +# TODO 2: Crear función principal +def main(): + # TODO 2.1: Imprimir titulo del ejercicio + print("--- Leer edad ---") + # TODO 2.2: Imprimir función con el valor a pedir print(leer_edad()) +# TODO 3: Punto de entrada del programa +if __name__ == "__main__": + main() + # EJEMPLO 1: # --- Leer edad --- # From 88a447127db18144f3000767fbefe5a32163cd8d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 7 Nov 2025 09:40:04 +0100 Subject: [PATCH 268/323] feat: completar calculadora v5 en 05_colecciones --- .../ejercicio_guiado/calculadora_v5.py | 52 +++++++++++++++++-- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/05_colecciones/ejercicio_guiado/calculadora_v5.py b/05_colecciones/ejercicio_guiado/calculadora_v5.py index 3caf649..2a5b813 100644 --- a/05_colecciones/ejercicio_guiado/calculadora_v5.py +++ b/05_colecciones/ejercicio_guiado/calculadora_v5.py @@ -66,7 +66,7 @@ def obtener_numeros(): # TODO 1: Crea una lista global para almacenar el historial # (Nota: en programación avanzada evitamos globales, pero aquí es didáctico) # historial = [] - +historial = [] def guardar_operacion(num1, num2, operacion, resultado): """Guarda una operación en el historial. @@ -84,11 +84,17 @@ def guardar_operacion(num1, num2, operacion, resultado): # "operacion": operacion, # "resultado": resultado # } + operacion_dict = { + "num1": num1, + "num2": num2, + "operacion": operacion, + "resultado": resultado + } # TODO 3: Añade el diccionario a la lista historial # historial.append(operacion_dict) - - pass + historial.append(operacion_dict) + # pass --> sentencia nula def mostrar_historial(): @@ -97,17 +103,23 @@ def mostrar_historial(): # if not historial: # print("📭 No hay operaciones en el historial") # return + if not historial: + print("👁️ No hay operaciones en el historial") + return # TODO 5: Muestra el título # print("\n📜 HISTORIAL DE OPERACIONES:") + print("\n HISTORIAL DE OPERACIONES:") # TODO 6: Itera sobre el historial con enumerate() # enumerate() nos da el índice (i) y el elemento (op) # El segundo parámetro (1) indica que empiece a contar desde 1 # for i, op in enumerate(historial, 1): # print(f"{i}. {op['num1']} {op['operacion']} {op['num2']} = {op['resultado']:.2f}") + for i, op in enumerate(historial, 1): + print(f"{i}. {op['num1']} {op['operacion']} {op['num2']} = {op['resultado']:.2f}") - pass + # pass --> sentencia nula # ===== FUNCIÓN PRINCIPAL ===== @@ -118,27 +130,43 @@ def main(): # while True: # mostrar_menu() # opcion = input("\nElige una opción: ") + while True: + mostrar_menu() + opcion = input("\nElige una opción: ") # TODO 7: Actualiza la condición de salir (ahora es la opción 6) # if opcion == "6": # print("¡Hasta pronto! 👋") # break + if opcion == "6": + print("¡Hasta luego Lucas! ✨") + break # TODO 8: Añade la nueva opción 5 para ver el historial # if opcion == "5": # mostrar_historial() # continue # Vuelve al menú sin pedir números + if opcion == "5": + mostrar_historial() + continue # TODO 9: Actualiza la validación (ahora hay 5 opciones válidas) # if opcion not in ["1", "2", "3", "4", "5"]: # print("❌ Opción no válida") # continue + if opcion not in ["1", "2", "3", "4", "5"]: + print("❌ Opción no válida.") + continue # num1, num2 = obtener_numeros() + num1, num2 = obtener_numeros() # if opcion == "4" and num2 == 0: # print("❌ No se puede dividir por cero") # continue + if opcion == "4" and num2 == 0: + print("❌ No se puede dividir por cero") + continue # TODO 10: Realiza la operación y guarda en el historial # if opcion == "1": @@ -153,13 +181,27 @@ def main(): # elif opcion == "4": # resultado = dividir(num1, num2) # simbolo = "/" + if opcion == "1": + resultado = sumar(num1, num2) + simbolo = "+" + if opcion == "2": + resultado = restar(num1, num2) + simbolo = "-" + if opcion == "3": + resultado = multiplicar(num1, num2) + simbolo = "*" + if opcion == "4": + resultado = dividir(num1, num2) + simbolo = "/" # print(f"✅ {num1} {simbolo} {num2} = {resultado:.2f}") + print(f"✅ {num1} {simbolo} {num2} = {resultado:.2f}") # TODO 11: Guarda la operación en el historial # guardar_operacion(num1, num2, simbolo, resultado) + guardar_operacion(num1, num2, simbolo, resultado) - pass + # pass --> sentencia nula if __name__ == "__main__": From 691fbdd9fa976869aaa645c337dff0f0e7e89af8 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 7 Nov 2025 09:57:57 +0100 Subject: [PATCH 269/323] feat: agregar ejercicio guiado 1 en 05_colecciones --- 05_colecciones/guiado/lista_gatos.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 05_colecciones/guiado/lista_gatos.py diff --git a/05_colecciones/guiado/lista_gatos.py b/05_colecciones/guiado/lista_gatos.py new file mode 100644 index 0000000..4d5da5b --- /dev/null +++ b/05_colecciones/guiado/lista_gatos.py @@ -0,0 +1,3 @@ +# EJERCICIO GUIADO 1: Lista de gatos +# ENUNCIADO: Crea una lista con 3 nombres y recórrela imprimiendo índices y valores. + From d1a3e453fc4bdb7fa34035c75471bd4755044a21 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 7 Nov 2025 10:08:37 +0100 Subject: [PATCH 270/323] feat: completar ejercicio guiado 1 en 05_colecciones --- 05_colecciones/guiado/lista_gatos.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/05_colecciones/guiado/lista_gatos.py b/05_colecciones/guiado/lista_gatos.py index 4d5da5b..1ce082a 100644 --- a/05_colecciones/guiado/lista_gatos.py +++ b/05_colecciones/guiado/lista_gatos.py @@ -1,3 +1,30 @@ # EJERCICIO GUIADO 1: Lista de gatos # ENUNCIADO: Crea una lista con 3 nombres y recórrela imprimiendo índices y valores. +# TODO 1: Crear lista de gatos con su identificador 'nombre' +lista_gatos = [ + {"nombre": "Niko"}, + {"nombre": "Michi"}, + {"nombre": "Chachito"} +] + +# TODO 2: Crear función principal +def main(): + # TODO 2.1: Imprimir título del ejercicio + print("--- Lista de gatos ---") + + # TODO 2.2: Iterar sobre la lista con enumerate() + for i, gato in enumerate(lista_gatos, 1): + print(f"{i}: {gato['nombre']}") + +# TODO 3: Punto de entrada del programa +if __name__ == "__main__": + main() + +# RESULTADO: +# --- Lista de gatos --- +# 1: Niko +# 2: Michi +# 3: Chachito +# ----------------------- +# Éxito ✅ \ No newline at end of file From 7e4d94fba7b3cece27dfdcf9a57a16041eba8d47 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 7 Nov 2025 12:02:39 +0100 Subject: [PATCH 271/323] feat: agregar ejercicio guiado 2 en 05_colecciones --- 05_colecciones/guiado/simple_dict.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 05_colecciones/guiado/simple_dict.py diff --git a/05_colecciones/guiado/simple_dict.py b/05_colecciones/guiado/simple_dict.py new file mode 100644 index 0000000..34bc926 --- /dev/null +++ b/05_colecciones/guiado/simple_dict.py @@ -0,0 +1,4 @@ +# EJERCICIO GUIADO 1: Diccionario simple +# ENUNCIADO: Crea un dict con `{"nombre": "Mishi", "edad": 3}` +# y accede a sus claves de forma segura con `get`. + From 043086430a9626b9e959993042458255b65881c3 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 7 Nov 2025 12:05:15 +0100 Subject: [PATCH 272/323] fix: ejercicio guiado 1 en 05_colecciones --- 05_colecciones/guiado/lista_gatos.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/05_colecciones/guiado/lista_gatos.py b/05_colecciones/guiado/lista_gatos.py index 1ce082a..19c4d9d 100644 --- a/05_colecciones/guiado/lista_gatos.py +++ b/05_colecciones/guiado/lista_gatos.py @@ -1,12 +1,8 @@ # EJERCICIO GUIADO 1: Lista de gatos # ENUNCIADO: Crea una lista con 3 nombres y recórrela imprimiendo índices y valores. -# TODO 1: Crear lista de gatos con su identificador 'nombre' -lista_gatos = [ - {"nombre": "Niko"}, - {"nombre": "Michi"}, - {"nombre": "Chachito"} -] +# TODO 1: Crear lista de gatos +lista_gatos = ["Niko", "Michi", "Chachito"] # TODO 2: Crear función principal def main(): @@ -15,7 +11,7 @@ def main(): # TODO 2.2: Iterar sobre la lista con enumerate() for i, gato in enumerate(lista_gatos, 1): - print(f"{i}: {gato['nombre']}") + print(f"{i}: {gato}") # TODO 3: Punto de entrada del programa if __name__ == "__main__": From 46da089abe2975df4ce9b67401bf7f15655430ef Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 7 Nov 2025 13:32:11 +0100 Subject: [PATCH 273/323] feat: completar ejercicio guiado 2 en 05_colecciones --- 05_colecciones/guiado/simple_dict.py | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/05_colecciones/guiado/simple_dict.py b/05_colecciones/guiado/simple_dict.py index 34bc926..6c12e60 100644 --- a/05_colecciones/guiado/simple_dict.py +++ b/05_colecciones/guiado/simple_dict.py @@ -2,3 +2,49 @@ # ENUNCIADO: Crea un dict con `{"nombre": "Mishi", "edad": 3}` # y accede a sus claves de forma segura con `get`. +# TODO 1: Crear diccionario con los datos concretos +dict_gato = {"nombre": "Mishi", "edad": 3} + +# TODO 2: Crear función principal +def main(): + # TODO 2.1: Imprimir título del ejercicio y línea divisoria del principio + print("--- Diccionario del gato ---") + print("----------------------------") + # TODO 2.2: Acceder a la clave 'nombre' del diccionario e imprimir + # get() devuelve el valor de una clave específica + # nombre devuelve el valor de la clave 'nombre' + nombre = dict_gato.get('nombre') + print(f"1. Nombre | {nombre}") + + # TODO 2.3: Acceder a la clave 'edad' del diccionario e imprimir + # edad devuelve el valor de la clave 'edad' + edad = dict_gato.get('edad') + print(f"2. Edad | {edad} años") + + # TODO 2.4: Acceder a la clave 'peso' del diccionario e imprimir + # peso devuelve el valor de la clave 'peso' + # si no existe, devuelve el valor predeterminado 'None' + peso = dict_gato.get('peso') + print(f"3. Peso | {peso} Kg") + + # TODO 2.5: Acceder a la clave 'color' del diccionario e imprimir + # color devuelve el valor de la clave 'color' + # si no existe, devuelve el valor predeterminado 'No registrado' + color = dict_gato.get('color', "No registrado") + print(f"4. Color | {color}") + # TODO 2.6: Imprimir línea divisoria del final + print("----------------------------") + +# TODO 3: Punto de entrada del programa +if __name__ == "__main__": + main() + +# RESULTADO: +# --- Diccionario del gato --- +# ---------------------------- +# 1. Nombre | Mishi +# 2. Edad | 3 años +# 3. Peso | None Kg +# 4. Color | No registrado +# ---------------------------- +# Éxito ✅ \ No newline at end of file From 99e20472cc6c41492d6a5d3fd9985814717f401d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 7 Nov 2025 13:43:04 +0100 Subject: [PATCH 274/323] feat: agregar ejercicio autonomo 1 en 05_colecciones --- 05_colecciones/autonomos/ejercicio1.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 05_colecciones/autonomos/ejercicio1.py diff --git a/05_colecciones/autonomos/ejercicio1.py b/05_colecciones/autonomos/ejercicio1.py new file mode 100644 index 0000000..66fbf4a --- /dev/null +++ b/05_colecciones/autonomos/ejercicio1.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 1: Vacunas +# Enunciado: Conjunto de vacunas (set) y prueba de pertenencia. \ No newline at end of file From 7f203c041079a80ff6415f7fc2c2594ac6226fe9 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 7 Nov 2025 17:30:28 +0100 Subject: [PATCH 275/323] feat: completar ejercicio autonomo 1 en 05_colecciones --- 05_colecciones/autonomos/ejercicio1.py | 34 +++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/05_colecciones/autonomos/ejercicio1.py b/05_colecciones/autonomos/ejercicio1.py index 66fbf4a..668eb16 100644 --- a/05_colecciones/autonomos/ejercicio1.py +++ b/05_colecciones/autonomos/ejercicio1.py @@ -1,2 +1,34 @@ # EJERCICIO AUTÓNOMO 1: Vacunas -# Enunciado: Conjunto de vacunas (set) y prueba de pertenencia. \ No newline at end of file +# Enunciado: Conjunto de vacunas (set) y prueba de pertenencia. + +# TODO 1: Crear conjunto de vacunas (set) +vacunas = {"rabia", "gripe", "hepatitis B", "tuberculosis"} + +# TODO 2: Crear función principal +def main(): + # TODO 2.1: Imprimir título del ejercicio + print("\n--- Lista de Vacunas ---") + # TODO 2.2: Hacer prueba booleana usando 'in' + print(f"1. Vacuna contra la rabia: {'rabia' in vacunas}") + print(f"2. Vacuna contra la gastroenteritis: {'gastroenteritis' in vacunas}") + print(f"3. Vacuna contra la gripe: {'gripe' in vacunas}") + print(f"4. Vacuna contra la hepatitis B: {'hepatitis b' in vacunas}") + print(f"5. Vacuna contra la tuberculosis: {'tuberculosis' in vacunas}") + print(f"6. Vacuna contra la varicela: {'varicela' in vacunas}") + print(f"7. Vacuna contra el tétanos: {'tetanos' in vacunas}") + +# TODO 3: Punto de entrada del programa +if __name__ == "__main__": + main() + +# RESULTADO: +# --- Lista de Vacunas --- +# 1. Vacuna contra la rabia: True +# 2. Vacuna contra la gastroenteritis: False +# 3. Vacuna contra la gripe: True +# 4. Vacuna contra la hepatitis B: False +# 5. Vacuna contra la tuberculosis: True +# 6. Vacuna contra la varicela: False +# 7. Vacuna contra el tétanos: False +# ------------------------------------------- +# Éxito ✅ \ No newline at end of file From ae263c6238c044c8840e4d4b3546e4cf6127e70b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 9 Nov 2025 12:26:13 +0100 Subject: [PATCH 276/323] feat: agregar ejercicio autonomo 2 en 05_colecciones --- 05_colecciones/autonomos/ejercicio2.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 05_colecciones/autonomos/ejercicio2.py diff --git a/05_colecciones/autonomos/ejercicio2.py b/05_colecciones/autonomos/ejercicio2.py new file mode 100644 index 0000000..d623cc3 --- /dev/null +++ b/05_colecciones/autonomos/ejercicio2.py @@ -0,0 +1,3 @@ +# EJERCICIO AUTÓNOMO 2: Combinación de listas +# Enunciado: Combina dos listas en un dict `{nombre: edad}`. + From a4c280006990a1663c6ffd3ffdbd901fa4e77399 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 9 Nov 2025 12:53:28 +0100 Subject: [PATCH 277/323] feat: completar ejercicio autonomo 2 en 05_colecciones --- 05_colecciones/autonomos/ejercicio2.py | 38 ++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/05_colecciones/autonomos/ejercicio2.py b/05_colecciones/autonomos/ejercicio2.py index d623cc3..be7e240 100644 --- a/05_colecciones/autonomos/ejercicio2.py +++ b/05_colecciones/autonomos/ejercicio2.py @@ -1,3 +1,41 @@ # EJERCICIO AUTÓNOMO 2: Combinación de listas # Enunciado: Combina dos listas en un dict `{nombre: edad}`. +# TODO 1: Crear funcion principal +def main(): + # TODO 1.1: Imprimir título del ejercicio + print("--- Combinación de listas ---") + + # TODO 1.2: Declarar 2 listas a combinar + lista1 = ["nombre", "edad", "color"] + lista2 = ["David", 25, "Verde"] + + # TODO 1.3: Declarar un diccionario que conjunte los dos listas + # zip() --> Esta función toma las dos listas y las combina en una secuencia de tuplas, + # donde cada tupla contiene un elemento de cada lista en la misma posición. + # EJ: zip(["nombre"], ["edad"]) crea [('nombre', 'edad')] + # dict() --> Esta función toma la iterable de tuplas y crea un diccionario a partir de él, + # usando el primer elemento de cada tupla como la clave y el segundo como valor + # EJ: dict(zip(["nombre"], ["edad"])) crea {'nombre': 'edad'} + diccionario = dict(zip(lista1, lista2)) + + # TODO 1.4: Imprimir las dos listas y el diccionario conjunto de dichas listas + print(f"\nPrimera lista: {lista1}") + print(f"\nSegunda lista: {lista2}") + print(f"\nDiccionario conjunto entre dos listas: {diccionario}\n") + +# TODO 2: Punto de entrada del programa +if __name__ == "__main__": + main() + +# RESULTADO: +# --- Combinación de listas --- +# +# Primera lista: ['nombre', 'edad', 'color'] +# +# Segunda lista: ['David', 25, 'Verde'] +# +# Diccionario conjunto entre dos listas: {'nombre': 'David', 'edad': 25, 'color': 'Verde'} +# +# ----------------------------------------------- +# Éxito ✅ \ No newline at end of file From ac9d876fa0ecec181f017f9a4f9829cd1858f700 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 9 Nov 2025 12:55:29 +0100 Subject: [PATCH 278/323] feat: agregar ejercicio autonomo 3 en 05_colecciones --- 05_colecciones/autonomos/ejercicio3.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 05_colecciones/autonomos/ejercicio3.py diff --git a/05_colecciones/autonomos/ejercicio3.py b/05_colecciones/autonomos/ejercicio3.py new file mode 100644 index 0000000..ea08093 --- /dev/null +++ b/05_colecciones/autonomos/ejercicio3.py @@ -0,0 +1,3 @@ +# EJERCICIO AUTÓNOMO 3: Ocurrencias de letras +# Enunciado: Cuenta ocurrencias de letras en un string con un dict. + From d50a1ff40d604538a9f9e38a9122414646717755 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 9 Nov 2025 20:30:06 +0100 Subject: [PATCH 279/323] feat: completar ejercicio autonomo 3 en 05_colecciones --- 05_colecciones/autonomos/ejercicio3.py | 84 ++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/05_colecciones/autonomos/ejercicio3.py b/05_colecciones/autonomos/ejercicio3.py index ea08093..51f1857 100644 --- a/05_colecciones/autonomos/ejercicio3.py +++ b/05_colecciones/autonomos/ejercicio3.py @@ -1,3 +1,87 @@ # EJERCICIO AUTÓNOMO 3: Ocurrencias de letras # Enunciado: Cuenta ocurrencias de letras en un string con un dict. +# TODO 1: Crear función que devuelva un diccionario de caractéres de un texto específico +def contar_letras(texto): + + # TODO 1.2: Comprobar si el texto está vacío o no + if not texto: + print("El texto está vacío.") + return + + # TODO 1.3: Comprobar si el texto tiene sólo espacios en blanco usando isspace() + if texto.isspace(): + print("El texto recibido sólo tiene espacios en blanco.") + return + + # TODO 1.4: + # Una vez pasadas las 2 comprobaciones, declarar dict vacío + # para después enumerar cuántas letras hay en el texto + contador = {} + # TODO 1.5: Imprimir texto solicitado + print(f"\nTexto recibido: {texto}\n") + + # TODO 1.6: Imprimir título de recorrido de letras antes del bucle + print(f"--- Recorriendo texto sin contar espacios... ---") + # TODO 1.7: Empezar bucle for que enumera las letras del texto + for i, letra in enumerate(texto, 1): + # TODO 1.7.1: Convertir las letras en minúsculas usando lower() + letra_min = letra.lower() + # TODO 1.7.2: Contar letras (ignoramos espacios y otros caracteres usando isalpha()) + if letra_min.isalpha(): + # TODO 1.7.3: Imprimir recorrido de la lista sin contar espacios ni otros caracteres + print(f"{i}: {letra}") + + # TODO 1.7.4: Verificar si la letra ya existe en el diccionario + if letra_min in contador: + # TODO 1.7.5: Aumentar su contador si la letra ya existe + contador[letra_min] += 1 + else: + # TODO 1.7.6: Crear con valor 1 si la letra NO existe todavía + contador[letra_min] = 1 + + # TODO 1.8: Retornar el diccionario con las letras recorridas + return contador + +# TODO 2: Crear funcion que muestre los resultados del contador +def mostrar_ocurrencias(contador): + + # TODO 2.1: Comprobar si hay contenido en el contador o no + if not contador: + print("No hay letras de texto para contar.") + return + # TODO 2.2: Seguir adelante si hay contenido + else: + # TODO 2.3: Imprimir contador + print(f"\nDiccionario con ocurrecias de letras: {contador}") + # TODO 2.4: Imprimir título del recorrido del diccionario del contador + print("\n--- Recorriendo diccionario... ---") + + # TODO 2.5: Empezar bucle for que recorre el contador de letras + for i, letra in enumerate(contador, 1): + # TODO 2.5.1: Comprobar si el número de veces que ha contado en cada carácter es 1 o más + if contador[letra] == 1: + # TODO 2.5.2: Imprimir que se ha contado una vez si el número de veces es 1. + print(f"Letra nº{i}: {letra} | Se ha contado {contador[letra]} vez.") + else: + # TODO 2.5.3: Imprimir que se contó muchas veces si el número es superior a 1. + print(f"Letra nº{i}: {letra} | Se han contado {contador[letra]} veces.") + + # TODO 2.6: Imprimir final del recorrido + print("\nFinal del recorrido!!") + +# TODO 3: Crear función principal +def main(): + # TODO 3.1: Imprimir título del ejercicio + print("--- Contador de letras ---") + # TODO 3.2: Pedir al usuario una frase + texto = input("\nIntroduce una frase --> ") + # TODO 3.3: Declarar variable para retornar un diccionario del texto pedido + contador = contar_letras(texto) + # Todo 3.4: Función para mostrar recorrido de las letras del texto + mostrar_ocurrencias(contador) + + +# TODO 4: Punto de entrada del programa +if __name__ == "__main__": + main() \ No newline at end of file From 397c93ff43107945cfb0e962e3ba6bf113ccc5b5 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 9 Nov 2025 20:46:24 +0100 Subject: [PATCH 280/323] feat: agregar ejercicio autonomo 4 en 05_colecciones --- 05_colecciones/autonomos/ejercicio4.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 05_colecciones/autonomos/ejercicio4.py diff --git a/05_colecciones/autonomos/ejercicio4.py b/05_colecciones/autonomos/ejercicio4.py new file mode 100644 index 0000000..1b76932 --- /dev/null +++ b/05_colecciones/autonomos/ejercicio4.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 4: Slicing y comprehensions simples de listas. +# Enunciado: Slicing y comprehensions simples de listas. \ No newline at end of file From d012886a44cba55a701b4c2f489dfaa397c4ba80 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 10 Nov 2025 17:18:55 +0100 Subject: [PATCH 281/323] feat: completar ejercicio autonomo 4 en 05_colecciones --- 05_colecciones/autonomos/ejercicio4.py | 98 +++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/05_colecciones/autonomos/ejercicio4.py b/05_colecciones/autonomos/ejercicio4.py index 1b76932..dfcfc79 100644 --- a/05_colecciones/autonomos/ejercicio4.py +++ b/05_colecciones/autonomos/ejercicio4.py @@ -1,2 +1,98 @@ # EJERCICIO AUTÓNOMO 4: Slicing y comprehensions simples de listas. -# Enunciado: Slicing y comprehensions simples de listas. \ No newline at end of file +# Enunciado: Slicing y comprensiones simples de listas. + +# TODO 1: Función que muestra contenido de slicing +def slicing(lista, texto): + print(f"\n--- Slicing de la lista --> {lista} ---") + + print("\nSintaxis de Slicing: lista[inicio:fin:paso]") + + # Slicing básico --> lista[inicio:fin] + print("\nEjemplos de slicing básicos (lista[inicio:fin])") + + print(f"\nNúmeros [2:6]: {lista[2:6]}") # Del índice 2 hasta el 5 (6 no incluído) + print(f"Números [:4]: {lista[:4]}") # Desde el principio hasta el índice 3 + print(f"Números [5:]: {lista[5:]}") # Desde el índice 5 hasta el final + print(f"Números [-3:]: {lista[-3:]}") # Los 3 últimos índices + print(f"Números [:-4]: {lista[:-4]}") # La lista excepto los 4 últimos índices + + # Slicing con paso --> lista[inicio:fin:paso] + print("\nEjemplos de slicing con paso (lista[inicio:fin:paso])") + + print(f"\nNúmeros [::2]: {lista[::2]}") # Todos, pero de 2 en 2 + print(f"Números [3::2]: {lista[3::2]}") # Desde el índice 3, de 2 en 2 + print(f"Números [::-1]: {lista[::-1]}") # Invertir la lista + + print(f"\n--- Slicing del texto --> {texto} ---") + print(f"String [0:6]: {texto[0:11]}") # Me encantan + print(f"String [12:]: {texto[12:]}") # los cachopos + print(f"String [::-1]: {texto[::-1]}") # Invierte el texto + +# TODO 2: Funcion que muestra contenido de compresiones +def comprensiones(lista, texto): + print(f"\n--- Comprensiones de la lista --> {lista} ---") + + print("\nFormato de las comprensiones: [expresion for elemento in lista]") + + print("\nEjemplos básicos:") + + print("\n1. Formato: [numero * 2 for numero in lista]") + dobles = [numero * 2 for numero in lista] + print(f"Lista de números multiplicados por dos: {dobles}") + + print("\n2. Formato: [numero ** 2 for numero in lista]") + cuadrados = [numero ** 2 for numero in lista] + print(f"Lista de números al cuadrado: {cuadrados}") + + print("\nEjemplos con condición --> Formato: [expresion for elemento in lista if condicion]") + + print("\n1. Formato: [numero for numero in lista if numero % 2 == 0]") + pares = [numero for numero in lista if numero % 2 == 0] + print(f"Lista de números pares: {pares}") + + print("\n2. Formato: [numero ** 3 for numero in lista if numero % 2 != 0]") + imparescubos = [numero ** 3 for numero in lista if numero % 2 != 0] + print(f"Lista de números impares al cubo: {imparescubos}") + + +def main(): + print("--- Slicing y compresiones simples de listas ---") + + lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + texto = "Me encantan los cachopos" + + print(f"\nLista predeterminada: {lista}") + print(f"Texto predefinido: {texto}") + + while True: + + print("\n1. Slicing de la lista") + print("2. Compresiones simples de la lista") + print("3. Salir") + + try: + opcion = int(input("\nElige una opcion --> ")) + + if opcion == 1: + print("Opción 1 confirmada!!") + slicing(lista, texto) + continue + elif opcion == 2: + print("Opcion 2 confirmada!!") + comprensiones(lista, texto) + continue + elif opcion == 3: + print("Opcion 3 confirmada!! Que tenga buen día!! ✨") + break + else: + print("❌ Opción no válida") + continue + + except ValueError: + print("❌ Opción no válida") + continue + + +# TODO 4: Punto de entrada del programa +if __name__ == "__main__": + main() \ No newline at end of file From 6be7bde5d8ef01957853a73beeab903c5c64fbe7 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 10 Nov 2025 17:21:14 +0100 Subject: [PATCH 282/323] feat: agregar ejercicio autonomo 5 en 05_colecciones --- 05_colecciones/autonomos/ejercicio4.py | 2 +- 05_colecciones/autonomos/ejercicio5.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 05_colecciones/autonomos/ejercicio5.py diff --git a/05_colecciones/autonomos/ejercicio4.py b/05_colecciones/autonomos/ejercicio4.py index dfcfc79..260fa0c 100644 --- a/05_colecciones/autonomos/ejercicio4.py +++ b/05_colecciones/autonomos/ejercicio4.py @@ -54,7 +54,7 @@ def comprensiones(lista, texto): imparescubos = [numero ** 3 for numero in lista if numero % 2 != 0] print(f"Lista de números impares al cubo: {imparescubos}") - +# TODO 3: Crear función principal def main(): print("--- Slicing y compresiones simples de listas ---") diff --git a/05_colecciones/autonomos/ejercicio5.py b/05_colecciones/autonomos/ejercicio5.py new file mode 100644 index 0000000..5aa7795 --- /dev/null +++ b/05_colecciones/autonomos/ejercicio5.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 5: Reporte de Gatos +# Enunciado: Imprime un reporte de gatos con `f-strings` a partir de un dict `{nombre: edad}`. \ No newline at end of file From 60480bf2c6f55e98cda275d3beb34bb68c156f3f Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 10 Nov 2025 17:57:11 +0100 Subject: [PATCH 283/323] feat: completar ejercicio autonomo 5 en 05_colecciones --- 05_colecciones/autonomos/ejercicio5.py | 62 +++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/05_colecciones/autonomos/ejercicio5.py b/05_colecciones/autonomos/ejercicio5.py index 5aa7795..1dd04a8 100644 --- a/05_colecciones/autonomos/ejercicio5.py +++ b/05_colecciones/autonomos/ejercicio5.py @@ -1,2 +1,62 @@ # EJERCICIO AUTÓNOMO 5: Reporte de Gatos -# Enunciado: Imprime un reporte de gatos con `f-strings` a partir de un dict `{nombre: edad}`. \ No newline at end of file +# Enunciado: Imprime un reporte de gatos con `f-strings` a partir de un dict `{nombre: edad}`. + +# TODO 1: Definir función que imprima un reporte de gatos +def reporte(dict): + for i, gato in enumerate(dict, 1): + print("----------------") + print(f"{i}º Gato:") + for clave, valor in gato.items(): + if clave == "nombre": + print(f"Su {clave} es {valor}.") + + if clave == "edad": + print(f"Tiene {valor} años.") + + + print("----------------") + +# TODO 2: Definir función principal +def main(): + print("--- Reporte de gatos ---\n") + + reporte_gatos = [ + {"nombre": "Michi", "edad": 24}, + {"nombre": "Leo", "edad": 3}, + {"nombre": "Nico", "edad": 8}, + {"nombre": "Chuchi", "edad": 3}, + {"nombre": "Chachito", "edad": 5}, + ] + + reporte(reporte_gatos) + + +# TODO 3: Punto de entrada del programa +if __name__ == "__main__": + main() + +# RESULTADO: +# --- Reporte de gatos --- +# +# ---------------- +# 1º Gato: +# Su nombre es Michi. +# Tiene 24 años. +# ---------------- +# 2º Gato: +# Su nombre es Leo. +# Tiene 3 años. +# ---------------- +# 3º Gato: +# Su nombre es Nico. +# Tiene 8 años. +# ---------------- +# 4º Gato: +# Su nombre es Chuchi. +# Tiene 3 años. +# ---------------- +# 5º Gato: +# Su nombre es Chachito. +# Tiene 5 años. +# ---------------- +# Éxito ✅ \ No newline at end of file From b3930ecbb1577e385b40710da91fb710a483cf0e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 10 Nov 2025 18:28:32 +0100 Subject: [PATCH 284/323] =?UTF-8?q?feat:=20agregar=20desaf=C3=ADo=20bigote?= =?UTF-8?q?s=20felices=20en=2005=5Fcolecciones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 05_colecciones/desafio/top-k.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 05_colecciones/desafio/top-k.py diff --git a/05_colecciones/desafio/top-k.py b/05_colecciones/desafio/top-k.py new file mode 100644 index 0000000..dd207cf --- /dev/null +++ b/05_colecciones/desafio/top-k.py @@ -0,0 +1,2 @@ +# DESAFÍO DE BIGOTES FELICES: Top-K +# Enunciado: Dada una lista de pesos de gatos, muestra los 3 más pesados. From 0c133ffd9e6e418a27918485888712c519bed157 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 10 Nov 2025 20:53:43 +0100 Subject: [PATCH 285/323] =?UTF-8?q?feat:=20completar=20desaf=C3=ADo=20bigo?= =?UTF-8?q?tes=20felices=20en=2005=5Fcolecciones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 05_colecciones/desafio/top-k.py | 58 +++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/05_colecciones/desafio/top-k.py b/05_colecciones/desafio/top-k.py index dd207cf..4c6632d 100644 --- a/05_colecciones/desafio/top-k.py +++ b/05_colecciones/desafio/top-k.py @@ -1,2 +1,60 @@ # DESAFÍO DE BIGOTES FELICES: Top-K # Enunciado: Dada una lista de pesos de gatos, muestra los 3 más pesados. + +# TODO 1: Función que imprime el recorrido de la lista de gatos +def imprimir(gatos): + + for i, gato in enumerate(gatos, 1): + print(f"{i}. Nombre: {gato['nombre']} | Peso: {gato['peso']} kg.") + +# TODO 2: Función que ordena de mayor a menor peso la lista de gatos +def los_tres_pesados(gatos): + + print("--- Listando gatos de menor a mayor... ---") + + gatos_ordenados = sorted(gatos, key=lambda p:p['peso'], reverse=True) + + return gatos_ordenados + +# TODO 3: Función que enumera los tres primeros gatos de una lista +def tres_primeros(gatos): + print("\n--- Listando los tres primeros gatos más pesados... ---") + + top_3 = gatos[:3] + + return top_3 + +# TODO 4: Función principal del programa +def main(): + print("--- DESAFÍO BIGOTES FELICES: Top-K ---") + + gatos = [ + {"nombre": "Michi", "peso": 4.5}, + {"nombre": "Luna", "peso": 3.2}, + {"nombre": "Pelusa", "peso": 5.8}, + {"nombre": "Garfield", "peso": 7.3}, + {"nombre": "Simba", "peso": 4.1}, + {"nombre": "Nala", "peso": 6.2}, + {"nombre": "Tom", "peso": 3.8}, + {"nombre": "Felix", "peso": 5.5} + ] + + print("\n--- Lista de gatos ---") + + imprimir(gatos) + + gatos_pesados = los_tres_pesados(gatos) + + print("\n--- Lista de gatos pesados de mayor a menor ---") + + imprimir(gatos_pesados) + + top_tres = tres_primeros(gatos_pesados) + + print("\n--- 👑 Top 3 Gatos Pesados 👑 ---") + + imprimir(top_tres) + +# TODO 5: Punto de entrada del programa +if __name__ == "__main__": + main() \ No newline at end of file From 0958e868e8da32621fdfa9c38d886b1338b0465e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 10 Nov 2025 20:56:08 +0100 Subject: [PATCH 286/323] docs: desafio bigotes felices en 05_colecciones --- 05_colecciones/desafio/top-k.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05_colecciones/desafio/top-k.py b/05_colecciones/desafio/top-k.py index 4c6632d..ed7b98b 100644 --- a/05_colecciones/desafio/top-k.py +++ b/05_colecciones/desafio/top-k.py @@ -10,7 +10,7 @@ def imprimir(gatos): # TODO 2: Función que ordena de mayor a menor peso la lista de gatos def los_tres_pesados(gatos): - print("--- Listando gatos de menor a mayor... ---") + print("\n--- Listando gatos de menor a mayor... ---") gatos_ordenados = sorted(gatos, key=lambda p:p['peso'], reverse=True) From 75f5a2395afa0dd19bf38dc20648c7d76a51f09b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 10 Nov 2025 21:41:29 +0100 Subject: [PATCH 287/323] feat: completar calculadora v6 en 06_archivos_y_modulos --- .../ejercicio_guiado/calculadora_v6.py | 98 +++++++++++++++++-- 1 file changed, 91 insertions(+), 7 deletions(-) diff --git a/06_archivos_y_modulos/ejercicio_guiado/calculadora_v6.py b/06_archivos_y_modulos/ejercicio_guiado/calculadora_v6.py index 27d34ed..e3fb8ab 100644 --- a/06_archivos_y_modulos/ejercicio_guiado/calculadora_v6.py +++ b/06_archivos_y_modulos/ejercicio_guiado/calculadora_v6.py @@ -21,8 +21,8 @@ """ # TODO 1: Importa el módulo json -# import json - +# import json, os +import json, os # Nombre del archivo donde se guardará el historial ARCHIVO_HISTORIAL = "historial_calculadora.json" @@ -121,8 +121,21 @@ def cargar_historial(): # print("⚠️ Archivo de historial corrupto, iniciando uno nuevo") # return [] - pass - return [] # Borra esto cuando implementes la función + try: + with open(ARCHIVO_HISTORIAL, "r", encoding="utf-8") as archivo: + datos = json.load(archivo) + print(f"✅ Historial cargado: {len(datos)} operaciones") + return datos + except FileNotFoundError: + # El archivo no existe (primera vez que se ejecuta) + print("🗒️ No hay historial previo, iniciando uno nuevo") + return [] + except json.JSONDecodeError: + # El archivo existe pero está corrupto + print("❌ Archivo de historial corrupto, iniciando uno nuevo") + return [] + + # pass --> sentencia nula def guardar_historial_archivo(): @@ -137,7 +150,16 @@ def guardar_historial_archivo(): # except Exception as e: # print(f"❌ Error al guardar el historial: {e}") - pass + try: + with open(ARCHIVO_HISTORIAL, "w", encoding="utf-8") as archivo: + # indent=2 hace que el JSON sea más legible + # ensure_ascii=False permite emojis y carácteres especiales + json.dump(historial, archivo, indent=2, ensure_ascii=False) + print("✅ Historial guardado correctamente") + except Exception as e: + print(f"❌ Error al guardar el historial: {e}") + + # pass --> sentencia nula def limpiar_historial(): @@ -151,9 +173,16 @@ def limpiar_historial(): # print("❌ Operación cancelada") # return + confirmacion = input("❗ ¿Estás seguro de que quieres limpiar el historial? (s/n): ") + if confirmacion.lower() != "s": + print("❌ Operación cancelada") + return + # Vacía la lista en memoria # historial = [] + historial = [] + # Elimina el archivo si existe # try: # if os.path.exists(ARCHIVO_HISTORIAL): @@ -162,7 +191,14 @@ def limpiar_historial(): # except Exception as e: # print(f"❌ Error al eliminar el archivo: {e}") - pass + try: + if os.path.exists(ARCHIVO_HISTORIAL): + os.remove(ARCHIVO_HISTORIAL) + print("🗑️ Historial limpiado correctamente") + except Exception as e: + print(f"❌ Error al eliminar el archivo: {e}") + + # pass --> Sentencia nula # ===== FUNCIÓN PRINCIPAL ===== @@ -175,10 +211,18 @@ def main(): # print("🔄 Cargando historial...") # historial = cargar_historial() + global historial + print("🔄 Cargando historial...") + historial = cargar_historial() + # while True: # mostrar_menu() # opcion = input("\nElige una opción: ") + while True: + mostrar_menu() + opcion = input("\nElige una opción: ") + # TODO 6: Actualiza la condición de salir (ahora es opción 7) # if opcion == "7": # print("💾 Guardando historial...") @@ -186,27 +230,51 @@ def main(): # print("¡Hasta pronto! 👋") # break + if opcion == "7": + print("💾 Guardando historial...") + guardar_historial_archivo() + print("¡Hasta pronto! 👋") + break + # TODO 7: Añade la opción 5 (ver historial) # if opcion == "5": # mostrar_historial() # continue + if opcion == "5": + mostrar_historial() + continue + # TODO 8: Añade la opción 6 (limpiar historial) # if opcion == "6": # limpiar_historial() # continue + if opcion == "6": + limpiar_historial() + continue + # TODO 9: Actualiza la validación de opciones (ahora son 1-6) # if opcion not in ["1", "2", "3", "4", "5", "6"]: # print("❌ Opción no válida") # continue + if opcion not in ["1", "2", "3", "4", "5", "6"]: + print("❌ Opción no válida") + continue + # num1, num2 = obtener_numeros() + num1, num2 = obtener_numeros() + # if opcion == "4" and num2 == 0: # print("❌ No se puede dividir por cero") # continue + if opcion == "4" and num2 == 0: + print("❌ No se puede dividir entre 0") + continue + # if opcion == "1": # resultado = sumar(num1, num2) # simbolo = "+" @@ -220,10 +288,26 @@ def main(): # resultado = dividir(num1, num2) # simbolo = "/" + if opcion == "1": + resultado = sumar(num1, num2) + simbolo = "+" + elif opcion == "2": + resultado = restar(num1, num2) + simbolo = "-" + elif opcion == "3": + resultado = multiplicar(num1, num2) + simbolo = "*" + elif opcion == "4": + resultado = dividir(num1, num2) + simbolo = "/" + # print(f"✅ {num1} {simbolo} {num2} = {resultado:.2f}") # guardar_operacion(num1, num2, simbolo, resultado) - pass + print(f"✅ {num1} {simbolo} {num2} = {resultado:.2f}") + guardar_operacion(num1, num2, simbolo, resultado) + + # pass --> sentencia nula if __name__ == "__main__": From ebd7c66e3b24f1a74b44ef2eeb1cd71733c48009 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 11 Nov 2025 09:25:37 +0100 Subject: [PATCH 288/323] feat: agregar ejercicio guiado 1 en 06_archivos_y_modulos --- .../guiado/escribir_archivo.py | 6 ++++ historial_calculadora.json | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 06_archivos_y_modulos/guiado/escribir_archivo.py create mode 100644 historial_calculadora.json diff --git a/06_archivos_y_modulos/guiado/escribir_archivo.py b/06_archivos_y_modulos/guiado/escribir_archivo.py new file mode 100644 index 0000000..6f87314 --- /dev/null +++ b/06_archivos_y_modulos/guiado/escribir_archivo.py @@ -0,0 +1,6 @@ +# EJERCICIO GUIADO 1: Escribir archivo +# ENUNCIADO: Crea `escribir.txt` con tres líneas. + +# Abrir un archivo para leer +leer = open("escribir.txt", "r") + diff --git a/historial_calculadora.json b/historial_calculadora.json new file mode 100644 index 0000000..b15798d --- /dev/null +++ b/historial_calculadora.json @@ -0,0 +1,32 @@ +[ + { + "num1": 3.0, + "num2": 9.0, + "operacion": "+", + "resultado": 12.0 + }, + { + "num1": 9.0, + "num2": 34.0, + "operacion": "*", + "resultado": 306.0 + }, + { + "num1": 10.0, + "num2": 3.0, + "operacion": "/", + "resultado": 3.3333333333333335 + }, + { + "num1": 34.0, + "num2": 12.0, + "operacion": "-", + "resultado": 22.0 + }, + { + "num1": 4.0, + "num2": 3.0, + "operacion": "+", + "resultado": 7.0 + } +] \ No newline at end of file From 8945e88d047a42f91946eeb8cda1ed2c71241c50 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 11 Nov 2025 11:17:33 +0100 Subject: [PATCH 289/323] feat: completar ejercicio guiado 1 en 06_archivos_y_modulos --- .../guiado/escribir_archivo.py | 36 +++++++++++++++++-- escribir.txt | 3 ++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 escribir.txt diff --git a/06_archivos_y_modulos/guiado/escribir_archivo.py b/06_archivos_y_modulos/guiado/escribir_archivo.py index 6f87314..3895b55 100644 --- a/06_archivos_y_modulos/guiado/escribir_archivo.py +++ b/06_archivos_y_modulos/guiado/escribir_archivo.py @@ -1,6 +1,38 @@ # EJERCICIO GUIADO 1: Escribir archivo # ENUNCIADO: Crea `escribir.txt` con tres líneas. -# Abrir un archivo para leer -leer = open("escribir.txt", "r") +ARCHIVOTXT = "escribir.txt" + +try: + with open(ARCHIVOTXT, "w") as archivo: + + # Escribir contenido en el archivo + archivo.write("Hola, que tal?") + archivo.write("\nMe encantan los cachopos") + archivo.write("\nY también los chipis") + + # Cerrar el archivo + archivo.close() + print("\n✅ Creado y escrito el archivo correctamente.") +except Exception as e: + print("\n❌ Error al escribir en el archivo txt: {e}") + +try: + with open(ARCHIVOTXT, "r") as archivo: + + print("\nLeyendo archivo...") + + # Leer el contenido del archivo + contenido = archivo.read() + + # Imprimir el contenido + print(contenido) + + # Cerrar el archivo + archivo.close() + + print("\nArchivo leído correcto ✅") +except FileNotFoundError: + print("❌ Archivo no encontrado") + diff --git a/escribir.txt b/escribir.txt new file mode 100644 index 0000000..4c66d32 --- /dev/null +++ b/escribir.txt @@ -0,0 +1,3 @@ +Hola, que tal? +Me encantan los cachopos +Y tambin los chipis \ No newline at end of file From e93685b8fb8052cc50be3be3b110eba3eeb6a961 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 11 Nov 2025 11:30:22 +0100 Subject: [PATCH 290/323] feat: agregar ejercicio guiado 2 en 06_archivos_y_modulos --- 06_archivos_y_modulos/guiado/leer_archivo.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 06_archivos_y_modulos/guiado/leer_archivo.py diff --git a/06_archivos_y_modulos/guiado/leer_archivo.py b/06_archivos_y_modulos/guiado/leer_archivo.py new file mode 100644 index 0000000..9df3436 --- /dev/null +++ b/06_archivos_y_modulos/guiado/leer_archivo.py @@ -0,0 +1,3 @@ +# EJERCICIO GUIADO 2: Leer archivo +# ENUNCIADO: Lee `escribir.txt` e imprime las líneas numeradas. + From b4749fd4fd6e268b545e1e02e98c5d775b2a64c4 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 11 Nov 2025 11:50:23 +0100 Subject: [PATCH 291/323] feat: completar ejercicio guiado 2 en 06_archivos_y_modulo --- 06_archivos_y_modulos/guiado/leer_archivo.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/06_archivos_y_modulos/guiado/leer_archivo.py b/06_archivos_y_modulos/guiado/leer_archivo.py index 9df3436..d3ca99d 100644 --- a/06_archivos_y_modulos/guiado/leer_archivo.py +++ b/06_archivos_y_modulos/guiado/leer_archivo.py @@ -1,3 +1,20 @@ # EJERCICIO GUIADO 2: Leer archivo # ENUNCIADO: Lee `escribir.txt` e imprime las líneas numeradas. +ARCHIVOTXT = 'escribir.txt' + +try: + with open(ARCHIVOTXT, 'r') as archivo: + lineas = archivo.readlines() + + print("\nContenido del archivo: ") + + for numero, linea in enumerate(lineas, 1): + # Usamos .rstrip() para eliminar el salto de línea al final + print(f"{numero}. {linea.rstrip()}") + + print(f"\n--- Información del archivo ---") + print(f"Total de líneas: {len(lineas)}") + +except FileNotFoundError: + print("❌ No se encontró el archivo") \ No newline at end of file From 60feb6fcc66c6a9228b057c5db7606cb79c4f869 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 11 Nov 2025 11:52:29 +0100 Subject: [PATCH 292/323] feat: agregar ejercicio autonomo 1 en 06_archivos_y_modulos --- 06_archivos_y_modulos/autonomos/ejercicio1.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 06_archivos_y_modulos/autonomos/ejercicio1.py diff --git a/06_archivos_y_modulos/autonomos/ejercicio1.py b/06_archivos_y_modulos/autonomos/ejercicio1.py new file mode 100644 index 0000000..8e6d093 --- /dev/null +++ b/06_archivos_y_modulos/autonomos/ejercicio1.py @@ -0,0 +1,2 @@ +# EJERCICIO AUTÓNOMO 1: Gatos CVS +# Enunciado: Guarda un resumen de gatos en `gatos.csv` (separado por comas). \ No newline at end of file From 39f0c21c12788752fdf61d9eff5aae7438a16805 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 12 Nov 2025 10:57:49 +0100 Subject: [PATCH 293/323] feat: completar ejercicio autonomo 1 en 06_archivos_y_modulos --- 06_archivos_y_modulos/autonomos/ejercicio1.py | 80 ++++++++++++++++++- gatos.csv | 8 ++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 gatos.csv diff --git a/06_archivos_y_modulos/autonomos/ejercicio1.py b/06_archivos_y_modulos/autonomos/ejercicio1.py index 8e6d093..0ce6427 100644 --- a/06_archivos_y_modulos/autonomos/ejercicio1.py +++ b/06_archivos_y_modulos/autonomos/ejercicio1.py @@ -1,2 +1,80 @@ # EJERCICIO AUTÓNOMO 1: Gatos CVS -# Enunciado: Guarda un resumen de gatos en `gatos.csv` (separado por comas). \ No newline at end of file +# Enunciado: Guarda un resumen de gatos en `gatos.csv` (separado por comas). + +# Variables previos +# TODO 1: Declaramos una lista de diccionarios que almacenan una lista de gatos +lista_gatos = [ + {"nombre": "Michi", "edad": 3, "peso": 4.5, "color": "Naranja"}, + {"nombre": "Luna", "edad": 7, "peso": 3.2, "color": "Blanco"}, + {"nombre": "Pelusa", "edad": 2, "peso": 5.8, "color": "Gris"}, + {"nombre": "Garfield", "edad": 8, "peso": 7.3, "color": "Naranja"}, + {"nombre": "Simba", "edad": 5, "peso": 4.1, "color": "Marrón"}, + {"nombre": "Nala", "edad": 10, "peso": 6.2, "color": "Negro"}, + {"nombre": "Tom", "edad": 4, "peso": 3.8, "color": "Gris"} +] + +# TODO 2: Recorremos la lista de gatos que queremos guardar en el archivo csv +print("--- Gatos a guardar ---") +for i, gato in enumerate(lista_gatos, 1): + print(f"{i}. Nombre: {gato['nombre']} | Edad: {gato['edad']} años | Peso: {gato['peso']} kg | Color: {gato['color']}") + +# Guardar información en formato CSV +# TODO 1: Empezamos primero por importar el módulo csv +import csv + +# TODO 2: Crear y Escribir el contenido del archivo 'gatos.csv' +try: + print("\nCreando archivo...") + # TODO 2.1: Abrir archivo con permiso de escritura ("w") + # newline="" --> siempre se usa con archivo CSV para evitar problemas con los saltos de línea + # encoding="utf-8" --> evita problemas de codificación en el diccionario + with open("gatos.csv", "w", newline="", encoding="utf-8") as archivo: + + # Definimos nombres de las columnas + campos = ["nombre", "edad", "peso", "color"] + # Creamos el escritor CSV + # csv.DictWriter --> Objeto "escritor" especializado para escribir diccionarios en formato CSV + # archivo --> 1º parámetro con el archivo abierto donde se escribirá + # fieldnames=campos --> 2º parámetro con la lista con los nombres de las columnas del CSV + escritor = csv.DictWriter(archivo, fieldnames=campos) + + # Escribimos la cabecera + # writeheader() --> Escribe la primera línea del CSV con los nombres de las columnas (la cabecera) + # Resultado --> nombre,edad,peso,color + # ⚠️ Importante: Solo se llama UNA vez al inicio. + escritor.writeheader() + + # Escribimos todas las filas + # writerows(lista_gatos) --> Escribe múltiples filas a la vez. + # Toma una lista de diccionarios y escribe cada uno como una línea del CSV + # RESULTADO: + # Michi,3,4.5,Naranja + # Luna,7,3.2,Blanco + # ... + escritor.writerows(lista_gatos) + + print("\n✅ Archivo 'gatos.csv' creado con éxito con módulo csv!") +except Exception as e: + print(f"❌ Hay un error al guardar datos: {e}") + +# TODO 3: Leer y Mostrar el contenido del archivo csv creado +try: + print("\nLeyendo archivo...") + with open("gatos.csv", "r", encoding="utf-8") as archivo: + # Leeremos el contenido del archivo + contenido = archivo.read() + print(f"\n{contenido}") + + with open("gatos.csv", "r", encoding="utf-8") as archivo: + # Contamos las líneas (gatos + cabecera) + lineas = archivo.readlines() + print(f"Total de líneas: {len(lineas)}") + print(f"Total de gatos guardados: {len(lineas) - 1}") + + print("\n✅ Archivo leído correctamente.") + + +except FileNotFoundError: + print("❌ Archivo no encontrado.") +except Exception as e: + print(f"❌ Error al leer el archivo: {e}") \ No newline at end of file diff --git a/gatos.csv b/gatos.csv new file mode 100644 index 0000000..aef2886 --- /dev/null +++ b/gatos.csv @@ -0,0 +1,8 @@ +nombre,edad,peso,color +Michi,3,4.5,Naranja +Luna,7,3.2,Blanco +Pelusa,2,5.8,Gris +Garfield,8,7.3,Naranja +Simba,5,4.1,Marrón +Nala,10,6.2,Negro +Tom,4,3.8,Gris From 6021f404a0a9c2c8be47ae1fae47635300a776ba Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 12 Nov 2025 10:59:47 +0100 Subject: [PATCH 294/323] feat: agregar ejercicio autonomo 2 en 06_archivos_y_modulos --- 06_archivos_y_modulos/autonomos/ejercicio2.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 06_archivos_y_modulos/autonomos/ejercicio2.py diff --git a/06_archivos_y_modulos/autonomos/ejercicio2.py b/06_archivos_y_modulos/autonomos/ejercicio2.py new file mode 100644 index 0000000..4ba363d --- /dev/null +++ b/06_archivos_y_modulos/autonomos/ejercicio2.py @@ -0,0 +1,3 @@ +# EJERCICIO AUTÓNOMO 2: Módulo 'utiles.py' +# Enunciado: Crea un módulo `utiles.py` con `leer_lineas(ruta)` y `guardar_lineas(ruta, lineas)`. + From 5d9f175f272dd1dce09343a409bc00c26fbbe323 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 12 Nov 2025 12:25:14 +0100 Subject: [PATCH 295/323] feat: completar ejercicio autonomo 2 en 06_archivos_y_modulos --- 06_archivos_y_modulos/autonomos/ejercicio2.py | 46 +++++++++++++++++++ 06_archivos_y_modulos/autonomos/utiles.py | 36 +++++++++++++++ gatos.txt | 4 ++ tarea.txt | 4 ++ tarea1.txt | 0 5 files changed, 90 insertions(+) create mode 100644 06_archivos_y_modulos/autonomos/utiles.py create mode 100644 gatos.txt create mode 100644 tarea.txt create mode 100644 tarea1.txt diff --git a/06_archivos_y_modulos/autonomos/ejercicio2.py b/06_archivos_y_modulos/autonomos/ejercicio2.py index 4ba363d..3bd5e4f 100644 --- a/06_archivos_y_modulos/autonomos/ejercicio2.py +++ b/06_archivos_y_modulos/autonomos/ejercicio2.py @@ -1,3 +1,49 @@ # EJERCICIO AUTÓNOMO 2: Módulo 'utiles.py' # Enunciado: Crea un módulo `utiles.py` con `leer_lineas(ruta)` y `guardar_lineas(ruta, lineas)`. +# TODO 1: Importamos las funciones del módulo 'utiles.py' +from utiles import leer_lineas, guardar_lineas + +# TODO 2: Ejemplo Nº 1 de lista de tareas +print("\nEjemplo 1 de guardar tareas:") + +# Definimos lista de tareas +tareas = [ + "Estudiar Python", + "Hacer la cama", + "Comer cachopo" +] + +# Definimos nombre de archivo txt +archivoTxt = "tarea.txt" + +# Función para guardar las líneas de la lista en el archivo txt +guardar_lineas(archivoTxt, tareas) + +# Función que lee las líneas en el archivo txt +leer_lineas(archivoTxt) + +# TODO 2: Ejemplo Nº2 de registro de gatos +print("\nEjemplo 2 de registro de gatos:") + +# Definimos lista de gatos +gatos = [ + "Leo - 6 años - 5.6 kg", + "Niko - 5 años - 6.5 kg", + "Chachito - 7 años - 7.0 kg" +] + +# Definimos nombre de archivo txt +gatosTxt = "gatos.txt" + +# Función para guardar las líneas de la lista en el archivo txt +guardar_lineas(gatosTxt, gatos) + +# Función de lectura de líneas de los gatos en el archivo txt +leer_lineas(gatosTxt) + +# Comprobar la lista de gatos +if gatos: + print(f"\nRegistro de gatos ({len(gatos)} gatos):") + for gato in gatos: + print(f" 🐱 {gato}") diff --git a/06_archivos_y_modulos/autonomos/utiles.py b/06_archivos_y_modulos/autonomos/utiles.py new file mode 100644 index 0000000..06f0784 --- /dev/null +++ b/06_archivos_y_modulos/autonomos/utiles.py @@ -0,0 +1,36 @@ +# utiles.py +# Módulo donde se almacena funciones útiles para leer y escribir archivos + +# TODO 1: Función que lee el contenido del archivo y las líneas de texto que contiene +def leer_lineas(ruta): + try: + print("Leyendo archivo...") + with open(ruta, 'r', encoding="utf-8") as archivo: + + contenido = archivo.read() + print(contenido) + + print("\nContando número de líneas:") + with open(ruta, 'r', encoding="utf-8") as archivo: + + lineas = archivo.readlines() + print(len(lineas) - 1) + + print(f"Archivo {ruta} corregido con éxito ✅") + + except FileNotFoundError: + print("❌ Archivo no encontrado") + except Exception as e: + print(f"\n❌ Error al leer el archivo: {e}") + +def guardar_lineas(ruta, lineas): + try: + print("Escribiendo archivo...\n") + with open(ruta, 'w', encoding="utf-8") as archivo: + + for linea in lineas: + archivo.write(f"\n{linea}") + + print(f"Archivo {ruta} creado con éxito ✅") + except Exception as e: + print(f"\n❌ Error al escribir el archivo: {e}") diff --git a/gatos.txt b/gatos.txt new file mode 100644 index 0000000..8c5d898 --- /dev/null +++ b/gatos.txt @@ -0,0 +1,4 @@ + +Leo - 6 años - 5.6 kg +Niko - 5 años - 6.5 kg +Chachito - 7 años - 7.0 kg \ No newline at end of file diff --git a/tarea.txt b/tarea.txt new file mode 100644 index 0000000..335e2c1 --- /dev/null +++ b/tarea.txt @@ -0,0 +1,4 @@ + +Estudiar Python +Hacer la cama +Comer cachopo \ No newline at end of file diff --git a/tarea1.txt b/tarea1.txt new file mode 100644 index 0000000..e69de29 From 2b69f7c79dbc678cd423775eb25a780d59d2752d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 12 Nov 2025 12:38:14 +0100 Subject: [PATCH 296/323] feat: agregar ejercicio autonomo 3 en 06_archivos_y_modulos --- 06_archivos_y_modulos/autonomos/ejercicio3/ejercicio3.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 06_archivos_y_modulos/autonomos/ejercicio3/ejercicio3.md diff --git a/06_archivos_y_modulos/autonomos/ejercicio3/ejercicio3.md b/06_archivos_y_modulos/autonomos/ejercicio3/ejercicio3.md new file mode 100644 index 0000000..7fcb563 --- /dev/null +++ b/06_archivos_y_modulos/autonomos/ejercicio3/ejercicio3.md @@ -0,0 +1,3 @@ +## Ejercicio Autónomo Nº 3 + +Usa `utiles` desde otro script `app.py`. From 42baa4a683aac7177442d43b424511c7f8bfc1be Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 12 Nov 2025 13:21:52 +0100 Subject: [PATCH 297/323] fix: ejercicio 2 & feat: progresando ejercicio 3 en 06_archivos_y_modulos --- 06_archivos_y_modulos/autonomos/ejercicio2.py | 3 ++ .../autonomos/ejercicio3/app.py | 25 +++++++++++++ .../autonomos/ejercicio3/utiles.py | 36 +++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 06_archivos_y_modulos/autonomos/ejercicio3/app.py create mode 100644 06_archivos_y_modulos/autonomos/ejercicio3/utiles.py diff --git a/06_archivos_y_modulos/autonomos/ejercicio2.py b/06_archivos_y_modulos/autonomos/ejercicio2.py index 3bd5e4f..b82a406 100644 --- a/06_archivos_y_modulos/autonomos/ejercicio2.py +++ b/06_archivos_y_modulos/autonomos/ejercicio2.py @@ -4,6 +4,9 @@ # TODO 1: Importamos las funciones del módulo 'utiles.py' from utiles import leer_lineas, guardar_lineas +# TODO 2: Imprimir titulo del ejercicio +print("--- Módulo utiles.py ---") + # TODO 2: Ejemplo Nº 1 de lista de tareas print("\nEjemplo 1 de guardar tareas:") diff --git a/06_archivos_y_modulos/autonomos/ejercicio3/app.py b/06_archivos_y_modulos/autonomos/ejercicio3/app.py new file mode 100644 index 0000000..88ac103 --- /dev/null +++ b/06_archivos_y_modulos/autonomos/ejercicio3/app.py @@ -0,0 +1,25 @@ +# app.py +# Script para utilizar las funciones de 'utiles.py' + +# TODO 1: Importar funciones de utiles +from utiles import leer_lineas, guardar_lineas + +# TODO 2: Imprimir título de app.py +print("--- APP ---") + +# TODO 3: Ejemplos básicos + +# Nº1 Gestión de tareas + +tareas = [ + "Despertarme a las 8:30", + "Estudiar hasta las 14:30", + "Jugar Pokemon hasta las 21:30", + "Dormir hasta el día siguiente" +] + +tareaTxt = "tarea.txt" + +guardar_lineas(tareaTxt, tareas) + +leer_lineas() \ No newline at end of file diff --git a/06_archivos_y_modulos/autonomos/ejercicio3/utiles.py b/06_archivos_y_modulos/autonomos/ejercicio3/utiles.py new file mode 100644 index 0000000..06f0784 --- /dev/null +++ b/06_archivos_y_modulos/autonomos/ejercicio3/utiles.py @@ -0,0 +1,36 @@ +# utiles.py +# Módulo donde se almacena funciones útiles para leer y escribir archivos + +# TODO 1: Función que lee el contenido del archivo y las líneas de texto que contiene +def leer_lineas(ruta): + try: + print("Leyendo archivo...") + with open(ruta, 'r', encoding="utf-8") as archivo: + + contenido = archivo.read() + print(contenido) + + print("\nContando número de líneas:") + with open(ruta, 'r', encoding="utf-8") as archivo: + + lineas = archivo.readlines() + print(len(lineas) - 1) + + print(f"Archivo {ruta} corregido con éxito ✅") + + except FileNotFoundError: + print("❌ Archivo no encontrado") + except Exception as e: + print(f"\n❌ Error al leer el archivo: {e}") + +def guardar_lineas(ruta, lineas): + try: + print("Escribiendo archivo...\n") + with open(ruta, 'w', encoding="utf-8") as archivo: + + for linea in lineas: + archivo.write(f"\n{linea}") + + print(f"Archivo {ruta} creado con éxito ✅") + except Exception as e: + print(f"\n❌ Error al escribir el archivo: {e}") From 589ec23aab43141e8f8e2465fb86daeb7b5ce11b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 12 Nov 2025 13:35:57 +0100 Subject: [PATCH 298/323] feat: completar ejercicio autonomo 3 & docs: utiles.py en 06_modulos_y_archivos --- 06_archivos_y_modulos/autonomos/ejercicio3/app.py | 7 ++++--- 06_archivos_y_modulos/autonomos/ejercicio3/utiles.py | 1 + 06_archivos_y_modulos/autonomos/utiles.py | 1 + tarea.txt | 7 ++++--- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/06_archivos_y_modulos/autonomos/ejercicio3/app.py b/06_archivos_y_modulos/autonomos/ejercicio3/app.py index 88ac103..a9f44e1 100644 --- a/06_archivos_y_modulos/autonomos/ejercicio3/app.py +++ b/06_archivos_y_modulos/autonomos/ejercicio3/app.py @@ -7,9 +7,10 @@ # TODO 2: Imprimir título de app.py print("--- APP ---") -# TODO 3: Ejemplos básicos +# TODO 3: Ejemplo básico -# Nº1 Gestión de tareas +# Gestión de tareas +print("\nEjemplo 1: Gestión de Tareas") tareas = [ "Despertarme a las 8:30", @@ -22,4 +23,4 @@ guardar_lineas(tareaTxt, tareas) -leer_lineas() \ No newline at end of file +leer_lineas(tareaTxt) diff --git a/06_archivos_y_modulos/autonomos/ejercicio3/utiles.py b/06_archivos_y_modulos/autonomos/ejercicio3/utiles.py index 06f0784..b3259f9 100644 --- a/06_archivos_y_modulos/autonomos/ejercicio3/utiles.py +++ b/06_archivos_y_modulos/autonomos/ejercicio3/utiles.py @@ -23,6 +23,7 @@ def leer_lineas(ruta): except Exception as e: print(f"\n❌ Error al leer el archivo: {e}") +# TODO 2: Función para guardar las líneas a un archivo específico def guardar_lineas(ruta, lineas): try: print("Escribiendo archivo...\n") diff --git a/06_archivos_y_modulos/autonomos/utiles.py b/06_archivos_y_modulos/autonomos/utiles.py index 06f0784..b3259f9 100644 --- a/06_archivos_y_modulos/autonomos/utiles.py +++ b/06_archivos_y_modulos/autonomos/utiles.py @@ -23,6 +23,7 @@ def leer_lineas(ruta): except Exception as e: print(f"\n❌ Error al leer el archivo: {e}") +# TODO 2: Función para guardar las líneas a un archivo específico def guardar_lineas(ruta, lineas): try: print("Escribiendo archivo...\n") diff --git a/tarea.txt b/tarea.txt index 335e2c1..b4480de 100644 --- a/tarea.txt +++ b/tarea.txt @@ -1,4 +1,5 @@ -Estudiar Python -Hacer la cama -Comer cachopo \ No newline at end of file +Despertarme a las 8:30 +Estudiar hasta las 14:30 +Jugar Pokemon hasta las 21:30 +Dormir hasta el día siguiente \ No newline at end of file From 784d7e6952892a58c6e638bd0f7c1770296608e2 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 12 Nov 2025 13:38:24 +0100 Subject: [PATCH 299/323] feat: agregar ejercicio autonomo 4 en 06_archivo_y_modulos --- .../autonomos/ejercicio4/app.py | 0 .../autonomos/ejercicio4/ejercicio4.md | 3 ++ .../autonomos/ejercicio4/utiles.py | 37 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 06_archivos_y_modulos/autonomos/ejercicio4/app.py create mode 100644 06_archivos_y_modulos/autonomos/ejercicio4/ejercicio4.md create mode 100644 06_archivos_y_modulos/autonomos/ejercicio4/utiles.py diff --git a/06_archivos_y_modulos/autonomos/ejercicio4/app.py b/06_archivos_y_modulos/autonomos/ejercicio4/app.py new file mode 100644 index 0000000..e69de29 diff --git a/06_archivos_y_modulos/autonomos/ejercicio4/ejercicio4.md b/06_archivos_y_modulos/autonomos/ejercicio4/ejercicio4.md new file mode 100644 index 0000000..635f552 --- /dev/null +++ b/06_archivos_y_modulos/autonomos/ejercicio4/ejercicio4.md @@ -0,0 +1,3 @@ +## Ejercicio Autónomo Nº 4 + +Maneja `FileNotFoundError` de forma amable. \ No newline at end of file diff --git a/06_archivos_y_modulos/autonomos/ejercicio4/utiles.py b/06_archivos_y_modulos/autonomos/ejercicio4/utiles.py new file mode 100644 index 0000000..b3259f9 --- /dev/null +++ b/06_archivos_y_modulos/autonomos/ejercicio4/utiles.py @@ -0,0 +1,37 @@ +# utiles.py +# Módulo donde se almacena funciones útiles para leer y escribir archivos + +# TODO 1: Función que lee el contenido del archivo y las líneas de texto que contiene +def leer_lineas(ruta): + try: + print("Leyendo archivo...") + with open(ruta, 'r', encoding="utf-8") as archivo: + + contenido = archivo.read() + print(contenido) + + print("\nContando número de líneas:") + with open(ruta, 'r', encoding="utf-8") as archivo: + + lineas = archivo.readlines() + print(len(lineas) - 1) + + print(f"Archivo {ruta} corregido con éxito ✅") + + except FileNotFoundError: + print("❌ Archivo no encontrado") + except Exception as e: + print(f"\n❌ Error al leer el archivo: {e}") + +# TODO 2: Función para guardar las líneas a un archivo específico +def guardar_lineas(ruta, lineas): + try: + print("Escribiendo archivo...\n") + with open(ruta, 'w', encoding="utf-8") as archivo: + + for linea in lineas: + archivo.write(f"\n{linea}") + + print(f"Archivo {ruta} creado con éxito ✅") + except Exception as e: + print(f"\n❌ Error al escribir el archivo: {e}") From 16b7584cbde8d90025af88e634c0a339b6dfc0fa Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 12 Nov 2025 13:46:13 +0100 Subject: [PATCH 300/323] feat: completar ejercicio autonomo 4 en 06_archivos_y_modulos --- .../autonomos/ejercicio4/app.py | 36 +++++++++++++++++++ .../autonomos/ejercicio4/utiles.py | 6 ++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/06_archivos_y_modulos/autonomos/ejercicio4/app.py b/06_archivos_y_modulos/autonomos/ejercicio4/app.py index e69de29..24c73af 100644 --- a/06_archivos_y_modulos/autonomos/ejercicio4/app.py +++ b/06_archivos_y_modulos/autonomos/ejercicio4/app.py @@ -0,0 +1,36 @@ +# app.py +# Script para utilizar las funciones de 'utiles.py' + +# TODO 1: Importar funciones de utiles +from utiles import leer_lineas, guardar_lineas + +# TODO 2: Imprimir título de app.py +print("--- APP ---") + +# Lista de lineas de comida +lista = [ + "Cachopo", + "Escalopines", + "Solomillo", + "Merluza", + "Zanahoria" +] + +# Archivo (sin nombre ni prefijo) +archivoTXT = "" + +# Funcion que guarda las líneas +guardar_lineas(archivoTXT, lista) + +# Funcion que lee las líneas +leer_lineas(archivoTXT) + +# RESULTADO: +# --- APP --- +# Escribiendo archivo... +# +# ❌ Archivo no encontrado. +# +# Leyendo archivo... +# +# ❌ Archivo no encontrado. diff --git a/06_archivos_y_modulos/autonomos/ejercicio4/utiles.py b/06_archivos_y_modulos/autonomos/ejercicio4/utiles.py index b3259f9..69c2121 100644 --- a/06_archivos_y_modulos/autonomos/ejercicio4/utiles.py +++ b/06_archivos_y_modulos/autonomos/ejercicio4/utiles.py @@ -4,7 +4,7 @@ # TODO 1: Función que lee el contenido del archivo y las líneas de texto que contiene def leer_lineas(ruta): try: - print("Leyendo archivo...") + print("Leyendo archivo... \n") with open(ruta, 'r', encoding="utf-8") as archivo: contenido = archivo.read() @@ -19,7 +19,7 @@ def leer_lineas(ruta): print(f"Archivo {ruta} corregido con éxito ✅") except FileNotFoundError: - print("❌ Archivo no encontrado") + print("❌ Archivo no encontrado.\n") except Exception as e: print(f"\n❌ Error al leer el archivo: {e}") @@ -33,5 +33,7 @@ def guardar_lineas(ruta, lineas): archivo.write(f"\n{linea}") print(f"Archivo {ruta} creado con éxito ✅") + except FileNotFoundError: + print("❌ Archivo no encontrado.\n") except Exception as e: print(f"\n❌ Error al escribir el archivo: {e}") From 122a482e247e7292ab3302effdc49e19f9e92bbe Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 12 Nov 2025 13:52:54 +0100 Subject: [PATCH 301/323] feat: agregar ejercicio autonomo 5 en 06_archivos_y_modulos --- .../autonomos/ejercicio5/app.py | 0 .../autonomos/ejercicio5/ejercicio5.md | 3 ++ .../autonomos/ejercicio5/utiles.py | 39 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 06_archivos_y_modulos/autonomos/ejercicio5/app.py create mode 100644 06_archivos_y_modulos/autonomos/ejercicio5/ejercicio5.md create mode 100644 06_archivos_y_modulos/autonomos/ejercicio5/utiles.py diff --git a/06_archivos_y_modulos/autonomos/ejercicio5/app.py b/06_archivos_y_modulos/autonomos/ejercicio5/app.py new file mode 100644 index 0000000..e69de29 diff --git a/06_archivos_y_modulos/autonomos/ejercicio5/ejercicio5.md b/06_archivos_y_modulos/autonomos/ejercicio5/ejercicio5.md new file mode 100644 index 0000000..6e50cef --- /dev/null +++ b/06_archivos_y_modulos/autonomos/ejercicio5/ejercicio5.md @@ -0,0 +1,3 @@ +## Ejercicio Autónomo Nº 5 + +Pide por `input()` una ruta de archivo y valida si existe antes de leer. \ No newline at end of file diff --git a/06_archivos_y_modulos/autonomos/ejercicio5/utiles.py b/06_archivos_y_modulos/autonomos/ejercicio5/utiles.py new file mode 100644 index 0000000..69c2121 --- /dev/null +++ b/06_archivos_y_modulos/autonomos/ejercicio5/utiles.py @@ -0,0 +1,39 @@ +# utiles.py +# Módulo donde se almacena funciones útiles para leer y escribir archivos + +# TODO 1: Función que lee el contenido del archivo y las líneas de texto que contiene +def leer_lineas(ruta): + try: + print("Leyendo archivo... \n") + with open(ruta, 'r', encoding="utf-8") as archivo: + + contenido = archivo.read() + print(contenido) + + print("\nContando número de líneas:") + with open(ruta, 'r', encoding="utf-8") as archivo: + + lineas = archivo.readlines() + print(len(lineas) - 1) + + print(f"Archivo {ruta} corregido con éxito ✅") + + except FileNotFoundError: + print("❌ Archivo no encontrado.\n") + except Exception as e: + print(f"\n❌ Error al leer el archivo: {e}") + +# TODO 2: Función para guardar las líneas a un archivo específico +def guardar_lineas(ruta, lineas): + try: + print("Escribiendo archivo...\n") + with open(ruta, 'w', encoding="utf-8") as archivo: + + for linea in lineas: + archivo.write(f"\n{linea}") + + print(f"Archivo {ruta} creado con éxito ✅") + except FileNotFoundError: + print("❌ Archivo no encontrado.\n") + except Exception as e: + print(f"\n❌ Error al escribir el archivo: {e}") From 46afd742f1238140f74f49d40ea48c563c0ad723 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 12 Nov 2025 21:33:12 +0100 Subject: [PATCH 302/323] feat: completar ejercicio autonomo 5 en 06_archivos_y_modulos --- .../autonomos/ejercicio5/app.py | 42 +++++++++++++++++ .../autonomos/ejercicio5/utiles.py | 45 ++++++++++++++----- TEXTO.txt | 6 +++ pepe.txt | 6 +++ rec.txt | 6 +++ textouno.txt | 6 +++ 6 files changed, 100 insertions(+), 11 deletions(-) create mode 100644 TEXTO.txt create mode 100644 pepe.txt create mode 100644 rec.txt create mode 100644 textouno.txt diff --git a/06_archivos_y_modulos/autonomos/ejercicio5/app.py b/06_archivos_y_modulos/autonomos/ejercicio5/app.py index e69de29..4444f38 100644 --- a/06_archivos_y_modulos/autonomos/ejercicio5/app.py +++ b/06_archivos_y_modulos/autonomos/ejercicio5/app.py @@ -0,0 +1,42 @@ +# app.py +# Script para utilizar las funciones de 'utiles.py' + +# TODO 1: Importar funciones de utiles +from utiles import leer_lineas, guardar_lineas + +# TODO 2: Imprimir título de app.py +print("--- APP ---") + +while True: + # TODO 3: Pedir al usuario un nombre para el archivo + ARCHIVO = input("\nEscribe un nombre para el archivo a guardar datos --> ") + + if len(ARCHIVO) == 0: + print("❌ No hay nombre de archivo.") + continue + + if not ARCHIVO.isalpha(): + print("❌ Sólo se imprime letras (no valen números ni símbolos).") + continue + + ARCHIVOTXT = ARCHIVO + ".txt" + + print("\nNombre de archivo validado ✅") + + print("\n--- Lista a imprimir datos ---") + lista_gatos = [ + "Michi", + "Simba", + "Niko", + "Leo", + "Chuski" + ] + + for gato in lista_gatos: + print(gato) + + guardar_lineas(ARCHIVOTXT, lista_gatos) + + leer_lineas(ARCHIVOTXT) + + break diff --git a/06_archivos_y_modulos/autonomos/ejercicio5/utiles.py b/06_archivos_y_modulos/autonomos/ejercicio5/utiles.py index 69c2121..9c577e5 100644 --- a/06_archivos_y_modulos/autonomos/ejercicio5/utiles.py +++ b/06_archivos_y_modulos/autonomos/ejercicio5/utiles.py @@ -1,10 +1,17 @@ # utiles.py # Módulo donde se almacena funciones útiles para leer y escribir archivos +import os + # TODO 1: Función que lee el contenido del archivo y las líneas de texto que contiene def leer_lineas(ruta): + + if os.path.exists(ruta): + print(f"\nSobrescribiendo archivo {ruta}...") + + print("\nLeyendo archivo... ") try: - print("Leyendo archivo... \n") + with open(ruta, 'r', encoding="utf-8") as archivo: contenido = archivo.read() @@ -18,22 +25,38 @@ def leer_lineas(ruta): print(f"Archivo {ruta} corregido con éxito ✅") + # Agregar mensaje de error usando FileNotFoundError si no encuentra el archivo except FileNotFoundError: print("❌ Archivo no encontrado.\n") + # Agregar mensaje de error usando FileExistsError si existe el archivo + except FileExistsError: + print(f"❌ El archivo {ruta} Ya existe ") + # Agregar mensaje de error usando Exception si ha surgido otro tipo de error except Exception as e: print(f"\n❌ Error al leer el archivo: {e}") # TODO 2: Función para guardar las líneas a un archivo específico def guardar_lineas(ruta, lineas): - try: - print("Escribiendo archivo...\n") - with open(ruta, 'w', encoding="utf-8") as archivo: - for linea in lineas: - archivo.write(f"\n{linea}") + print("\n Escribiendo archivo...") + if os.path.exists(ruta): + print(f"❌ El archivo {ruta} Ya existe ") + + else: + try: + + with open(ruta, 'w', encoding="utf-8") as archivo: + + for linea in lineas: + archivo.write(f"\n{linea}") - print(f"Archivo {ruta} creado con éxito ✅") - except FileNotFoundError: - print("❌ Archivo no encontrado.\n") - except Exception as e: - print(f"\n❌ Error al escribir el archivo: {e}") + print(f"Archivo {ruta} creado con éxito ✅") + # Agregar mensaje de error usando FileNotFoundError si no encuentra el archivo + except FileNotFoundError: + print("❌ Archivo no encontrado.\n") + # Agregar mensaje de error usando FileExistsError si existe el archivo + except FileExistsError: + print(f"❌ El archivo {ruta} Ya existe ") + # Agregar mensaje de error usando Exception si ha surgido otro tipo de error + except Exception as e: + print(f"\n❌ Error al escribir el archivo: {e}") diff --git a/TEXTO.txt b/TEXTO.txt new file mode 100644 index 0000000..fa54c0d --- /dev/null +++ b/TEXTO.txt @@ -0,0 +1,6 @@ + +Michi +Simba +Niko +Leo +Chuski \ No newline at end of file diff --git a/pepe.txt b/pepe.txt new file mode 100644 index 0000000..fa54c0d --- /dev/null +++ b/pepe.txt @@ -0,0 +1,6 @@ + +Michi +Simba +Niko +Leo +Chuski \ No newline at end of file diff --git a/rec.txt b/rec.txt new file mode 100644 index 0000000..fa54c0d --- /dev/null +++ b/rec.txt @@ -0,0 +1,6 @@ + +Michi +Simba +Niko +Leo +Chuski \ No newline at end of file diff --git a/textouno.txt b/textouno.txt new file mode 100644 index 0000000..fa54c0d --- /dev/null +++ b/textouno.txt @@ -0,0 +1,6 @@ + +Michi +Simba +Niko +Leo +Chuski \ No newline at end of file From 2a2a4c32b26c669b360c23814f521b1c08c60b4b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 12 Nov 2025 22:25:22 +0100 Subject: [PATCH 303/323] feat: agregar desafio bigotes felices en 06_archivos_y_modulos --- 06_archivos_y_modulos/desafio/app.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 06_archivos_y_modulos/desafio/app.py diff --git a/06_archivos_y_modulos/desafio/app.py b/06_archivos_y_modulos/desafio/app.py new file mode 100644 index 0000000..c92ffed --- /dev/null +++ b/06_archivos_y_modulos/desafio/app.py @@ -0,0 +1,3 @@ +# app.py +# EJERCICIO DESAFIO BIGOTES FELICES: LOGS +# Enunciado: Dado un archivo de logs `visitas.log`, cuenta por día cuántas visitas hubo y guarda un resumen. \ No newline at end of file From 76f0ab4e7ca8b752641de70687527d8bb8cefc21 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 13 Nov 2025 13:11:24 +0100 Subject: [PATCH 304/323] feat: completar desafio bigotes felices en 06_archivos_y_modulos --- 06_archivos_y_modulos/desafio/app.py | 33 +++++++++- 06_archivos_y_modulos/desafio/logs.py | 87 +++++++++++++++++++++++++++ text.txt | 17 ++++++ visitas.log | 17 ++++++ 4 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 06_archivos_y_modulos/desafio/logs.py create mode 100644 text.txt create mode 100644 visitas.log diff --git a/06_archivos_y_modulos/desafio/app.py b/06_archivos_y_modulos/desafio/app.py index c92ffed..14d7d88 100644 --- a/06_archivos_y_modulos/desafio/app.py +++ b/06_archivos_y_modulos/desafio/app.py @@ -1,3 +1,34 @@ # app.py # EJERCICIO DESAFIO BIGOTES FELICES: LOGS -# Enunciado: Dado un archivo de logs `visitas.log`, cuenta por día cuántas visitas hubo y guarda un resumen. \ No newline at end of file +# Enunciado: Dado un archivo de logs `visitas.log`, cuenta por día cuántas visitas hubo y guarda un resumen. + +print("--- 😺 BIGOTES FELICES: LOGS 😺 ---") + +# Importamos las funciones necesarias del módulo logs +from logs import guardar_archivo, resumen_archivo, visita_por_dia + +# Listamos dicts de registros +registro_logs = [ + {"fecha": "2024-10-11 08:11:59", "visita": "Visita desde IP 192.168.1.1"}, + {"fecha": "2024-10-11 10:30:43", "visita": "Visita desde IP 192.168.1.2"}, + {"fecha": "2024-10-11 12:41:12", "visita": "Visita desde IP 192.168.1.4"}, + {"fecha": "2024-10-11 17:30:29", "visita": "Visita desde IP 192.168.1.6"}, + {"fecha": "2024-10-12 08:10:32", "visita": "Visita desde IP 192.168.1.8"}, + {"fecha": "2024-10-12 11:11:48", "visita": "Visita desde IP 192.168.1.9"}, + {"fecha": "2024-10-12 18:21:51", "visita": "Visita desde IP 192.168.1.10"}, + {"fecha": "2024-10-13 08:04:12", "visita": "Visita desde IP 192.168.1.11"}, +] + +# Mostramos previo la lista de registros +print("\n--- Registro de logs que queremos almacenar ---") +for log in registro_logs: + print(f"| {log["fecha"]} - {log["visita"]} |") + +# Función que se encarga de guardar el contenido del archivo 'visitas.log' +guardar_archivo("visitas.log", registro_logs) + +# Función que se encarga de leer el contenido del archivo 'visitas.log' +resumen_archivo("visitas.log") + +# Función que devuelve un resumen de los días contados y el total de visitas de x días +visita_por_dia("visitas.log") \ No newline at end of file diff --git a/06_archivos_y_modulos/desafio/logs.py b/06_archivos_y_modulos/desafio/logs.py new file mode 100644 index 0000000..a3c6e6c --- /dev/null +++ b/06_archivos_y_modulos/desafio/logs.py @@ -0,0 +1,87 @@ +# funciones.py +# Módulo donde se almacena funciones útiles para guardar y leer archivos LOG +import os + +# Función que almacena el contenido del archivo ruta +def guardar_archivo(ruta, lineas): + try: + print(f"\nEscribiendo archivo {ruta}...") + + with open(ruta, 'w', encoding="utf-8") as archivo: + + for i, linea in enumerate(lineas, 1): + archivo.write(f"\n{i}º log:\n") + for clave, valor in linea.items(): + line = f"| {clave} - {valor} |" + archivo.write(line) + + print(f"Archivo {ruta} creado y escrito con éxito ✅") + + except FileNotFoundError: + print("❌ El archivo no existe") + except Exception as e: + print(f"❌ Error al escribir el archivo: {e}") + +# Función que lee el contenido ruta +def resumen_archivo(ruta): + + try: + print(f"\nLeyendo y analizando archivo {ruta}...") + with open(ruta, "r", encoding="utf-8") as archivo: + + contenido = archivo.read() + print(contenido) + + with open(ruta, "r", encoding="utf-8") as archivo: + + lineas = archivo.readlines() + print(f"\nNúmero de líneas: {len(lineas)-1}") + + print(f"Archivo {ruta} leído correctamente ✅") + except FileNotFoundError: + print("❌ El archivo no existe.") + except Exception as e: + print(f"❌ Error al leer el archivo: {e}") + +# Funcion de número de visitas por día +def visita_por_dia(ruta): + print("\n-- Visitas por día --") + # Dict vacío para almacenar fechas de logs + visitasXdia = {} + + try: + print("--- Analizando ---") + with open(ruta, "r", encoding="utf-8") as archivo: + for linea in archivo: + # Verificar si la linea recorrida tiene más de 10 caracteres + if len(linea) >= 10: + # Extraer la fecha (| fecha - "2024-10-12" 18:21:51 | recogemos desde el índice 10 hasta el 20 que recoge la fecha) + fecha = linea[10:20] # Slicing para extraer la fecha + + # Contamos la fecha para ese día + if fecha in visitasXdia: + visitasXdia[fecha] += 1 + else: + visitasXdia[fecha] = 1 + + print("Ánalisis completo. ✅") + + print("\nRESUMEN:") + # Total de visitas de x días + total_visitas = 0 + # Recorremos la lista de x fechas que se almacenaron en visitasXdia + for fecha in visitasXdia: + visitas = visitasXdia[fecha] + total_visitas += visitas + if visitas == 1: + print(f"Fecha: {fecha} | {visitas} visita") + else: + print(f"Fecha: {fecha} | {visitas} visitas") + # Resumen del total de visitas en x días + print(f"Total de visitas: {total_visitas} visitas en {len(visitasXdia)} días.") + + + except FileNotFoundError: + print("❌ No se encontró el archivo especificado") + except Exception as e: + print(f"❌ Error al leer el archivo: {e}") \ No newline at end of file diff --git a/text.txt b/text.txt new file mode 100644 index 0000000..c7706f8 --- /dev/null +++ b/text.txt @@ -0,0 +1,17 @@ + +1º log: +| fecha - 2024-10-11 08:11:59 || visita - Visita desde IP 192.168.1.1 | +2º log: +| fecha - 2024-10-11 10:30:43 || visita - Visita desde IP 192.168.1.2 | +3º log: +| fecha - 2024-10-11 12:41:12 || visita - Visita desde IP 192.168.1.4 | +4º log: +| fecha - 2024-10-11 17:30:29 || visita - Visita desde IP 192.168.1.6 | +5º log: +| fecha - 2024-10-12 08:10:32 || visita - Visita desde IP 192.168.1.8 | +6º log: +| fecha - 2024-10-12 11:11:48 || visita - Visita desde IP 192.168.1.9 | +7º log: +| fecha - 2024-10-12 18:21:51 || visita - Visita desde IP 192.168.1.10 | +8º log: +| fecha - 2024-10-13 08:04:12 || visita - Visita desde IP 192.168.1.11 | \ No newline at end of file diff --git a/visitas.log b/visitas.log new file mode 100644 index 0000000..c7706f8 --- /dev/null +++ b/visitas.log @@ -0,0 +1,17 @@ + +1º log: +| fecha - 2024-10-11 08:11:59 || visita - Visita desde IP 192.168.1.1 | +2º log: +| fecha - 2024-10-11 10:30:43 || visita - Visita desde IP 192.168.1.2 | +3º log: +| fecha - 2024-10-11 12:41:12 || visita - Visita desde IP 192.168.1.4 | +4º log: +| fecha - 2024-10-11 17:30:29 || visita - Visita desde IP 192.168.1.6 | +5º log: +| fecha - 2024-10-12 08:10:32 || visita - Visita desde IP 192.168.1.8 | +6º log: +| fecha - 2024-10-12 11:11:48 || visita - Visita desde IP 192.168.1.9 | +7º log: +| fecha - 2024-10-12 18:21:51 || visita - Visita desde IP 192.168.1.10 | +8º log: +| fecha - 2024-10-13 08:04:12 || visita - Visita desde IP 192.168.1.11 | \ No newline at end of file From d0c0f97bfbabfe738469158c1fbc47c6ff34cc05 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 13 Nov 2025 13:45:14 +0100 Subject: [PATCH 305/323] fix: calculadora v_7 07_mini_proyectos --- .../ejercicio_guiado/calculadora_v7.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/07_mini_proyectos/ejercicio_guiado/calculadora_v7.py b/07_mini_proyectos/ejercicio_guiado/calculadora_v7.py index b5e330c..6795ff5 100644 --- a/07_mini_proyectos/ejercicio_guiado/calculadora_v7.py +++ b/07_mini_proyectos/ejercicio_guiado/calculadora_v7.py @@ -153,8 +153,8 @@ def limpiar_historial(): # TODO 2: Refactoriza la confirmación con operador morsa # Pista: if (confirmacion := input(...).lower()) != "s": - confirmacion = input("⚠️ ¿Estás seguro de que quieres limpiar el historial? (s/n): ") - if confirmacion.lower() != "s": + + if (confirmacion := input("⚠️ ¿Estás seguro de que quieres limpiar el historial? (s/n): ").lower()) != "s": print("❌ Operación cancelada") return @@ -182,25 +182,24 @@ def main(): # TODO 3: Considera si puedes usar operador morsa aquí # ¿Se puede combinar mostrar_menu() y input() de alguna manera? - opcion = input("\nElige una opción: ") - if opcion == "7": + if (opcion := input("\nElige una opción: ")) == "7": print("💾 Guardando historial...") guardar_historial_archivo() print("¡Hasta pronto! 👋") break - if opcion == "5": + if (opcion := input("\nElige una opción: ")) == "5": mostrar_historial() continue - if opcion == "6": + if (opcion := input("\nElige una opción: ")) == "6": limpiar_historial() continue # TODO 4: Refactoriza esta validación con operador morsa # Pista: Convierte la opción a número y valida en una sola expresión - if opcion not in ["1", "2", "3", "4"]: + if (opcion := int(input("\nElige una opción: "))) not in ["1", "2", "3", "4"]: print("❌ Opción no válida") continue From 02b66ed0a79a4528576d0bf54b73f5ab9ee4d546 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 13 Nov 2025 19:47:01 +0100 Subject: [PATCH 306/323] feat: completar calculadora v7 en 07_mini_proyectos --- .../ejercicio_guiado/calculadora_v7.py | 57 ++++++++++++++----- historial_calculadora.json | 33 +---------- 2 files changed, 44 insertions(+), 46 deletions(-) diff --git a/07_mini_proyectos/ejercicio_guiado/calculadora_v7.py b/07_mini_proyectos/ejercicio_guiado/calculadora_v7.py index 6795ff5..987b117 100644 --- a/07_mini_proyectos/ejercicio_guiado/calculadora_v7.py +++ b/07_mini_proyectos/ejercicio_guiado/calculadora_v7.py @@ -56,14 +56,14 @@ def dividir(a, b): def mostrar_menu(): """Muestra el menú de opciones de la calculadora.""" - print("\n=== CALCULADORA ===") - print("1. Sumar") - print("2. Restar") - print("3. Multiplicar") - print("4. Dividir") - print("5. Ver historial") - print("6. Limpiar historial") - print("7. Salir") + print(t := "\n=== CALCULADORA ===") + print(s := "1. Sumar") + print(r := "2. Restar") + print(m := "3. Multiplicar") + print(d := "4. Dividir") + print(v := "5. Ver historial") + print(l := "6. Limpiar historial") + print(s := "7. Salir") def obtener_numeros(): @@ -72,7 +72,7 @@ def obtener_numeros(): # TODO 1: Refactoriza usando operador morsa # Combina el input y la validación en una sola expresión # Pista: while not (entrada := input(...)).algo(): - + '''''''''''''''' while True: entrada1 = input("Primer número: ") try: @@ -90,6 +90,35 @@ def obtener_numeros(): print("❌ Ingresa un número válido") return num1, num2 + ''''''''''' + # Método 1: + while not (entrada1 := input("Primer número: ")).isdigit(): + print("❌ Ingresa un número 1 válido") + num1 = float(entrada1) + while not (entrada2 := input("Segundo número: ")).isdigit(): + print("❌ Ingresa un número 2 válido") + num2 = float(entrada2) + + return num1, num2 + + # Método 2: + '''''''''' + while True: + try: + num1 = float(entrada1 := input("Primer número: ")) + break + except ValueError: + print("❌ Ingresa un número válido") + + while True: + try: + num2 = float(entrada2 := input("Segundo número: ")) + break + except ValueError: + print("❌ Ingresa un número válido") + + return num1, num2 + ''''''''''' # ===== FUNCIONES DE HISTORIAL (memoria) ===== @@ -182,24 +211,24 @@ def main(): # TODO 3: Considera si puedes usar operador morsa aquí # ¿Se puede combinar mostrar_menu() y input() de alguna manera? - - if (opcion := input("\nElige una opción: ")) == "7": + opcion = input("\nElige una opción: ") + if opcion == "7": print("💾 Guardando historial...") guardar_historial_archivo() print("¡Hasta pronto! 👋") break - if (opcion := input("\nElige una opción: ")) == "5": + if opcion == "5": mostrar_historial() continue - if (opcion := input("\nElige una opción: ")) == "6": + if opcion == "6": limpiar_historial() continue # TODO 4: Refactoriza esta validación con operador morsa # Pista: Convierte la opción a número y valida en una sola expresión - if (opcion := int(input("\nElige una opción: "))) not in ["1", "2", "3", "4"]: + if opcion not in ["1", "2", "3", "4"]: print("❌ Opción no válida") continue diff --git a/historial_calculadora.json b/historial_calculadora.json index b15798d..0637a08 100644 --- a/historial_calculadora.json +++ b/historial_calculadora.json @@ -1,32 +1 @@ -[ - { - "num1": 3.0, - "num2": 9.0, - "operacion": "+", - "resultado": 12.0 - }, - { - "num1": 9.0, - "num2": 34.0, - "operacion": "*", - "resultado": 306.0 - }, - { - "num1": 10.0, - "num2": 3.0, - "operacion": "/", - "resultado": 3.3333333333333335 - }, - { - "num1": 34.0, - "num2": 12.0, - "operacion": "-", - "resultado": 22.0 - }, - { - "num1": 4.0, - "num2": 3.0, - "operacion": "+", - "resultado": 7.0 - } -] \ No newline at end of file +[] \ No newline at end of file From aaf3914a7f3abc2c3e02738fe0dd510f74cec13a Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Thu, 13 Nov 2025 19:59:29 +0100 Subject: [PATCH 307/323] feat: agregar reto1 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto1.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 07_mini_proyectos/retos/reto1.py diff --git a/07_mini_proyectos/retos/reto1.py b/07_mini_proyectos/retos/reto1.py new file mode 100644 index 0000000..cf31398 --- /dev/null +++ b/07_mini_proyectos/retos/reto1.py @@ -0,0 +1,4 @@ +# Reto 1: Procesador interactivo de comandos +# Enunciado: Crea un programa que procese comandos hasta que el usuario escriba "salir". + + \ No newline at end of file From c82bde38f142fcd472fcea140ebba89bee5c4ee0 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 14 Nov 2025 11:43:26 +0100 Subject: [PATCH 308/323] feat: completar reto1 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto1.py | 96 +++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/07_mini_proyectos/retos/reto1.py b/07_mini_proyectos/retos/reto1.py index cf31398..0abb5fa 100644 --- a/07_mini_proyectos/retos/reto1.py +++ b/07_mini_proyectos/retos/reto1.py @@ -1,4 +1,98 @@ # Reto 1: Procesador interactivo de comandos # Enunciado: Crea un programa que procese comandos hasta que el usuario escriba "salir". +# +# **Requisitos**: +# - Usa operador morsa en el bucle `while` +# - Comandos: `sumar x y`, `restar x y`, `multiplicar x y`, `dividir x y` +# - Valida que los números sean correctos +# - Muestra error si el comando no es válido +# +# **Ejemplo de uso**: +# ``` +# Comando: sumar 5 3 +# ✅ 5 + 3 = 8 +# +# Comando: dividir 10 0 +# ❌ No se puede dividir por cero +# +# Comando: hola +# ❌ Comando no válido +# +# Comando: salir +# ¡Hasta pronto! +# ``` - \ No newline at end of file +# TODO 1: Función que imprime las instrucciones del reto 1 +def mostrar_instrucciones(): + print("\n--- Instrucciones de uso ---") + print("Escribe uno de estos comandos para interactuar con el programa:") + print("1. sumar x y --> Suma los valores x y") + print("2. restar x y --> Resta los valores x y") + print("3. multiplicar x y --> Multiplica los valores x y") + print("4. dividir x y --> Divide los valores x y (cuidado con agregar '0' en y)") + print("5. salir --> Salimos del programa") + print("'x' es el primer número a introducir en el programa; 'y' es el segundo número a introducir") + print("EJEMPLO: ") + print("Comando: sumar 5 3") + print("✅ 5 + 3 = 8") + print("\nAhora bien, ¿empezamos?") + +# TODO 2: Función de la lógica del programa reto1 +def reto1(): + # Llamamos la función de las intrucciones + mostrar_instrucciones() + + # Bucle principal while: ejecuta comandos hasta escribir la palabra 'salir' + # El operador := (operador morsa) asigna valor a 'comando' y lo evalúa en la misma línea + while (comando := input("\nComando: ").strip().lower()) != "salir": + + # Separar el comando en partes (en este caso 3) + partes = comando.split() + + # Comprobar que 'partes' tenga dividida 3 partes (operador, x, y) + if len(partes) != 3: + print("❌ Comando no válido.") + continue # Volver al inicio del bucle + + # Desempaquetamos las partes del comando + operador, str_x, str_y = partes + + # Intentar que x y sean números flotantes + try: + x, y = float(str_x), float(str_y) + except ValueError: + print("❌ Números no válidos.") + continue + + # Ejecutar la operacion solicitada + if operador == "sumar": + print(f"✅ {x} + {y} = {x + y}") + continue + elif operador == "restar": + print(f"✅ {x} + {y} = {x - y}") + continue + elif operador == "multiplicar": + print(f"✅ {x} + {y} = {x * y}") + continue + elif operador == "dividir": + if y != 0: + print(f"✅ {x} + {y} = {x / y}") + continue + else: + print("❌ No se puede dividir por 0.") + else: + print("❌ Comando no válido.") + + # Una vez introducido la palabra 'salir', finaliza el programa + print("Hasta pronto 👋") + +# TODO 3: Crear función principal +def main(): + # Imprimir título del reto 1 + print("--- 🛠️ Procesador interactivo de comandos 🛠️ ---") + # Llamar función reto1 + reto1() + +# TODO: Punto de entrada del programa +if __name__ == "__main__": + main() \ No newline at end of file From 4f1cec05705191779dbb59f7435bcf8c9bb4bfa7 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Fri, 14 Nov 2025 11:47:32 +0100 Subject: [PATCH 309/323] feat: agregar reto 2 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto2.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 07_mini_proyectos/retos/reto2.py diff --git a/07_mini_proyectos/retos/reto2.py b/07_mini_proyectos/retos/reto2.py new file mode 100644 index 0000000..2e0cbed --- /dev/null +++ b/07_mini_proyectos/retos/reto2.py @@ -0,0 +1,12 @@ +# Reto 2: Validador de formulario +# Enunciado: Crea un programa que pida datos de registro y los valide: +# - Nombre (mínimo 3 caracteres) +# - Email (debe contener @) +# - Edad (debe ser número entre 18 y 100) +# - Contraseña (mínimo 6 caracteres) +# +# **Requisitos**: +# - Usa operador morsa en TODAS las validaciones +# - Repite la pregunta si el dato no es válido +# - Muestra un resumen al final +# - Guarda los datos en un archivo JSON \ No newline at end of file From 78b145f8aff50e30b8fb32152b59966dc7b58951 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 16 Nov 2025 20:50:47 +0100 Subject: [PATCH 310/323] feat: completarar reto 2 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto1.py | 2 +- 07_mini_proyectos/retos/reto2.py | 12 ----- 07_mini_proyectos/retos/reto2/app.py | 28 +++++++++++ 07_mini_proyectos/retos/reto2/formatoJSON.py | 47 +++++++++++++++++ 07_mini_proyectos/retos/reto2/formulario.py | 53 ++++++++++++++++++++ antonio.json | 6 +++ donde45.json | 6 +++ texto.json | 6 +++ 8 files changed, 147 insertions(+), 13 deletions(-) delete mode 100644 07_mini_proyectos/retos/reto2.py create mode 100644 07_mini_proyectos/retos/reto2/app.py create mode 100644 07_mini_proyectos/retos/reto2/formatoJSON.py create mode 100644 07_mini_proyectos/retos/reto2/formulario.py create mode 100644 antonio.json create mode 100644 donde45.json create mode 100644 texto.json diff --git a/07_mini_proyectos/retos/reto1.py b/07_mini_proyectos/retos/reto1.py index 0abb5fa..756dea8 100644 --- a/07_mini_proyectos/retos/reto1.py +++ b/07_mini_proyectos/retos/reto1.py @@ -93,6 +93,6 @@ def main(): # Llamar función reto1 reto1() -# TODO: Punto de entrada del programa +# TODO 4: Punto de entrada del programa if __name__ == "__main__": main() \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto2.py b/07_mini_proyectos/retos/reto2.py deleted file mode 100644 index 2e0cbed..0000000 --- a/07_mini_proyectos/retos/reto2.py +++ /dev/null @@ -1,12 +0,0 @@ -# Reto 2: Validador de formulario -# Enunciado: Crea un programa que pida datos de registro y los valide: -# - Nombre (mínimo 3 caracteres) -# - Email (debe contener @) -# - Edad (debe ser número entre 18 y 100) -# - Contraseña (mínimo 6 caracteres) -# -# **Requisitos**: -# - Usa operador morsa en TODAS las validaciones -# - Repite la pregunta si el dato no es válido -# - Muestra un resumen al final -# - Guarda los datos en un archivo JSON \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto2/app.py b/07_mini_proyectos/retos/reto2/app.py new file mode 100644 index 0000000..ec65bc9 --- /dev/null +++ b/07_mini_proyectos/retos/reto2/app.py @@ -0,0 +1,28 @@ +# Reto 2: Validador de formulario +# Enunciado: Crea un programa que pida datos de registro y los valide: +# - Nombre (mínimo 3 caracteres) +# - Email (debe contener @) +# - Edad (debe ser número entre 18 y 100) +# - Contraseña (mínimo 6 caracteres) +# +# **Requisitos**: +# - Usa operador morsa en TODAS las validaciones +# - Repite la pregunta si el dato no es válido +# - Muestra un resumen al final +# - Guarda los datos en un archivo JSON + +# TODO 1: Importar función validador de formularios en el módulo 'formulario' +from formulario import validar_formulario + +# TODO 2: Crear función principal +def main(): + # Imprimir título del reto + print("--- Validador de formulario ---") + # Llamar función validar_formulario (más información en 'formulario.py') + validar_formulario() + # Imprimir mensaje de despedida + print("\nHasta pronto! 👋") + +# TODO 3: Punto de entrada del programa +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto2/formatoJSON.py b/07_mini_proyectos/retos/reto2/formatoJSON.py new file mode 100644 index 0000000..ee884d3 --- /dev/null +++ b/07_mini_proyectos/retos/reto2/formatoJSON.py @@ -0,0 +1,47 @@ +# formatoJSON.py +# Módulo donde se almacenan funciones de leer y guardar archivo en formato JSON + +# TODO 1: Importar módulos 'os' y'json' +import os, json + +# TODO 2: Función que guarda datos al archivo JSON +def guardar_archivo(ruta, datos): + + # Validación por si el nombre del archivo introducido ya existe + # Si existe el archivo, salta el mensaje de error y muestra el contenido de dicho archivo + if os.path.exists(ruta): + print(f"\n❌ El archivo {ruta} existe.") + print("\nMostrando contenido del archivo existente...") + leer_archivo(ruta) + else: + # Si no existe, se empieza a crear el archivo + print(f"Escribiendo datos en {ruta}...") + # Intentemos escribir el archivo JSON si no hay error + try: + # Escribimos archivo JSON usando 'with open()' y 'json.dump()' + with open(ruta, "w", encoding="utf-8") as archivo: + json.dump(datos, archivo, indent=4, ensure_ascii=False) + # Mensaje de éxito de escritura de datos + print(f"Archivo {ruta} creado y escrito correctamente. ✅") + # Leer los datos escritos + print(f"\nImprimiendo archivo {ruta}...") + leer_archivo(ruta) + # Mensaje de error si hay error al escribir + except Exception as e: + print(f"❌ Ups! Ha habido un error: {e}") + +# TODO 3: Función para leer un archivo +def leer_archivo(ruta): + # Intentemos que lea el archivo si se encuentra el archivo + try: + # Leemos archivo JSON usando 'with open()' y 'json.load()' + with open(ruta, "r", encoding="utf-8") as archivo: + datos = json.load(archivo) + print(f"\n{datos}") + print(f"Archivo {ruta} leído correctamente ✅") + # Mensaje de error si no se encuentra el archivo + except FileNotFoundError: + print(f"\n❌ No se ha encontrado el archivo {ruta}") + # Mensaje de error si hay error al leer + except Exception as e: + print(f"❌ Ups! Ha habido un error: {e}") \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto2/formulario.py b/07_mini_proyectos/retos/reto2/formulario.py new file mode 100644 index 0000000..cd66947 --- /dev/null +++ b/07_mini_proyectos/retos/reto2/formulario.py @@ -0,0 +1,53 @@ +# formulario.py +# Archivo donde se almacena la validación del formulario + +# TODO 1: Importar función que guarda datos de formulario en un archivo JSON en el módulo formatoJSON +from formatoJSON import guardar_archivo + +# TODO 2: Función que valida el formulario +def validar_formulario(): + # Validación de nombre que tenga más de 3 carácteres + while not (nombre := input("\nIntroduce un nombre: ")) or len(nombre) < 3: + print("❌ Nombre inválido. El nombre debe tener al menos 3 caracteres.") + # Validación de email que contenga al menos un '@' y un '.' + while "@" not in (email := input("\nIntroduce un email válido: ")) or "." not in email: + print("❌ Email inválido. El email debe contener al menos un @ y un punto (.).") + # Validación de edad que sea número entero y que esté comprendido entre 18 y 100 + while True: + try: + if not (edad := int(input("\nIntroduce su edad: "))) or edad < 18 or edad > 100: + print("❌ Edad no válida. La edad debe ser entre 18 y 100 años.") + continue + break + except ValueError: + print("❌ Edad no válida. La edad debe ser un número.") + continue + # Validación de contraseña que tenga más de 6 carácteres + while not (contrasena := input("\nIntroduce una contraseña: ")) or len(contrasena) < 6: + print("❌ Contraseña no válida. Debe tener al menos 6 caracteres.") + # Imprimimos resumen del formulario + print("\n--- Resumen ---") + + print(f"Nombre: {nombre}") + print(f"Email: {email}") + print(f"Edad: {edad}") + print(f"Contraseña: {contrasena}") + # Pregunta del programa si desea guardar los datos en un archivo JSON o perder los datos para siempre + if not (guardar := input("\n¿Desea almacenar estos datos en un archivo JSON? (s/n) --> ")) or guardar != "s": + print("Datos no almacenados en JSON. Eliminando datos introducidos 🗑️") + else: + # Pedir al usuario un nombre para el archivo JSON (Inválido estar vacío o que sólo tenga números) + while not (texto := input("\nEscribe un nombre para el archivo JSON --> ")) or texto.isdigit(): + print("❌ Nombre inválido.") + + # Declarar diccionario con los datos guardados + resumen = { + "nombre": nombre, + "email": email, + "edad": edad, + "contrasena": contrasena + } + # Convertir texto en archivo JSON + textoJSON = texto + ".json" + # Llamar función 'guardar_archivo' para almacenar los datos en JSON (más información en formatoJSON.py) + guardar_archivo(textoJSON, resumen) \ No newline at end of file diff --git a/antonio.json b/antonio.json new file mode 100644 index 0000000..7069691 --- /dev/null +++ b/antonio.json @@ -0,0 +1,6 @@ +{ + "nombre": "antonio", + "email": "antonio@rento.es", + "edad": 56, + "contrasena": "antoniolobato" +} \ No newline at end of file diff --git a/donde45.json b/donde45.json new file mode 100644 index 0000000..59276cc --- /dev/null +++ b/donde45.json @@ -0,0 +1,6 @@ +{ + "nombre": "pepe", + "email": "done@reto.com", + "edad": 76, + "contrasena": "popenciodon" +} \ No newline at end of file diff --git a/texto.json b/texto.json new file mode 100644 index 0000000..644c1df --- /dev/null +++ b/texto.json @@ -0,0 +1,6 @@ +{ + "nombre": "Felipe", + "email": "pepe@gmail.com", + "edad": 34, + "contrasena": "pepeviyuela" +} \ No newline at end of file From 8ef1ed49e43e3fdb870d5fe090ebdbe889be8477 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Sun, 16 Nov 2025 21:36:00 +0100 Subject: [PATCH 311/323] feat: agregar reto 3 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto3/app.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 07_mini_proyectos/retos/reto3/app.py diff --git a/07_mini_proyectos/retos/reto3/app.py b/07_mini_proyectos/retos/reto3/app.py new file mode 100644 index 0000000..cadab1f --- /dev/null +++ b/07_mini_proyectos/retos/reto3/app.py @@ -0,0 +1,11 @@ +# Reto 3: Analizador de archivo línea por línea +# Enunciado: Crea un programa que lea un archivo línea por línea y procese solo las que cumplan ciertos criterios. +# +# **Requisitos**: +# - Usa operador morsa en el bucle de lectura +# - Filtra líneas que: +# - No estén vacías +# - No empiecen con `#` (comentarios) +# - Tengan más de 10 caracteres +# - Cuenta cuántas líneas procesaste vs. cuántas ignoraste +# - Guarda las líneas válidas en otro archivo \ No newline at end of file From d6a58f5d49f3e543c5d160d989b7b7354b9af63c Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 17 Nov 2025 14:11:13 +0100 Subject: [PATCH 312/323] feat: completar reto 3 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto3/app.py | 36 +++++++++++++++++++- 07_mini_proyectos/retos/reto3/line_filter.py | 31 +++++++++++++++++ 07_mini_proyectos/retos/reto3/read_write.py | 32 +++++++++++++++++ archivo.txt | 7 ++++ salida.txt | 3 ++ 5 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 07_mini_proyectos/retos/reto3/line_filter.py create mode 100644 07_mini_proyectos/retos/reto3/read_write.py create mode 100644 archivo.txt create mode 100644 salida.txt diff --git a/07_mini_proyectos/retos/reto3/app.py b/07_mini_proyectos/retos/reto3/app.py index cadab1f..f2078b5 100644 --- a/07_mini_proyectos/retos/reto3/app.py +++ b/07_mini_proyectos/retos/reto3/app.py @@ -8,4 +8,38 @@ # - No empiecen con `#` (comentarios) # - Tengan más de 10 caracteres # - Cuenta cuántas líneas procesaste vs. cuántas ignoraste -# - Guarda las líneas válidas en otro archivo \ No newline at end of file +# - Guarda las líneas válidas en otro archivo + +from read_write import read_content, write_content +from line_filter import filter + +# TODO 2: Crear función principal +def main(): + print("--- Analizador de archivos línea por línea ---") + + lista = [ + "# Este es un comentario", + "Línea válida para procesar", + "Corta", + "", + "# Otro comentario", + "Esta línea también es válida y debe procesarse" + ] + + # Pedir al usuario un nombre para el archivo de entrada para ver el contenido completo + # while not (entrada := input("\nEscribe un nombre para el archivo de lineas --> ")) or entrada.isdigit(): + #print("❌ Nombre de entrada inválido.") + + # Pedir al usuario un nombre para el archivo de salida con las lineas filtradas + # while not (entrada := input("\nEscribe un nombre para el archivo de lineas --> ")) or entrada.isdigit(): + # print("❌ Nombre de entrada inválido.") + + write_content("archivo.txt", lista) + + if read_content("archivo.txt"): + filter("archivo.txt", "salida.txt") + + +# TODO 3: Punto de entrada del programa +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto3/line_filter.py b/07_mini_proyectos/retos/reto3/line_filter.py new file mode 100644 index 0000000..34c5196 --- /dev/null +++ b/07_mini_proyectos/retos/reto3/line_filter.py @@ -0,0 +1,31 @@ +# line_filter +# Módulo que filtra las líneas del archivo con los criterios asignados + +def filter(entrada, salida): + + procesadas = 0 + ignoradas = 0 + lineas_validas = [] + + try: + with open(entrada, "r", encoding="utf-8") as archivo: + while (linea := archivo.readline()): + if (linea_limpia := linea.strip()) and not linea_limpia.startswith("#") and len(linea_limpia) > 10: + lineas_validas.append(linea_limpia) + procesadas += 1 + else: + ignoradas += 1 + + with open(salida, "w", encoding="utf-8") as archivo: + for linea in lineas_validas: + archivo.write(f"\n{linea}") + + print("\n--- Resúmen de la filtración ---") + print(f"✅ Procesadas: {procesadas} líneas") + print(f"⏭️ Ignoradas: {ignoradas} líneas") + print(f"📝 Resultado guardado en: {salida}") + + except FileNotFoundError: + print(f"No se ha encontrado el archivo {entrada}") + except Exception as e: + print(f"❌ Error al leer el archivo: {e}") \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto3/read_write.py b/07_mini_proyectos/retos/reto3/read_write.py new file mode 100644 index 0000000..628434b --- /dev/null +++ b/07_mini_proyectos/retos/reto3/read_write.py @@ -0,0 +1,32 @@ +# read_write.py +# Módulo para leer y escribir archivos + +def read_content(archive): + try: + with open(archive, "r", encoding="utf-8") as file: + + print(f"Leyendo archivo {archive}...") + print(file.read()) + + return True + + except FileNotFoundError: + print("❌ No se ha encontrado el archivo a leer.") + return False + except Exception as e: + print(f"❌ Error al leer el archivo: {e}") + return False + +def write_content(archive, lines): + + try: + with open(archive, "w", encoding="utf-8") as file: + print(f"\nEscribiendo archivo {archive}...") + for line in lines: + file.write(f"\n{line}") + + print(f"Archivo {archive} escrito correctamente ✅") + return True + except Exception as e: + print(f"❌ Error al escribir el archivo: {e}") + return False \ No newline at end of file diff --git a/archivo.txt b/archivo.txt new file mode 100644 index 0000000..76c1392 --- /dev/null +++ b/archivo.txt @@ -0,0 +1,7 @@ + +# Este es un comentario +Línea válida para procesar +Corta + +# Otro comentario +Esta línea también es válida y debe procesarse \ No newline at end of file diff --git a/salida.txt b/salida.txt new file mode 100644 index 0000000..fd2eebd --- /dev/null +++ b/salida.txt @@ -0,0 +1,3 @@ + +Línea válida para procesar +Esta línea también es válida y debe procesarse \ No newline at end of file From b99bed9fa813f784f3a47e11f025d6d4d95dcc0e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 17 Nov 2025 14:21:58 +0100 Subject: [PATCH 313/323] feat: agregar reto 4 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto4/app.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 07_mini_proyectos/retos/reto4/app.py diff --git a/07_mini_proyectos/retos/reto4/app.py b/07_mini_proyectos/retos/reto4/app.py new file mode 100644 index 0000000..2988a67 --- /dev/null +++ b/07_mini_proyectos/retos/reto4/app.py @@ -0,0 +1,6 @@ +# Reto 4: Estadísticas del refugio de gatos +# **Enunciado: ** +# - Entrada: archivo o lista de pesos y edades. +# - Tareas: conteo, media, mediana simple, top-k más pesados. +# - Salida: resumen por pantalla y guardado opcional a archivo. +# **Bonus**: Usa operador morsa para leer el archivo línea por línea. From 4fdfe437e8749e823487eb22eda063d92855da22 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 17 Nov 2025 14:24:33 +0100 Subject: [PATCH 314/323] docs: reto 3 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto3/app.py | 1 + 07_mini_proyectos/retos/reto4/app.py | 1 + 2 files changed, 2 insertions(+) diff --git a/07_mini_proyectos/retos/reto3/app.py b/07_mini_proyectos/retos/reto3/app.py index f2078b5..7207a34 100644 --- a/07_mini_proyectos/retos/reto3/app.py +++ b/07_mini_proyectos/retos/reto3/app.py @@ -10,6 +10,7 @@ # - Cuenta cuántas líneas procesaste vs. cuántas ignoraste # - Guarda las líneas válidas en otro archivo +# TODO 1: Importar módulos necesarios para las funciones from read_write import read_content, write_content from line_filter import filter diff --git a/07_mini_proyectos/retos/reto4/app.py b/07_mini_proyectos/retos/reto4/app.py index 2988a67..8f5bc32 100644 --- a/07_mini_proyectos/retos/reto4/app.py +++ b/07_mini_proyectos/retos/reto4/app.py @@ -4,3 +4,4 @@ # - Tareas: conteo, media, mediana simple, top-k más pesados. # - Salida: resumen por pantalla y guardado opcional a archivo. # **Bonus**: Usa operador morsa para leer el archivo línea por línea. + From e25ab08a77b9b3af8f0b5fcd748997c5e6e3659b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 17 Nov 2025 20:08:20 +0100 Subject: [PATCH 315/323] feat: en proceso reto 4 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto4/app.py | 19 ++++++++++++++ 07_mini_proyectos/retos/reto4/filtertodo.py | 6 +++++ 07_mini_proyectos/retos/reto4/read_write.py | 28 +++++++++++++++++++++ gatos.txt | 23 ++++++++++++++--- 4 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 07_mini_proyectos/retos/reto4/filtertodo.py create mode 100644 07_mini_proyectos/retos/reto4/read_write.py diff --git a/07_mini_proyectos/retos/reto4/app.py b/07_mini_proyectos/retos/reto4/app.py index 8f5bc32..9bfcec7 100644 --- a/07_mini_proyectos/retos/reto4/app.py +++ b/07_mini_proyectos/retos/reto4/app.py @@ -5,3 +5,22 @@ # - Salida: resumen por pantalla y guardado opcional a archivo. # **Bonus**: Usa operador morsa para leer el archivo línea por línea. +from read_write import read_file, write_file + +def main(): + + print("--- Estadísticas del refugio de gatos ---") + + gatos = [ + {"nombre": "Michi", "edad": 9, "peso": 6.9}, + {"nombre": "Leo", "edad": 4, "peso": 4.8}, + {"nombre": "Nico", "edad": 5, "peso": 5.0}, + {"nombre": "Chachito", "edad": 10, "peso": 13.2} + ] + + write_file("gatos.txt", gatos) + + read_file("gatos.txt") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto4/filtertodo.py b/07_mini_proyectos/retos/reto4/filtertodo.py new file mode 100644 index 0000000..16822e6 --- /dev/null +++ b/07_mini_proyectos/retos/reto4/filtertodo.py @@ -0,0 +1,6 @@ +# filtertodo.py +# Módulo donde se calcula el conteo, la media, la mediana simple y el top-k más pesados de la lista de gatos + +def multitask(list): + + count = 0 \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto4/read_write.py b/07_mini_proyectos/retos/reto4/read_write.py new file mode 100644 index 0000000..4c5809e --- /dev/null +++ b/07_mini_proyectos/retos/reto4/read_write.py @@ -0,0 +1,28 @@ +# read_write.py +# Módulo para leer y escribir archivos + +def read_file(archive): + try: + print(f"Leyendo archivo {archive}") + with open(archive, "r", encoding="utf-8") as file: + content = file.read() + print(content) + print(f"\nArchivo {archive} leído correctamente. ✅") + except FileNotFoundError: + print("❌ No se ha encontrado el archivo.") + except Exception as e: + print("❌ Error en la lectura del archivo: {e}") + +def write_file(archive, dict): + + try: + print(f"Escribiendo archivo {archive}") + with open(archive, "w", encoding="utf-8") as file: + for i, line in enumerate(dict, 1): + file.write(f"\nGato {i}") + for key, value in line.items(): + file.write(f"\n{key}: {value}") + file.write("\n-----------------") + print(f"\nArchivo {archive} creado y escrito correctamente. ✅") + except Exception as e: + print(f"❌ Error en la escritura del archivo: {e}") \ No newline at end of file diff --git a/gatos.txt b/gatos.txt index 8c5d898..9a8bb97 100644 --- a/gatos.txt +++ b/gatos.txt @@ -1,4 +1,21 @@ -Leo - 6 años - 5.6 kg -Niko - 5 años - 6.5 kg -Chachito - 7 años - 7.0 kg \ No newline at end of file +Gato 1 +nombre: Michi +edad: 9 +peso: 6.9 +----------------- +Gato 2 +nombre: Leo +edad: 4 +peso: 4.8 +----------------- +Gato 3 +nombre: Nico +edad: 5 +peso: 5.0 +----------------- +Gato 4 +nombre: Chachito +edad: 10 +peso: 13.2 +----------------- \ No newline at end of file From 6400161638d1925e47c76b8b887e620ac71b3ca4 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 17 Nov 2025 20:16:52 +0100 Subject: [PATCH 316/323] =?UTF-8?q?fix:=20organizacion=20de=20archivos=20p?= =?UTF-8?q?ara=20m=C3=B3dulos=2006=5Farchivos=5Fy=5Fmodulos=20y=2007=5Fmin?= =?UTF-8?q?i=5Fproyectos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 06_archivos_y_modulos/desafio/visitas.log | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 06_archivos_y_modulos/desafio/visitas.log diff --git a/06_archivos_y_modulos/desafio/visitas.log b/06_archivos_y_modulos/desafio/visitas.log new file mode 100644 index 0000000..c7706f8 --- /dev/null +++ b/06_archivos_y_modulos/desafio/visitas.log @@ -0,0 +1,17 @@ + +1º log: +| fecha - 2024-10-11 08:11:59 || visita - Visita desde IP 192.168.1.1 | +2º log: +| fecha - 2024-10-11 10:30:43 || visita - Visita desde IP 192.168.1.2 | +3º log: +| fecha - 2024-10-11 12:41:12 || visita - Visita desde IP 192.168.1.4 | +4º log: +| fecha - 2024-10-11 17:30:29 || visita - Visita desde IP 192.168.1.6 | +5º log: +| fecha - 2024-10-12 08:10:32 || visita - Visita desde IP 192.168.1.8 | +6º log: +| fecha - 2024-10-12 11:11:48 || visita - Visita desde IP 192.168.1.9 | +7º log: +| fecha - 2024-10-12 18:21:51 || visita - Visita desde IP 192.168.1.10 | +8º log: +| fecha - 2024-10-13 08:04:12 || visita - Visita desde IP 192.168.1.11 | \ No newline at end of file From 19d68ec7ad077f4155b7f2f12f1d888f5fc0ed86 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Mon, 17 Nov 2025 20:17:23 +0100 Subject: [PATCH 317/323] =?UTF-8?q?fix:=20organizacion=20de=20archivos=20p?= =?UTF-8?q?ara=20m=C3=B3dulos=2006=5Farchivos=5Fy=5Fmodulos=20y=2007=5Fmin?= =?UTF-8?q?i=5Fproyectos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autonomos/{ => ejercicio1}/ejercicio1.py | 0 .../autonomos/ejercicio1/gatos.csv | 0 .../autonomos/{ => ejercicio2}/ejercicio2.py | 0 .../autonomos/ejercicio2/gatos.txt | 4 ++++ .../autonomos/ejercicio2/tarea.txt | 4 ++++ .../autonomos/{ => ejercicio2}/utiles.py | 0 .../autonomos/ejercicio3/tarea.txt | 0 .../autonomos/ejercicio5/archivo.txt | 0 07_mini_proyectos/retos/{ => reto1}/reto1.py | 0 antonio.json | 6 ------ archivo.txt | 7 ------- donde45.json | 6 ------ escribir.txt | 3 --- gatos.txt | 21 ------------------- historial_calculadora.json | 1 - pepe.txt | 6 ------ rec.txt | 6 ------ salida.txt | 3 --- tarea1.txt | 0 text.txt | 17 --------------- texto.json | 6 ------ textouno.txt | 6 ------ visitas.log | 17 --------------- 23 files changed, 8 insertions(+), 105 deletions(-) rename 06_archivos_y_modulos/autonomos/{ => ejercicio1}/ejercicio1.py (100%) rename gatos.csv => 06_archivos_y_modulos/autonomos/ejercicio1/gatos.csv (100%) rename 06_archivos_y_modulos/autonomos/{ => ejercicio2}/ejercicio2.py (100%) create mode 100644 06_archivos_y_modulos/autonomos/ejercicio2/gatos.txt create mode 100644 06_archivos_y_modulos/autonomos/ejercicio2/tarea.txt rename 06_archivos_y_modulos/autonomos/{ => ejercicio2}/utiles.py (100%) rename tarea.txt => 06_archivos_y_modulos/autonomos/ejercicio3/tarea.txt (100%) rename TEXTO.txt => 06_archivos_y_modulos/autonomos/ejercicio5/archivo.txt (100%) rename 07_mini_proyectos/retos/{ => reto1}/reto1.py (100%) delete mode 100644 antonio.json delete mode 100644 archivo.txt delete mode 100644 donde45.json delete mode 100644 escribir.txt delete mode 100644 gatos.txt delete mode 100644 historial_calculadora.json delete mode 100644 pepe.txt delete mode 100644 rec.txt delete mode 100644 salida.txt delete mode 100644 tarea1.txt delete mode 100644 text.txt delete mode 100644 texto.json delete mode 100644 textouno.txt delete mode 100644 visitas.log diff --git a/06_archivos_y_modulos/autonomos/ejercicio1.py b/06_archivos_y_modulos/autonomos/ejercicio1/ejercicio1.py similarity index 100% rename from 06_archivos_y_modulos/autonomos/ejercicio1.py rename to 06_archivos_y_modulos/autonomos/ejercicio1/ejercicio1.py diff --git a/gatos.csv b/06_archivos_y_modulos/autonomos/ejercicio1/gatos.csv similarity index 100% rename from gatos.csv rename to 06_archivos_y_modulos/autonomos/ejercicio1/gatos.csv diff --git a/06_archivos_y_modulos/autonomos/ejercicio2.py b/06_archivos_y_modulos/autonomos/ejercicio2/ejercicio2.py similarity index 100% rename from 06_archivos_y_modulos/autonomos/ejercicio2.py rename to 06_archivos_y_modulos/autonomos/ejercicio2/ejercicio2.py diff --git a/06_archivos_y_modulos/autonomos/ejercicio2/gatos.txt b/06_archivos_y_modulos/autonomos/ejercicio2/gatos.txt new file mode 100644 index 0000000..8c5d898 --- /dev/null +++ b/06_archivos_y_modulos/autonomos/ejercicio2/gatos.txt @@ -0,0 +1,4 @@ + +Leo - 6 años - 5.6 kg +Niko - 5 años - 6.5 kg +Chachito - 7 años - 7.0 kg \ No newline at end of file diff --git a/06_archivos_y_modulos/autonomos/ejercicio2/tarea.txt b/06_archivos_y_modulos/autonomos/ejercicio2/tarea.txt new file mode 100644 index 0000000..335e2c1 --- /dev/null +++ b/06_archivos_y_modulos/autonomos/ejercicio2/tarea.txt @@ -0,0 +1,4 @@ + +Estudiar Python +Hacer la cama +Comer cachopo \ No newline at end of file diff --git a/06_archivos_y_modulos/autonomos/utiles.py b/06_archivos_y_modulos/autonomos/ejercicio2/utiles.py similarity index 100% rename from 06_archivos_y_modulos/autonomos/utiles.py rename to 06_archivos_y_modulos/autonomos/ejercicio2/utiles.py diff --git a/tarea.txt b/06_archivos_y_modulos/autonomos/ejercicio3/tarea.txt similarity index 100% rename from tarea.txt rename to 06_archivos_y_modulos/autonomos/ejercicio3/tarea.txt diff --git a/TEXTO.txt b/06_archivos_y_modulos/autonomos/ejercicio5/archivo.txt similarity index 100% rename from TEXTO.txt rename to 06_archivos_y_modulos/autonomos/ejercicio5/archivo.txt diff --git a/07_mini_proyectos/retos/reto1.py b/07_mini_proyectos/retos/reto1/reto1.py similarity index 100% rename from 07_mini_proyectos/retos/reto1.py rename to 07_mini_proyectos/retos/reto1/reto1.py diff --git a/antonio.json b/antonio.json deleted file mode 100644 index 7069691..0000000 --- a/antonio.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "nombre": "antonio", - "email": "antonio@rento.es", - "edad": 56, - "contrasena": "antoniolobato" -} \ No newline at end of file diff --git a/archivo.txt b/archivo.txt deleted file mode 100644 index 76c1392..0000000 --- a/archivo.txt +++ /dev/null @@ -1,7 +0,0 @@ - -# Este es un comentario -Línea válida para procesar -Corta - -# Otro comentario -Esta línea también es válida y debe procesarse \ No newline at end of file diff --git a/donde45.json b/donde45.json deleted file mode 100644 index 59276cc..0000000 --- a/donde45.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "nombre": "pepe", - "email": "done@reto.com", - "edad": 76, - "contrasena": "popenciodon" -} \ No newline at end of file diff --git a/escribir.txt b/escribir.txt deleted file mode 100644 index 4c66d32..0000000 --- a/escribir.txt +++ /dev/null @@ -1,3 +0,0 @@ -Hola, que tal? -Me encantan los cachopos -Y tambin los chipis \ No newline at end of file diff --git a/gatos.txt b/gatos.txt deleted file mode 100644 index 9a8bb97..0000000 --- a/gatos.txt +++ /dev/null @@ -1,21 +0,0 @@ - -Gato 1 -nombre: Michi -edad: 9 -peso: 6.9 ------------------ -Gato 2 -nombre: Leo -edad: 4 -peso: 4.8 ------------------ -Gato 3 -nombre: Nico -edad: 5 -peso: 5.0 ------------------ -Gato 4 -nombre: Chachito -edad: 10 -peso: 13.2 ------------------ \ No newline at end of file diff --git a/historial_calculadora.json b/historial_calculadora.json deleted file mode 100644 index 0637a08..0000000 --- a/historial_calculadora.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/pepe.txt b/pepe.txt deleted file mode 100644 index fa54c0d..0000000 --- a/pepe.txt +++ /dev/null @@ -1,6 +0,0 @@ - -Michi -Simba -Niko -Leo -Chuski \ No newline at end of file diff --git a/rec.txt b/rec.txt deleted file mode 100644 index fa54c0d..0000000 --- a/rec.txt +++ /dev/null @@ -1,6 +0,0 @@ - -Michi -Simba -Niko -Leo -Chuski \ No newline at end of file diff --git a/salida.txt b/salida.txt deleted file mode 100644 index fd2eebd..0000000 --- a/salida.txt +++ /dev/null @@ -1,3 +0,0 @@ - -Línea válida para procesar -Esta línea también es válida y debe procesarse \ No newline at end of file diff --git a/tarea1.txt b/tarea1.txt deleted file mode 100644 index e69de29..0000000 diff --git a/text.txt b/text.txt deleted file mode 100644 index c7706f8..0000000 --- a/text.txt +++ /dev/null @@ -1,17 +0,0 @@ - -1º log: -| fecha - 2024-10-11 08:11:59 || visita - Visita desde IP 192.168.1.1 | -2º log: -| fecha - 2024-10-11 10:30:43 || visita - Visita desde IP 192.168.1.2 | -3º log: -| fecha - 2024-10-11 12:41:12 || visita - Visita desde IP 192.168.1.4 | -4º log: -| fecha - 2024-10-11 17:30:29 || visita - Visita desde IP 192.168.1.6 | -5º log: -| fecha - 2024-10-12 08:10:32 || visita - Visita desde IP 192.168.1.8 | -6º log: -| fecha - 2024-10-12 11:11:48 || visita - Visita desde IP 192.168.1.9 | -7º log: -| fecha - 2024-10-12 18:21:51 || visita - Visita desde IP 192.168.1.10 | -8º log: -| fecha - 2024-10-13 08:04:12 || visita - Visita desde IP 192.168.1.11 | \ No newline at end of file diff --git a/texto.json b/texto.json deleted file mode 100644 index 644c1df..0000000 --- a/texto.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "nombre": "Felipe", - "email": "pepe@gmail.com", - "edad": 34, - "contrasena": "pepeviyuela" -} \ No newline at end of file diff --git a/textouno.txt b/textouno.txt deleted file mode 100644 index fa54c0d..0000000 --- a/textouno.txt +++ /dev/null @@ -1,6 +0,0 @@ - -Michi -Simba -Niko -Leo -Chuski \ No newline at end of file diff --git a/visitas.log b/visitas.log deleted file mode 100644 index c7706f8..0000000 --- a/visitas.log +++ /dev/null @@ -1,17 +0,0 @@ - -1º log: -| fecha - 2024-10-11 08:11:59 || visita - Visita desde IP 192.168.1.1 | -2º log: -| fecha - 2024-10-11 10:30:43 || visita - Visita desde IP 192.168.1.2 | -3º log: -| fecha - 2024-10-11 12:41:12 || visita - Visita desde IP 192.168.1.4 | -4º log: -| fecha - 2024-10-11 17:30:29 || visita - Visita desde IP 192.168.1.6 | -5º log: -| fecha - 2024-10-12 08:10:32 || visita - Visita desde IP 192.168.1.8 | -6º log: -| fecha - 2024-10-12 11:11:48 || visita - Visita desde IP 192.168.1.9 | -7º log: -| fecha - 2024-10-12 18:21:51 || visita - Visita desde IP 192.168.1.10 | -8º log: -| fecha - 2024-10-13 08:04:12 || visita - Visita desde IP 192.168.1.11 | \ No newline at end of file From 10961e61f762293f60893236d77a81208d55609d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 18 Nov 2025 11:11:35 +0100 Subject: [PATCH 318/323] feat: agregar archivos ejecutados en retos de 07_mini_ptoyectos --- 07_mini_proyectos/retos/reto2/antonio.json | 6 +++++ .../retos/reto2/cachopoking.json | 6 +++++ 07_mini_proyectos/retos/reto3/archivo.txt | 7 ++++++ 07_mini_proyectos/retos/reto3/salida.txt | 3 +++ 07_mini_proyectos/retos/reto4/app.py | 3 +++ 07_mini_proyectos/retos/reto4/filtertodo.py | 25 +++++++++++++++++-- 07_mini_proyectos/retos/reto4/gatos.txt | 21 ++++++++++++++++ 07_mini_proyectos/retos/reto4/read_write.py | 3 ++- 8 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 07_mini_proyectos/retos/reto2/antonio.json create mode 100644 07_mini_proyectos/retos/reto2/cachopoking.json create mode 100644 07_mini_proyectos/retos/reto3/archivo.txt create mode 100644 07_mini_proyectos/retos/reto3/salida.txt create mode 100644 07_mini_proyectos/retos/reto4/gatos.txt diff --git a/07_mini_proyectos/retos/reto2/antonio.json b/07_mini_proyectos/retos/reto2/antonio.json new file mode 100644 index 0000000..0cd5e5a --- /dev/null +++ b/07_mini_proyectos/retos/reto2/antonio.json @@ -0,0 +1,6 @@ +{ + "nombre": "antonio", + "email": "anotio@retro.com", + "edad": 45, + "contrasena": "antoniolobato" +} \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto2/cachopoking.json b/07_mini_proyectos/retos/reto2/cachopoking.json new file mode 100644 index 0000000..101c80c --- /dev/null +++ b/07_mini_proyectos/retos/reto2/cachopoking.json @@ -0,0 +1,6 @@ +{ + "nombre": "david", + "email": "cachopo@gmail.com", + "edad": 23, + "contrasena": "cachopoenorme" +} \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto3/archivo.txt b/07_mini_proyectos/retos/reto3/archivo.txt new file mode 100644 index 0000000..76c1392 --- /dev/null +++ b/07_mini_proyectos/retos/reto3/archivo.txt @@ -0,0 +1,7 @@ + +# Este es un comentario +Línea válida para procesar +Corta + +# Otro comentario +Esta línea también es válida y debe procesarse \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto3/salida.txt b/07_mini_proyectos/retos/reto3/salida.txt new file mode 100644 index 0000000..fd2eebd --- /dev/null +++ b/07_mini_proyectos/retos/reto3/salida.txt @@ -0,0 +1,3 @@ + +Línea válida para procesar +Esta línea también es válida y debe procesarse \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto4/app.py b/07_mini_proyectos/retos/reto4/app.py index 9bfcec7..9c30e1a 100644 --- a/07_mini_proyectos/retos/reto4/app.py +++ b/07_mini_proyectos/retos/reto4/app.py @@ -6,6 +6,7 @@ # **Bonus**: Usa operador morsa para leer el archivo línea por línea. from read_write import read_file, write_file +from filtertodo import multitask def main(): @@ -22,5 +23,7 @@ def main(): read_file("gatos.txt") + multitask("gatos.txt", gatos) + if __name__ == "__main__": main() \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto4/filtertodo.py b/07_mini_proyectos/retos/reto4/filtertodo.py index 16822e6..a2a6521 100644 --- a/07_mini_proyectos/retos/reto4/filtertodo.py +++ b/07_mini_proyectos/retos/reto4/filtertodo.py @@ -1,6 +1,27 @@ # filtertodo.py # Módulo donde se calcula el conteo, la media, la mediana simple y el top-k más pesados de la lista de gatos -def multitask(list): +def multitask(archive, list): - count = 0 \ No newline at end of file + datos_edad = [] + datos_peso = [] + + try: + with open(archive, "r", encoding="utf-8") as file: + while (linea := file.readline()): + if (linea_edad := linea.strip()) and linea_edad.startswith("edad"): + datos_edad.append(linea_edad) + elif (linea_peso := linea.strip()) and linea_peso.startswith("peso"): + datos_peso.append(linea_peso) + + + for i in datos_edad: + print(i) + + for y in datos_peso: + print(y) + + except FileNotFoundError: + print("❌ No se ha encontrado el archivo") + except Exception as e: + print(f"❌ Error en la lectura del archivo: {e}") \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto4/gatos.txt b/07_mini_proyectos/retos/reto4/gatos.txt new file mode 100644 index 0000000..8f1a5c6 --- /dev/null +++ b/07_mini_proyectos/retos/reto4/gatos.txt @@ -0,0 +1,21 @@ + +Gato 1 +nombre: Michi +edad: 9 +peso: 6.9 +---------------- +Gato 2 +nombre: Leo +edad: 4 +peso: 4.8 +---------------- +Gato 3 +nombre: Nico +edad: 5 +peso: 5.0 +---------------- +Gato 4 +nombre: Chachito +edad: 10 +peso: 13.2 +---------------- \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto4/read_write.py b/07_mini_proyectos/retos/reto4/read_write.py index 4c5809e..d57c433 100644 --- a/07_mini_proyectos/retos/reto4/read_write.py +++ b/07_mini_proyectos/retos/reto4/read_write.py @@ -22,7 +22,8 @@ def write_file(archive, dict): file.write(f"\nGato {i}") for key, value in line.items(): file.write(f"\n{key}: {value}") - file.write("\n-----------------") + file.write("\n----------------") + print(f"\nArchivo {archive} creado y escrito correctamente. ✅") except Exception as e: print(f"❌ Error en la escritura del archivo: {e}") \ No newline at end of file From 2733c9235c129dc29394a42c73b0584183d23f98 Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 18 Nov 2025 13:57:23 +0100 Subject: [PATCH 319/323] feat: completar reto 4 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto4/app.py | 9 ++- 07_mini_proyectos/retos/reto4/filtertodo.py | 81 +++++++++++++++++---- 07_mini_proyectos/retos/reto4/resumen.txt | 10 +++ 3 files changed, 82 insertions(+), 18 deletions(-) create mode 100644 07_mini_proyectos/retos/reto4/resumen.txt diff --git a/07_mini_proyectos/retos/reto4/app.py b/07_mini_proyectos/retos/reto4/app.py index 9c30e1a..0243afc 100644 --- a/07_mini_proyectos/retos/reto4/app.py +++ b/07_mini_proyectos/retos/reto4/app.py @@ -6,7 +6,7 @@ # **Bonus**: Usa operador morsa para leer el archivo línea por línea. from read_write import read_file, write_file -from filtertodo import multitask +from filtertodo import multitask, write def main(): @@ -23,7 +23,12 @@ def main(): read_file("gatos.txt") - multitask("gatos.txt", gatos) + media_edad, media_peso, mediana_edad, mediana_peso, top_3_pesados = multitask(gatos) + + resumen = [media_edad, media_peso, mediana_edad, mediana_peso, top_3_pesados] + + write("resumen.txt", resumen) + if __name__ == "__main__": main() \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto4/filtertodo.py b/07_mini_proyectos/retos/reto4/filtertodo.py index a2a6521..02968cf 100644 --- a/07_mini_proyectos/retos/reto4/filtertodo.py +++ b/07_mini_proyectos/retos/reto4/filtertodo.py @@ -1,25 +1,74 @@ # filtertodo.py # Módulo donde se calcula el conteo, la media, la mediana simple y el top-k más pesados de la lista de gatos -def multitask(archive, list): +def multitask(list): - datos_edad = [] - datos_peso = [] + print("\n--- Tareas de la lista de gatos---") + print("\n--- Conteo ---") + print(f"Total de gatos: {(contador := len(list))}") + + print("\n--- Media (Promedio) ---") + media_edad = (suma_edades := sum(gato["edad"] for gato in list)) / contador + print(f"Promedio de la edad de los gatos: {media_edad:.2f} años") + + media_peso = (suma_peso := sum(gato["peso"] for gato in list)) / contador + print(f"Promedio del peso de los gatos: {media_peso:.2f} kgs") + + print("\n--- Mediana simple ---") + # La mediana es el valor central cuando los datos están ordenados + # Extraemos y ordenamos las edades + m = len(edades_ordenadas := sorted(gato["edad"] for gato in list)) + + # Calcular la mediana de la edad + if m % 2 == 0: # Si hay cantidad par de elementos + # Promedio de los dos valores centrales + mediana_edad = (edades_ordenadas[m//2 - 1] + edades_ordenadas[m//2]) / 2 + else: # Si hay cantidad impar + # El valor del medio + mediana_edad = edades_ordenadas[m//2] + + # Extraemos y ordenamod los pesos + m = len(pesos_ordenados := sorted(gato["peso"] for gato in list)) + + # Calcular la mediana del peso + if m % 2 == 0: + mediana_peso = (pesos_ordenados[m//2 - 1] + pesos_ordenados[m//2]) / 2 + else: + mediana_peso = pesos_ordenados[m//2] + + print(f"Mediana de edad: {mediana_edad:.2f} años") + print(f"Mediana de peso: {mediana_peso:.2f} kgs") + + print("\n===== TOP 3 GATOS MÁS PESADOS =====") + # Ordenar los gatos por peso de mayor a menor + # sorted() con key=lambda: Ordena los diccionarios según el campo que elijas + gatos_por_peso = sorted(list, key=lambda gato: gato["peso"], reverse=True) + + # Tomar sólo los 3 primeros gatos ordenados por peso + top_3_pesados = gatos_por_peso[:3] + + for i, gato in enumerate(top_3_pesados, 1): + print(f"{i}. {gato['nombre']} | Edad: {gato['edad']} años | Peso: {gato['peso']} kgs.") + + return media_edad, media_peso, mediana_edad, mediana_peso, top_3_pesados + +def write(archive_out, resumen): try: - with open(archive, "r", encoding="utf-8") as file: - while (linea := file.readline()): - if (linea_edad := linea.strip()) and linea_edad.startswith("edad"): - datos_edad.append(linea_edad) - elif (linea_peso := linea.strip()) and linea_peso.startswith("peso"): - datos_peso.append(linea_peso) - - - for i in datos_edad: - print(i) - - for y in datos_peso: - print(y) + with open(archive_out, "w", encoding="utf-8") as file: + for i, linea in enumerate(resumen, 1): + if i == 1: + file.write(f"Promedio de edad: {linea} años.\n") + elif i == 2: + file.write(f"\nPromedio de peso: {linea} kgs.\n") + elif i == 3: + file.write(f"\nMediana de edad: {linea} años.\n") + elif i == 4: + file.write(f"\nMediana de peso: {linea} kgs.\n") + elif i == 5: + file.write(f"\nTop 3 gatos más pesados:\n{linea}") + + print(f"\nArchivo {archive_out} escrito correctamente ✅") except FileNotFoundError: print("❌ No se ha encontrado el archivo") diff --git a/07_mini_proyectos/retos/reto4/resumen.txt b/07_mini_proyectos/retos/reto4/resumen.txt new file mode 100644 index 0000000..164a829 --- /dev/null +++ b/07_mini_proyectos/retos/reto4/resumen.txt @@ -0,0 +1,10 @@ +Promedio de edad: 7.0 años. + +Promedio de peso: 7.475 kgs. + +Mediana de edad: 7.0 años. + +Mediana de peso: 5.95 kgs. + +Top 3 gatos más pesados: +[{'nombre': 'Chachito', 'edad': 10, 'peso': 13.2}, {'nombre': 'Michi', 'edad': 9, 'peso': 6.9}, {'nombre': 'Nico', 'edad': 5, 'peso': 5.0}] \ No newline at end of file From 94a10b102b937cd9b88fce68722b52cfbfd5f73b Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 18 Nov 2025 14:13:58 +0100 Subject: [PATCH 320/323] feat: agregar reto 5 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto4/read_write.py | 4 ++-- 07_mini_proyectos/retos/reto5/app.py | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 07_mini_proyectos/retos/reto5/app.py diff --git a/07_mini_proyectos/retos/reto4/read_write.py b/07_mini_proyectos/retos/reto4/read_write.py index d57c433..47fd037 100644 --- a/07_mini_proyectos/retos/reto4/read_write.py +++ b/07_mini_proyectos/retos/reto4/read_write.py @@ -5,8 +5,8 @@ def read_file(archive): try: print(f"Leyendo archivo {archive}") with open(archive, "r", encoding="utf-8") as file: - content = file.read() - print(content) + + print(content := file.read()) print(f"\nArchivo {archive} leído correctamente. ✅") except FileNotFoundError: print("❌ No se ha encontrado el archivo.") diff --git a/07_mini_proyectos/retos/reto5/app.py b/07_mini_proyectos/retos/reto5/app.py new file mode 100644 index 0000000..9440cd5 --- /dev/null +++ b/07_mini_proyectos/retos/reto5/app.py @@ -0,0 +1,6 @@ +# Reto 5: Mini sistema de tickets +# **Enunciado: ** +# - Usa listas y diccionarios para manejar tickets (id, título, estado). +# - Operaciones: crear, listar, cerrar. +# - Persistencia opcional en archivo. +# **Bonus**: Usa operador morsa en el menú principal. \ No newline at end of file From e99b4b0218cd895d6455f4a7780a259e24e4586d Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 18 Nov 2025 21:17:18 +0100 Subject: [PATCH 321/323] feat: completar reto 5 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto5/app.py | 39 +++++++++++++++++++- 07_mini_proyectos/retos/reto5/contenido.json | 22 +++++++++++ 07_mini_proyectos/retos/reto5/tickets.py | 38 +++++++++++++++++++ 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 07_mini_proyectos/retos/reto5/contenido.json create mode 100644 07_mini_proyectos/retos/reto5/tickets.py diff --git a/07_mini_proyectos/retos/reto5/app.py b/07_mini_proyectos/retos/reto5/app.py index 9440cd5..e6e5835 100644 --- a/07_mini_proyectos/retos/reto5/app.py +++ b/07_mini_proyectos/retos/reto5/app.py @@ -3,4 +3,41 @@ # - Usa listas y diccionarios para manejar tickets (id, título, estado). # - Operaciones: crear, listar, cerrar. # - Persistencia opcional en archivo. -# **Bonus**: Usa operador morsa en el menú principal. \ No newline at end of file +# **Bonus**: Usa operador morsa en el menú principal. + +import json +from tickets import mostrar_menu + +def main(): + print("--- Mini sistema de tickets ---") + + tickets = [] + next_id = 1 + archivo = "contenido.json" + + print("\nLeyendo archivo...") + try: + with open(archivo, "r", encoding="utf-8") as file: + if (contenido := json.load(file)): + lista = contenido + next_id = max(l["id"] for l in lista) + 1 + + except FileNotFoundError: + print("❌ No se ha encontrado el archivo.") + except Exception as e: + print(f"❌ Error al leer el archivo: {e}") + + mostrar_menu(tickets, next_id) + + try: + with open(archivo, "w", encoding="utf-8") as file: + print(f"Escribiendo tickets en archivo {archivo}...") + json.dump(tickets, file, indent=2, ensure_ascii=False) + print(f"Tickets guardados en {archivo} ✅") + except Exception as e: + print(f"❌ Error al escribir el archivo: {e}") + + print("\nHasta pronto 👋") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto5/contenido.json b/07_mini_proyectos/retos/reto5/contenido.json new file mode 100644 index 0000000..41633a3 --- /dev/null +++ b/07_mini_proyectos/retos/reto5/contenido.json @@ -0,0 +1,22 @@ +[ + { + "id": 1, + "titulo": "pepe", + "estado": "abierto" + }, + { + "id": 2, + "titulo": "tolai", + "estado": "cerrado" + }, + { + "id": 3, + "titulo": "pendenciero", + "estado": "abierto" + }, + { + "id": 4, + "titulo": "cachopo", + "estado": "cerrado" + } +] \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto5/tickets.py b/07_mini_proyectos/retos/reto5/tickets.py new file mode 100644 index 0000000..c88e4f9 --- /dev/null +++ b/07_mini_proyectos/retos/reto5/tickets.py @@ -0,0 +1,38 @@ +# tickets.py +# Módulo para crear, listar y cerrar tickets + +def mostrar_menu(lista, id): + while (opcion := input("\nOpciones:\n1)Crear ticket\n2)Listar ticket\n3)Cerrar ticket\n\nElige una opción --> ").strip()) != "4": + if opcion == "1": + if (titulo := input("\nTítulo del ticket --> ").strip()): + lista.append({"id": id, "titulo": titulo, "estado": "abierto"}) + id += 1 + print(f"Ticket creado: {titulo}") + else: + print("❌ Título no válido") + + elif opcion == "2": + if not lista: + print("No hay tickets") + else: + for l in lista: + print(f"{l['id']}: {l['titulo']} | Estado: {l['estado']}") + + elif opcion == "3": + while not (id_str := input("ID del ticket a cerrar: ").strip()).isdigit(): + print("ID no válido") + + id_ticket = int(id_str) + for t in lista: + + if t["id"] == id_ticket: + t["estado"] = "cerrado" + print("Encontrado!! Ticket cerrado") + break + else: + print("No se encontró el ticket o se sigue buscando...") + + else: + print("❌ Opción no válida.") + + From 39e2c1f38d4101907a1751a62683e70e18d10dad Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Tue, 18 Nov 2025 21:19:59 +0100 Subject: [PATCH 322/323] feat: agregar reto 6 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto6/app.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 07_mini_proyectos/retos/reto6/app.py diff --git a/07_mini_proyectos/retos/reto6/app.py b/07_mini_proyectos/retos/reto6/app.py new file mode 100644 index 0000000..369ac2f --- /dev/null +++ b/07_mini_proyectos/retos/reto6/app.py @@ -0,0 +1,5 @@ +# Reto 6: Parser de logs simple +# **Enunciado: ** +# - Lee un archivo de logs, separa por espacio, cuenta por tipo o fecha. +# - Guarda resultados en `resumen.txt`. +# **Bonus**: Usa operador morsa para leer y filtrar líneas en una sola expresión. \ No newline at end of file From 7ee49ef173507fcdb72be25c6a47cf89e543d89e Mon Sep 17 00:00:00 2001 From: DavidLapi Date: Wed, 19 Nov 2025 08:27:14 +0100 Subject: [PATCH 323/323] feat: completar reto 6 en 07_mini_proyectos --- 07_mini_proyectos/retos/reto6/app.py | 15 ++++- 07_mini_proyectos/retos/reto6/logs.log | 5 ++ 07_mini_proyectos/retos/reto6/logs.py | 75 +++++++++++++++++++++++ 07_mini_proyectos/retos/reto6/resumen.txt | 11 ++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 07_mini_proyectos/retos/reto6/logs.log create mode 100644 07_mini_proyectos/retos/reto6/logs.py create mode 100644 07_mini_proyectos/retos/reto6/resumen.txt diff --git a/07_mini_proyectos/retos/reto6/app.py b/07_mini_proyectos/retos/reto6/app.py index 369ac2f..cd857fd 100644 --- a/07_mini_proyectos/retos/reto6/app.py +++ b/07_mini_proyectos/retos/reto6/app.py @@ -2,4 +2,17 @@ # **Enunciado: ** # - Lee un archivo de logs, separa por espacio, cuenta por tipo o fecha. # - Guarda resultados en `resumen.txt`. -# **Bonus**: Usa operador morsa para leer y filtrar líneas en una sola expresión. \ No newline at end of file +# **Bonus**: Usa operador morsa para leer y filtrar líneas en una sola expresión. + +from logs import log + +def main(): + print("--- Parser de logs simple ---") + + archivo_entrada = "logs.log" + archivo_salida = "resumen.txt" + + log(archivo_entrada, archivo_salida) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto6/logs.log b/07_mini_proyectos/retos/reto6/logs.log new file mode 100644 index 0000000..da44a74 --- /dev/null +++ b/07_mini_proyectos/retos/reto6/logs.log @@ -0,0 +1,5 @@ +2024-01-15 10:30:45 ERROR Conexión perdida con el servidor +2024-01-15 11:20:12 INFO Usuario admin realizó login exitoso +2024-01-15 14:45:23 WARNING Memoria baja detectada +2024-01-16 09:15:33 ERROR Fallo en base de datos +2024-01-16 10:22:11 INFO Sistema iniciado correctamente \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto6/logs.py b/07_mini_proyectos/retos/reto6/logs.py new file mode 100644 index 0000000..babe399 --- /dev/null +++ b/07_mini_proyectos/retos/reto6/logs.py @@ -0,0 +1,75 @@ +# logs.py +# Módulo donde lee un archivo de logs, separa por espacio, cuenta por tipo o fecha +# Además, guarda los logs en 'resumen.txt' + +# Función para leer archivo logs y escribir su resumen +def log(entrada, salida): + + contador_fecha = {} + contador_tipo = {} + + try: + with open(entrada, "r", encoding="utf-8") as file: + + for line in file: + line = line.strip() + + if not line: + continue + + if len(partes := line.split()) < 3: + continue + + fecha = partes[0] + hora = partes[1] + tipo = partes[2] + + # Contar por tipo de log + if tipo in contador_tipo: + contador_tipo[tipo] += 1 + else: + contador_tipo[tipo] = 1 + + # Contar por fecha + if fecha in contador_fecha: + contador_fecha[fecha] += 1 + else: + contador_fecha[fecha] = 1 + + # Mostrar resultados en pantalla + print("--- RESUMEN DE LOGS ---") + + print("\n🔍 Conteo por tipo de log:") + for tipo, cantidad in sorted(contador_tipo.items()): + print(f" {tipo}: {cantidad}") + + print("📅 Conteo por fecha:") + for fecha, cantidad in sorted(contador_fecha.items()): + print(f" {fecha}: {cantidad}") + + # Guardar resultados en resumen.txt + with open(salida, "w", encoding="utf-8") as out: + out.write("RESUMEN DE ANÁLISIS DE LOGS\n") + + # Escribir conteo por tipo + out.write("CONTEO POR TIPO DE LOG:\n") + for tipo, cantidad in sorted(contador_tipo.items()): + out.write(f"{tipo}: {cantidad}\n") + out.write("\n") + + # Escribir conteo por fecha + out.write("CONTEO POR FECHA:\n") + for fecha, cantidad in sorted(contador_fecha.items()): + out.write(f"{fecha}: {cantidad}\n") + out.write("\n") + + # Escribir totales + total_logs = sum(contador_tipo.values()) + out.write(f"TOTAL DE LOGS PROCESADOS: {total_logs}\n") + + print(f"Resumen guardado en {salida}") + + except FileNotFoundError: + print("❌ No se ha encontrado el archivo.") + except Exception as e: + print(f"❌ Error al leer o escribir datos: {e}") \ No newline at end of file diff --git a/07_mini_proyectos/retos/reto6/resumen.txt b/07_mini_proyectos/retos/reto6/resumen.txt new file mode 100644 index 0000000..b667d5d --- /dev/null +++ b/07_mini_proyectos/retos/reto6/resumen.txt @@ -0,0 +1,11 @@ +RESUMEN DE ANÁLISIS DE LOGS +CONTEO POR TIPO DE LOG: +ERROR: 2 +INFO: 2 +WARNING: 1 + +CONTEO POR FECHA: +2024-01-15: 3 +2024-01-16: 2 + +TOTAL DE LOGS PROCESADOS: 5