From adbd459a374cb61be5e591941f3a65e4017b02fd Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Thu, 4 Sep 2025 17:52:34 -0400 Subject: [PATCH 01/21] Evidencia del reto 01 --- evidencias/reto-01.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 evidencias/reto-01.md diff --git a/evidencias/reto-01.md b/evidencias/reto-01.md new file mode 100644 index 0000000..44cdcb8 --- /dev/null +++ b/evidencias/reto-01.md @@ -0,0 +1,3 @@ +Fork realizado por Oscar2025 (mi usuario de github) +URL utilizado para el Fork: https://github.com/python-la-paz/psg-retos +URL resultante del fork: https://github.com/Oscar2512/psg-retos-forked \ No newline at end of file From 3e64f3bca8baf4fafd8e7a053fa45a95ae9e3c71 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Thu, 4 Sep 2025 17:56:10 -0400 Subject: [PATCH 02/21] Evidencia del reto 02 --- evidencias/reto-02.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 evidencias/reto-02.md diff --git a/evidencias/reto-02.md b/evidencias/reto-02.md new file mode 100644 index 0000000..912b786 --- /dev/null +++ b/evidencias/reto-02.md @@ -0,0 +1,2 @@ +Evidencia del reto 02 +Rama creada: Switched to a new branch 'Oscar2512' From c10e327bdd1f698e93ace1c97b47179e088ac6f8 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Thu, 4 Sep 2025 17:58:55 -0400 Subject: [PATCH 03/21] Evidencia del reto 03 --- evidencias/reto-03.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 evidencias/reto-03.md diff --git a/evidencias/reto-03.md b/evidencias/reto-03.md new file mode 100644 index 0000000..f7f8e94 --- /dev/null +++ b/evidencias/reto-03.md @@ -0,0 +1,9 @@ +Se realizo el clonado local con exito + git clone https://github.com/Oscar2512/psg-retos-forked.git +Cloning into 'psg-retos-forked'... +remote: Enumerating objects: 35, done. +remote: Counting objects: 100% (35/35), done. +remote: Compressing objects: 100% (26/26), done. +remote: Total 35 (delta 18), reused 22 (delta 9), pack-reused 0 (from 0) +Receiving objects: 100% (35/35), 18.20 KiB | 123.00 KiB/s, done. +Resolving deltas: 100% (18/18), done. \ No newline at end of file From be510050d35b38de97e15d47e659b4baddc336e2 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Thu, 4 Sep 2025 18:09:30 -0400 Subject: [PATCH 04/21] Evidencia del reto 04 --- evidencias/reto-04.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 evidencias/reto-04.md diff --git a/evidencias/reto-04.md b/evidencias/reto-04.md new file mode 100644 index 0000000..49a07bf --- /dev/null +++ b/evidencias/reto-04.md @@ -0,0 +1,17 @@ +Git subido al github con exito despues de haber completado la autenticacion en el navegador +git push -u origin Oscar2512 +info: please complete authentication in your browser... +Enumerating objects: 13, done. +Counting objects: 100% (13/13), done. +Delta compression using up to 4 threads +Compressing objects: 100% (11/11), done. +Writing objects: 100% (12/12), 1.30 KiB | 332.00 KiB/s, done. +Total 12 (delta 4), reused 0 (delta 0), pack-reused 0 (from 0) +remote: Resolving deltas: 100% (4/4), completed with 1 local object. +remote: +remote: Create a pull request for 'Oscar2512' on GitHub by visiting: +remote: https://github.com/Oscar2512/psg-retos-forked/pull/new/Oscar2512 +remote: +To https://github.com/Oscar2512/psg-retos-forked.git + * [new branch] Oscar2512 -> Oscar2512 +branch 'Oscar2512' set up to track 'origin/Oscar2512'. \ No newline at end of file From 1a3d12eff331247e4305c012cd6623a133c9fd2d Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Thu, 4 Sep 2025 18:42:12 -0400 Subject: [PATCH 05/21] estructura de retos creada y reto 5 completo --- retos_01/ejercicio_01.md | 0 retos_01/ejercicio_02.md | 0 retos_02/ejercicio_01.py | 0 retos_02/ejercicio_02.py | 0 retos_02/ejercicio_03.py | 0 retos_03/ejercicio_04.py | 0 retos_03/ejercicio_05.py | 0 retos_03/ejercicio_06.py | 0 retos_03/ejercicio_07.py | 0 retos_04/ejercicio_08.py | 0 retos_04/ejercicio_09.py | 0 retos_04/ejercicio_10.py | 0 retos_05/ejercicio_11.py | 0 retos_05/ejercicio_12.py | 0 retos_05/ejercicio_13.py | 0 retos_06/ejercicio_14.py | 0 16 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 retos_01/ejercicio_01.md create mode 100644 retos_01/ejercicio_02.md create mode 100644 retos_02/ejercicio_01.py create mode 100644 retos_02/ejercicio_02.py create mode 100644 retos_02/ejercicio_03.py create mode 100644 retos_03/ejercicio_04.py create mode 100644 retos_03/ejercicio_05.py create mode 100644 retos_03/ejercicio_06.py create mode 100644 retos_03/ejercicio_07.py create mode 100644 retos_04/ejercicio_08.py create mode 100644 retos_04/ejercicio_09.py create mode 100644 retos_04/ejercicio_10.py create mode 100644 retos_05/ejercicio_11.py create mode 100644 retos_05/ejercicio_12.py create mode 100644 retos_05/ejercicio_13.py create mode 100644 retos_06/ejercicio_14.py diff --git a/retos_01/ejercicio_01.md b/retos_01/ejercicio_01.md new file mode 100644 index 0000000..e69de29 diff --git a/retos_01/ejercicio_02.md b/retos_01/ejercicio_02.md new file mode 100644 index 0000000..e69de29 diff --git a/retos_02/ejercicio_01.py b/retos_02/ejercicio_01.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_02/ejercicio_02.py b/retos_02/ejercicio_02.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_02/ejercicio_03.py b/retos_02/ejercicio_03.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_03/ejercicio_04.py b/retos_03/ejercicio_04.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_03/ejercicio_05.py b/retos_03/ejercicio_05.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_03/ejercicio_06.py b/retos_03/ejercicio_06.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_03/ejercicio_07.py b/retos_03/ejercicio_07.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_04/ejercicio_08.py b/retos_04/ejercicio_08.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_04/ejercicio_09.py b/retos_04/ejercicio_09.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_04/ejercicio_10.py b/retos_04/ejercicio_10.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_05/ejercicio_11.py b/retos_05/ejercicio_11.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_05/ejercicio_12.py b/retos_05/ejercicio_12.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_05/ejercicio_13.py b/retos_05/ejercicio_13.py new file mode 100644 index 0000000..e69de29 diff --git a/retos_06/ejercicio_14.py b/retos_06/ejercicio_14.py new file mode 100644 index 0000000..e69de29 From f938c2eaba012be53c32a2ddf590c2652416dbc4 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Thu, 4 Sep 2025 18:54:05 -0400 Subject: [PATCH 06/21] =?UTF-8?q?reto=206=20completado=20con=20una=20peque?= =?UTF-8?q?=C3=B1a=20autobiografia=20ahora=20agregado=20al=20git?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- retos_01/ejercicio_01.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/retos_01/ejercicio_01.md b/retos_01/ejercicio_01.md index e69de29..c4d9ca8 100644 --- a/retos_01/ejercicio_01.md +++ b/retos_01/ejercicio_01.md @@ -0,0 +1,31 @@ +## Biografía de Oscar Alvarado +### Información Personal + +**Nombre completo:** Oscar Ignacio Alvarado Silva +**Fecha de nacimiento:** *25 de diciembre de 2000* +**Edad:** **24 años** +**Ciudad:** *La paz, Bolivia* + +### Formación Académica: + +1. **Carrera actual:** *Informática en la universidad mayor de san andres* +2. **Estudios previos:** + - Medicina (3 años) detenida por razones personales + - Colegio Sagrados Corazones *(humanidades)* + +### Intereses y Pasiones + +- Tecnología en general +- **Celulares** +- **Computadoras** +- Programación +- Ciberseguridad *(meta de aprendizaje a futuro)* +- Hardware y su manejo como en reparacion de pc's + +### Habilidades Técnicas *(en desarrollo)* + +- Conocimientos muy básicos de: + - Git y GitHub + - HTML, Markdown + - Python (principiante) +- Manejo de herramientas ofimáticas como: excel, word y power point From e9f2045d33d2f9af247f510a61e7ec4644a6316b Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Thu, 4 Sep 2025 19:12:01 -0400 Subject: [PATCH 07/21] =?UTF-8?q?reto=207=20completado=20con=20un=20peque?= =?UTF-8?q?=C3=B1o=20resumen=20de=20harry=20potter=20y=20la=20piedra=20fil?= =?UTF-8?q?osofal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- retos_01/ejercicio_02.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/retos_01/ejercicio_02.md b/retos_01/ejercicio_02.md index e69de29..76eb39d 100644 --- a/retos_01/ejercicio_02.md +++ b/retos_01/ejercicio_02.md @@ -0,0 +1,32 @@ +# Resumen de *Harry Potter y la Piedra Filosofal* + +## Introducción + +*Harry Potter y la Piedra Filosofal* es el primero de una saga de libros enfocada principalmente en la magia, escrita por J. K. Rowling introduce a harry potter al mundo de la magia con muchas aventuras de por medio. + + +## Personajes principales + +- **Harry Potter**: el prota. es un niño huerfano que descubre la verdad tras la muerte de sus padres y su ascendencia magica +- **Ron Weasley**: el mejor amigo del prota, de escasos recursos, pero muy divertido. +- **Hermione Granger**: la alumna mas inteligente del salon y proxima amiga de ambos protas. +- **Albus Dumbledore**: director de Hogwarts. +- **Lord Voldemort**: el enemigo de harry desde antes que naciera. + + +## Resumen rapido + +Harry es un niño huerfano que vive cno sus tios y su primo, estos son malos con desde el inicio aun que no se explica el porque. Un dia harry recibe una carta y tras varios intentos por partede sus tios de que no reciba la carta, este al final la lee y descubre que es un mago y tiene la opcion de irse a una escuela de magia y hechiceria muy lejos de su cruel familia y va sin dudar. + +Gracias a Hagrid (guardabosques del colegio), harry descubre la existencia de la piedra filosofal la cual sera crucial en el evento que esta por venir + +## Enlace al libro + +se puede leer el libro online a traves del sigueinte enlace: + +[Harry Potter y la piedra filosofal en pdf](https://biblioteca-digital.universidadcolumbia.edu.mx/acervo/LITERATURA/Harry_Potter_y_la_Piedra_Filosofal-J_K_Rowling.pdf) + + +## Imagen representativa + +![Portada del libro](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTlUQZeqenuFXPl_RqNCLVr2xwCXUkyCuLSow&s) From c2435ee7904d68532bd44a4044096b18f1029c83 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Thu, 4 Sep 2025 19:26:51 -0400 Subject: [PATCH 08/21] reto 8 completado con un truco de orden de prioridad saltando una division imposible mediante datos booleanos --- retos_02/ejercicio_01.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/retos_02/ejercicio_01.py b/retos_02/ejercicio_01.py index e69de29..82e6259 100644 --- a/retos_02/ejercicio_01.py +++ b/retos_02/ejercicio_01.py @@ -0,0 +1,10 @@ +a = int(input()) +b = int(input()) +suma = a + b +resta = a - b +multi = a * b +div = (b and (a/b)) or "division indefinida" +print("Suma: ", suma) +print("Resta: ", resta) +print("Multiplicacion: ", multi) +print("Division: ", div) \ No newline at end of file From ce8e9f9cf1dc90ae0a64c03b8bc5970d6b53c8f8 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Fri, 5 Sep 2025 09:31:21 -0400 Subject: [PATCH 09/21] reto 9 completado mediante el uso de operadores logicos simples y comparadores como '==' o '<' --- retos_02/ejercicio_02.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/retos_02/ejercicio_02.py b/retos_02/ejercicio_02.py index e69de29..f95fb52 100644 --- a/retos_02/ejercicio_02.py +++ b/retos_02/ejercicio_02.py @@ -0,0 +1,4 @@ +sol = input().lower() == "true" +hum = int(input()) +sw = (sol and (hum<30)) +print(((sw) and "El sistema de riego no se activa.") or ((not sw) and "El sistema de riego se activa.")) \ No newline at end of file From fc93ae6bee9146e7afe315f406012cb744132a9c Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Fri, 5 Sep 2025 10:08:46 -0400 Subject: [PATCH 10/21] reto 10 completado mediante el uso de un artificio que reemplaza los espacios en blanco con vacios que no se toman en cuenta despues --- retos_02/ejercicio_03.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/retos_02/ejercicio_03.py b/retos_02/ejercicio_03.py index e69de29..d0cc9f9 100644 --- a/retos_02/ejercicio_03.py +++ b/retos_02/ejercicio_03.py @@ -0,0 +1,12 @@ +frase = input().lower() +palabras = frase.split() +frase = frase.replace(" ", "").lower() +rev = frase[::-1] + +vocales=( + frase.count("a") + frase.count("e") + frase.count("i") + + frase.count("o") + frase.count("u") + ) +print("Cantidad de palabras:", len(palabras)) +print("Cantidad de vocales:", vocales) +print("Es palíndromo:", (frase == rev)) \ No newline at end of file From 210ba909d702717d64449c13efcab0afb9902fb1 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Fri, 5 Sep 2025 10:40:12 -0400 Subject: [PATCH 11/21] reto 11 completado utilizando tuplas de datos --- retos_03/ejercicio_04.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/retos_03/ejercicio_04.py b/retos_03/ejercicio_04.py index e69de29..497bb43 100644 --- a/retos_03/ejercicio_04.py +++ b/retos_03/ejercicio_04.py @@ -0,0 +1,21 @@ +libros = ( + ("978-3-16-148410-0", "EL QUIJOTE", "Miguel de Cervantes", 1605), + ("978-0-14-044913-6", "LA ODISEA", "Homero", -800), + ("978-0-452-28423-4", "1984", "George Orwell", 1949), + ("978-0-7432-7356-5", "EL GRAN GATSBY", "F. Scott Fitzgerald", 1925) +) + +catalogo = { + "978-3-16-148410-0": ("EL QUIJOTE", "Miguel de Cervantes", 1605), + "978-0-14-044913-6": ("LA ODISEA", "Homero", -800), + "978-0-452-28423-4": ("1984", "George Orwell", 1949), + "978-0-7432-7356-5": ("EL GRAN GATSBY", "F. Scott Fitzgerald", 1925) +} + +isbn = input() + +datos = catalogo.get(isbn) +print( + (datos and "Título: " + datos[0].title() + ", Autor: " + datos[1] + ", Año: " + str(datos[2])) + or "Libro no encontrado." +) From 814b4131506b61e6645e3547ae50ae46900022aa Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Fri, 5 Sep 2025 23:47:58 -0400 Subject: [PATCH 12/21] reto 12 completado mediante el uso de un truco con zip volviendolos tuplas, luego de ordenarlas volver a hacerlas una lista de productos --- retos_03/ejercicio_05.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/retos_03/ejercicio_05.py b/retos_03/ejercicio_05.py index e69de29..e4dd71f 100644 --- a/retos_03/ejercicio_05.py +++ b/retos_03/ejercicio_05.py @@ -0,0 +1,13 @@ +productos = input().split(", ") +precios = list(eval("[" + input() + "]")) + +total = sum(precios) + +caro = productos[precios.index(max(precios))] +barato = productos[precios.index(min(precios))] +ordenados = list(dict(sorted(zip(precios, productos))).values()) + +print("Total de la compra: " + str(round(total, 2))) +print("Producto más caro: " + caro) +print("Producto más barato: " + barato) +print("Productos ordenados por precio: " + ", ".join(ordenados)) \ No newline at end of file From f8a3e6dc4a16a58808311bd8b29b985ac435622b Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Sat, 6 Sep 2025 00:12:39 -0400 Subject: [PATCH 13/21] reto 12 completado en el cual se trato a los datos ingresados como conjuntos y con sus respetivas operaciones se consiguio las respuestas --- retos_03/ejercicio_06.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/retos_03/ejercicio_06.py b/retos_03/ejercicio_06.py index e69de29..c586be0 100644 --- a/retos_03/ejercicio_06.py +++ b/retos_03/ejercicio_06.py @@ -0,0 +1,14 @@ +a1 = set(input().split(", ")) +a2 = set(input().split(", ")) + +comunes = a1 & a2 +exclusivas_jose = a1 - a2 +exclusivas_carlos = a2 - a1 +totCanciones = a1 | a2 + +compatibilidad = (len(comunes) / len(totCanciones) * 100) > 50 + +print("Canciones en común: " + ", ".join(comunes)) +print("Canciones exclusivas de Jose: " + ", ".join(exclusivas_jose)) +print("Canciones exclusivas de Carlos: " + ", ".join(exclusivas_carlos)) +print((compatibilidad and "Son Almas Gemelas Musicales.") or (not compatibilidad and "Son Amigos con Buen Gusto.")) \ No newline at end of file From f7956bb138bae41fbbd1f1b97e04d7b115b9e418 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Sat, 6 Sep 2025 00:34:14 -0400 Subject: [PATCH 14/21] reto 14 completado mediante la ventaja de que los datos se encuentran en un formato de diccionario y la obviedad de salto de condicion del and --- retos_03/ejercicio_07.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/retos_03/ejercicio_07.py b/retos_03/ejercicio_07.py index e69de29..3b3abe7 100644 --- a/retos_03/ejercicio_07.py +++ b/retos_03/ejercicio_07.py @@ -0,0 +1,19 @@ +stock = { + "Aspirina": {"cantidad": 50, "precio": 10.99}, + "Ibuprofeno": {"cantidad": 30, "precio": 15.49}, + "Paracetamol": {"cantidad": 20, "precio": 8.99}, + "Amoxicilina": {"cantidad": 10, "precio": 25.00} +} + +med, cant = input().split(", ") +cant = int(cant) + +item = stock.get(med) + +print( + (not item and "Medicamento no encontrado.") or + (item and (item["cantidad"] < cant) and "No hay suficiente stock.") or + (item and (item["cantidad"] >= cant) and ( + "Total de la compra: " + str(round(cant * item["precio"], 2)) + )) +) From 7bb5cf355bc730b85d083abb3f32b5c658d9e9e5 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Sat, 6 Sep 2025 08:46:02 -0400 Subject: [PATCH 15/21] reto 15 completado, se utilizo el orden de la operacion or paara decidir --- retos_04/ejercicio_08.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/retos_04/ejercicio_08.py b/retos_04/ejercicio_08.py index e69de29..e7c4b4b 100644 --- a/retos_04/ejercicio_08.py +++ b/retos_04/ejercicio_08.py @@ -0,0 +1,12 @@ +v, p, e = input().split(",") +vehiculos = int(v) +peatones = len(p) +emergencia = e.lower().strip() == "true" +print(emergencia, e) + +print("Semáforo:", + (emergencia and "Verde") or + ((vehiculos > 70) and "Verde") or + ((peatones > 5) and "Rojo") or + "Amarillo" +) From 087cf1d7870ebe57f118814a85e19b9e8aba79ee Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Sat, 6 Sep 2025 09:00:32 -0400 Subject: [PATCH 16/21] reto 16 completado, para el conteo de las palabras repetidas se utilizo un diccionario de pares clave valor para almacenar las palabras y su incidencia correspondiente --- retos_04/ejercicio_09.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/retos_04/ejercicio_09.py b/retos_04/ejercicio_09.py index e69de29..2c7da6e 100644 --- a/retos_04/ejercicio_09.py +++ b/retos_04/ejercicio_09.py @@ -0,0 +1,23 @@ +texto = input() + +palabras_sin_contenido = [ + "el", "la", "los", "las", "de", "y", "a", "en", "o", "que", + "pero", "con", "por", "para", "un", "una", "es", "son", + "se", "del", "al", "lo" +] + +for simbolo in ".,;:!¿?¡": + texto = texto.replace(simbolo, "") + +palabras = (texto.lower()).split() + +frecuencias = {} +for palabra in palabras: + if palabra not in palabras_sin_contenido: + if palabra not in frecuencias: + frecuencias[palabra] = 0 + frecuencias[palabra] += 1 + +top3 = list(sorted(frecuencias, key=frecuencias.get))[-3:][::-1] + +print(top3) From 9cf0e24c3af984419236da478a72aa4be6155699 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Sat, 6 Sep 2025 09:13:27 -0400 Subject: [PATCH 17/21] reto 17 completado --- retos_04/ejercicio_10.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/retos_04/ejercicio_10.py b/retos_04/ejercicio_10.py index e69de29..8edecde 100644 --- a/retos_04/ejercicio_10.py +++ b/retos_04/ejercicio_10.py @@ -0,0 +1,21 @@ +rojas = 0 +verdes = 0 +plagas = 0 + +while True: + entrada = input().lower().strip() + if entrada == "empacar": + break + for color in entrada: + if color == "r": + rojas += 1 + elif color == "v": + verdes += 1 + elif color == "p": + plagas += 1 + +print("Cajas empacadas para Rojas:", rojas // 12) +print("Cajas empacadas para Verdes:", verdes // 12) +print("Cajas empacadas para Plagas:", plagas) # no se divide por el ejemplo de salida +#print("manzanas detectadas con plagas", plagas) deberia ser la salida + From c3acd4bddf7a45b9a029c505a979b4375a1e8cf2 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Sat, 6 Sep 2025 09:23:43 -0400 Subject: [PATCH 18/21] reto 18 completado, la funcion devolvera 2 valores en 2 variables simultaneamente --- retos_05/ejercicio_11.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/retos_05/ejercicio_11.py b/retos_05/ejercicio_11.py index e69de29..bb74bdb 100644 --- a/retos_05/ejercicio_11.py +++ b/retos_05/ejercicio_11.py @@ -0,0 +1,15 @@ +def factorial_y_doble(n): + factorial = 1 + if(n>0): + for i in range(1, n + 1): + factorial *= i + elif (n<0): + print("no hay factorial de un numero negativo") + factorial=0 + doble=0 + return factorial, doble + doble = factorial * 2 + return factorial, doble +n = int(input()) +fact, dob = factorial_y_doble(n) +print(f"Factorial: {fact}, Doble: {dob}") From 2c56641cfbc21084666e791401e0a5d78a0f7ae3 Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Sat, 6 Sep 2025 09:41:40 -0400 Subject: [PATCH 19/21] reto 19 completado, para la cantidad y unidad se los tomo como cadenas por separado, para que de esa manera no se altere la cantidad --- retos_05/ejercicio_12.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/retos_05/ejercicio_12.py b/retos_05/ejercicio_12.py index e69de29..9cf0a42 100644 --- a/retos_05/ejercicio_12.py +++ b/retos_05/ejercicio_12.py @@ -0,0 +1,24 @@ +equivalencias = { + "tz": "tazas", + "cda": "cucharadas", + "l": "litros", + "gr": "gramos", + "kg": "kilogramos", + "u": "unidades" +} + +linea = input() +print("Ingredientes") +print("------------") +ingredientes = linea.split(", ") +for ing in ingredientes: + nombre, cantidad = ing.split("=") + numero = "" + unidad = "" + for c in cantidad: + if c in "1234567890": + numero += c + else: + unidad += c + unidad_estandar = equivalencias.get(unidad, unidad) + print("*", nombre.capitalize(), numero, unidad_estandar) From 70ab98a2445bf60e6247170bc26f41022a8e512c Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Sat, 6 Sep 2025 09:48:41 -0400 Subject: [PATCH 20/21] reto 20 completado, se agrego las palabras en un vector con el fin de no tener palabras repetidas y luego se ordena el vector --- retos_05/ejercicio_13.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/retos_05/ejercicio_13.py b/retos_05/ejercicio_13.py index e69de29..52422cd 100644 --- a/retos_05/ejercicio_13.py +++ b/retos_05/ejercicio_13.py @@ -0,0 +1,11 @@ +frase = input().lower() +for simbolo in ".,;:!?": + frase = frase.replace(simbolo, "") +palabras = frase.split() +palabras_unicas = [] +for palabra in palabras: + if palabra not in palabras_unicas: + palabras_unicas.append(palabra) +palabras_unicas.sort() +print(palabras_unicas) + From eaf4954f010a26e6e1b5a517b8de90ab3bf1b58c Mon Sep 17 00:00:00 2001 From: Oscar_Alvarado Date: Sat, 6 Sep 2025 09:55:48 -0400 Subject: [PATCH 21/21] reto 20 completado y se agrego el manejor de excepciones correspondiente --- retos_06/ejercicio_14.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/retos_06/ejercicio_14.py b/retos_06/ejercicio_14.py index e69de29..1f24965 100644 --- a/retos_06/ejercicio_14.py +++ b/retos_06/ejercicio_14.py @@ -0,0 +1,33 @@ +while True: + entrada = input() + if entrada.lower() == "salir": + break + + try: + partes = entrada.split(",") + if len(partes) != 3: + raise IndexError + + num1 = float(partes[0].strip()) + num2 = float(partes[1].strip()) + operador = partes[2].strip() + + if operador == "+": + print(num1 + num2) + elif operador == "-": + print(num1 - num2) + elif operador == "*": + print(num1 * num2) + elif operador == "/": + if num2 == 0: + raise ZeroDivisionError + print(num1 / num2) + else: + print("Operación no valida.") + + except ValueError: + print("Operación no valida.") + except ZeroDivisionError: + print("No se puede dividir por cero.") + except IndexError: + print("No hay suficientes elementos para realizar la operación.")