Skip to content

Commit 929ba38

Browse files
authored
Merge pull request mouredev#4931 from EmmanuelMMontesinos/main
18 - Python
2 parents a667af0 + 5180372 commit 929ba38

File tree

4 files changed

+392
-0
lines changed

4 files changed

+392
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
"""
2+
/*
3+
* EJERCICIO:
4+
* Utilizando tu lenguaje crea un conjunto de datos y realiza las siguientes
5+
* operaciones (debes utilizar una estructura que las soporte):
6+
* x Añade un elemento al final.
7+
* x Añade un elemento al principio.
8+
* x Añade varios elementos en bloque al final.
9+
* x Añade varios elementos en bloque en una posición concreta.
10+
* x Elimina un elemento en una posición concreta.
11+
* x Actualiza el valor de un elemento en una posición concreta.
12+
* x Comprueba si un elemento está en un conjunto.
13+
* x Elimina todo el contenido del conjunto.
14+
*/
15+
"""
16+
17+
'''Base'''
18+
# Conjuntos
19+
# Pensaba que se referia a sets {}, pero al ver los requerimientos he visto que se refiere a conjunto de datos simplemente
20+
21+
mi_conjunto = ["Hola",1,False]
22+
print(mi_conjunto)
23+
24+
# Añadir Elementos
25+
'''Inicio'''
26+
mi_conjunto.insert(0, "Nuevo Elemento Principio")
27+
print(mi_conjunto)
28+
'''Final'''
29+
mi_conjunto.append("Nuevo Elemento Final")
30+
print(mi_conjunto)
31+
'''Varios al Final'''
32+
mi_conjunto.extend(["Varios1","Varios2"])
33+
print(mi_conjunto)
34+
35+
'''Varios en Posición Concreta'''
36+
mi_conjunto[1:1] = ["Varios3","Varios4"]
37+
print(mi_conjunto)
38+
39+
# Eliminar Elementos
40+
mi_conjunto.remove(mi_conjunto[4])
41+
print(mi_conjunto)
42+
43+
# Actualizar Elemento
44+
mi_conjunto[4] = True
45+
print(mi_conjunto)
46+
47+
# Comprobación de Elemento
48+
elemento_comprobar = "Varios3"
49+
print(f"¿{elemento_comprobar} esta en el conjunto?: {elemento_comprobar in mi_conjunto}")
50+
51+
# Borrar todo el conjunto
52+
mi_conjunto.clear()
53+
print(mi_conjunto)
54+
55+
'''
56+
* DIFICULTAD EXTRA (opcional):
57+
* Muestra ejemplos de las siguientes operaciones con conjuntos:
58+
* x Unión.
59+
* x Intersección.
60+
* x Diferencia.
61+
* x Diferencia simétrica.
62+
'''
63+
64+
conjunto_1 = [1,"2",False,"3",4]
65+
conjunto_2 = [1,"2",False,3,"4"]
66+
67+
# Union
68+
union = list(set(conjunto_1).union(conjunto_2))
69+
print(union)
70+
71+
# Intersección
72+
interset = list(set(conjunto_1).intersection(conjunto_2))
73+
print(interset)
74+
75+
# Diferencia
76+
deffe_1 = list(set(conjunto_1).difference(conjunto_2))
77+
deffe_2 = list(set(conjunto_2).difference(conjunto_1))
78+
print(deffe_1)
79+
print(deffe_2)
80+
81+
# Diferencia simetrica
82+
simetrica = list(set(conjunto_1).symmetric_difference(conjunto_2))
83+
print(simetrica)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
"""/*
2+
* EJERCICIO:
3+
* Empleando tu lenguaje, explora la definición del tipo de dato
4+
* que sirva para definir enumeraciones (Enum).
5+
* Crea un Enum que represente los días de la semana del lunes
6+
* al domingo, en ese orden. Con ese enumerado, crea una operación
7+
* que muestre el nombre del día de la semana dependiendo del número entero
8+
* utilizado (del 1 al 7).
9+
*/"""
10+
11+
# Enumeracion
12+
from enum import Enum
13+
14+
class Dias(Enum):
15+
lunes = 1
16+
martes = 2
17+
miercoles = 3
18+
jueves = 4
19+
viernes = 5
20+
sabado = 6
21+
domingo = 7
22+
23+
def numero_a_dia(self,num:int):
24+
try:
25+
print(f"El {num} es {self(num).name.title()}\n")
26+
except ValueError as e:
27+
print(f"{num} no esta dentro del rango (1/7)\n")
28+
29+
# Pruebas
30+
31+
Dias.numero_a_dia(Dias,1)
32+
33+
'''
34+
* DIFICULTAD EXTRA (opcional):
35+
* Crea un pequeño sistema de gestión del estado de pedidos.
36+
* Implementa una clase que defina un pedido con las siguientes características:
37+
* - El pedido tiene un identificador y un estado.
38+
* - El estado es un Enum con estos valores: PENDIENTE, ENVIADO, ENTREGADO y CANCELADO.
39+
* - Implementa las funciones que sirvan para modificar el estado:
40+
* - Pedido enviado
41+
* - Pedido cancelado
42+
* - Pedido entregado
43+
* (Establece una lógica, por ejemplo, no se puede entregar si no se ha enviado, etc...)
44+
* - Implementa una función para mostrar un texto descriptivo según el estado actual.
45+
* - Crea diferentes pedidos y muestra cómo se interactúa con ellos.
46+
'''
47+
48+
# Pedidos
49+
class Pedidos:
50+
51+
# Estados de los pedidos
52+
class Estados_Pedidos(Enum):
53+
PENDIENTE = "Pendiente"
54+
ENVIADO = "Enviado"
55+
ENTREGADO = "Entregado"
56+
CANCELADO = "Cancelado"
57+
58+
total_pedidos = 0
59+
60+
def __init__(self) -> None:
61+
62+
Pedidos.total_pedidos += 1
63+
self.identificador = Pedidos.total_pedidos
64+
self.estado = Pedidos.Estados_Pedidos.PENDIENTE
65+
66+
def info(self):
67+
print(f"Identificador: {self.identificador}\nEstado: {self.estado.value}\nPedidos Totales: {Pedidos.total_pedidos}\n")
68+
69+
# Metodo para cambiar de estado dependiendo de su estado actual
70+
def cambiar_estado(self,cambio):
71+
72+
if cambio.lower() == "enviado":
73+
74+
if self.estado == Pedidos.Estados_Pedidos.PENDIENTE:
75+
76+
print(f"Cambiando estado de {self.estado.value} a {cambio.title()}")
77+
self.estado = Pedidos.Estados_Pedidos.ENVIADO
78+
print("Cambio realizado con exito\n")
79+
80+
else:
81+
82+
print(f"No se puede cambiar de estado de {self.estado.value} a {cambio}\n")
83+
84+
elif cambio.lower() == "entregado":
85+
86+
if self.estado == Pedidos.Estados_Pedidos.ENVIADO:
87+
88+
print(f"Cambiando estado de {self.estado.value} a {cambio.title()}")
89+
self.estado = Pedidos.Estados_Pedidos.ENTREGADO
90+
print("Cambio realizado con exito\n")
91+
92+
else:
93+
94+
print(f"No se puede cambiar de estado de {self.estado.value} a {cambio}\n")
95+
96+
97+
elif cambio.lower() == "cancelado":
98+
99+
if self.estado != Pedidos.Estados_Pedidos.CANCELADO:
100+
101+
print(f"Cambiando estado de {self.estado.value} a {cambio.title()}")
102+
self.estado = Pedidos.Estados_Pedidos.CANCELADO
103+
print("Cambio realizado con exito\n")
104+
105+
else:
106+
107+
print(f"No se puede cambiar de estado de {self.estado.value} a {cambio}\n")
108+
self.info()
109+
110+
# Pruebas
111+
pedido_1 = Pedidos()
112+
pedido_2 = Pedidos()
113+
pedido_3 = Pedidos()
114+
115+
pedido_1.cambiar_estado("enviado")
116+
pedido_2.cambiar_estado("entregado")
117+
pedido_3.cambiar_estado("cancelado")
118+
119+
pedido_1.info()
120+
pedido_2.info()
121+
pedido_3.info()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
"""
2+
/*
3+
* EJERCICIO:
4+
* Utilizando un mecanismo de peticiones HTTP de tu lenguaje, realiza
5+
* una petición a la web que tú quieras, verifica que dicha petición
6+
* fue exitosa y muestra por consola el contenido de la web.
7+
*/
8+
"""
9+
10+
# Peticiones HTTP
11+
import requests
12+
13+
respuesta = requests.get("https://retosdeprogramacion.com/")
14+
15+
if respuesta.status_code == 200:
16+
print(respuesta.text)
17+
18+
else:
19+
print(f"Hay un error: {respuesta.status_code}")
20+
21+
"""
22+
* DIFICULTAD EXTRA (opcional):
23+
* Utilizando la PokéAPI (https://pokeapi.co), crea un programa por
24+
* terminal al que le puedas solicitar información de un Pokémon concreto
25+
* utilizando su nombre o número.
26+
* - Muestra el nombre, id, peso, altura y tipo(s) del Pokémon
27+
* - Muestra el nombre de su cadena de evoluciones
28+
* - Muestra los juegos en los que aparece
29+
* - Controla posibles errores
30+
"""
31+
32+
# Clase para la consulta
33+
class PokeConsulta:
34+
35+
URL = "https://pokeapi.co/api/v2/pokemon/"
36+
37+
# Función para imprimir listas
38+
def anidado(self,campo,nombre=None,evoluciones=False):
39+
ciclo = 0
40+
# Si NO son evoluciones
41+
if not evoluciones:
42+
for n in campo:
43+
ciclo += 1
44+
print(f"{ciclo} - {n}")
45+
# Si son evoluciones
46+
else:
47+
marcador = "Pre-Evolución"
48+
for n in campo:
49+
ciclo += 1
50+
if nombre == n:
51+
marcador = "Pokemon Actual"
52+
elif nombre != n and marcador == "Pokemon Actual":
53+
marcador = "Evolución"
54+
print(f"{ciclo} - {n} ({marcador})")
55+
56+
print()
57+
58+
# Función para consultar a la Api
59+
def consultar(self,consulta):
60+
61+
respuesta = requests.get(f"{PokeConsulta.URL+str(consulta)}")
62+
63+
if respuesta.status_code == 200:
64+
# Asigna valores para despues imprimirlos
65+
pokemon = respuesta.json()
66+
nombre = pokemon["name"].title()
67+
id = pokemon["id"]
68+
peso = pokemon["weight"]
69+
altura = pokemon["height"]
70+
tipos = [t["type"]["name"].title() for t in pokemon["types"]]
71+
72+
# Nueva request para obtener todas las evoluciones
73+
evoluciones = []
74+
respuesta_evo = requests.get(f"https://pokeapi.co/api/v2/pokemon-species/{id}")
75+
respuesta_evo = respuesta_evo.json()
76+
url_evo = respuesta_evo["evolution_chain"]["url"]
77+
respuesta_evo = requests.get(url_evo)
78+
respuesta_evo = respuesta_evo.json()
79+
80+
check = False
81+
nido = respuesta_evo["chain"]
82+
baby = None
83+
if nido["is_baby"] == True:
84+
baby = nido["species"]["name"].title()
85+
while not check:
86+
evoluciones.append(nido["species"]["name"].title())
87+
if len(nido["evolves_to"]) == 0:
88+
check = True
89+
else:
90+
nido = nido["evolves_to"][0]
91+
# Obtener todos los juegos donde aparece
92+
juegos = [game["version"]["name"].title() for game in pokemon["game_indices"]]
93+
94+
# Imprimir Info
95+
print(f"Nombre: {nombre}")
96+
print(f"ID: {id}")
97+
print(f"Peso: {peso}")
98+
print(f"Altura: {altura}")
99+
print()
100+
print("Evoluciones:")
101+
print(f"Bebe: {baby}")
102+
self.anidado(evoluciones,nombre=nombre,evoluciones=True)
103+
print("Tipos:")
104+
self.anidado(tipos)
105+
print("Ha salido en los siguientes Juegos:")
106+
self.anidado(juegos)
107+
else:
108+
print(f"{consulta} no aparece en la api, comprueba que sea un nombre/numero válido")
109+
110+
# Programa en terminal
111+
def program_terminal():
112+
113+
check = False
114+
consulta = PokeConsulta()
115+
while not check:
116+
117+
solicitud = input("Ponga el numero o el nombre de un pokemon (escribir 'salir' para cerrar): ")
118+
119+
if solicitud.lower() == "salir":
120+
check = True
121+
else:
122+
consulta.consultar(solicitud)
123+
124+
# Pruebas
125+
if __name__ == "__main__":
126+
program_terminal()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
"""
2+
/*
3+
* EJERCICIO:
4+
* Explora el concepto de callback en tu lenguaje creando un ejemplo
5+
* simple (a tu elección) que muestre su funcionamiento.
6+
*/
7+
"""
8+
9+
# Callback
10+
11+
def mi_callback(numero):
12+
for n in range(numero):
13+
print(f"Llamada a Callback nº {n+1} de {numero}")
14+
15+
def ping(numero,callback):
16+
if numero > 0:
17+
callback(numero)
18+
else:
19+
print(f"{numero} no es mayor a 0")
20+
21+
ping(20,mi_callback)
22+
23+
"""
24+
* DIFICULTAD EXTRA (opcional):
25+
* Crea un simulador de pedidos de un restaurante utilizando callbacks.
26+
* Estará formado por una función que procesa pedidos.
27+
* Debe aceptar el nombre del plato, una callback de confirmación, una
28+
* de listo y otra de entrega.
29+
* - Debe imprimir un confirmación cuando empiece el procesamiento.
30+
* - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre
31+
* procesos.
32+
* - Debe invocar a cada callback siguiendo un orden de procesado.
33+
* - Debe notificar que el plato está listo o ha sido entregado.
34+
"""
35+
from time import sleep
36+
from random import randint
37+
import threading
38+
39+
def proceso_pedido(plato,confirmacion,listo,entregado):
40+
def proceso():
41+
confirmacion(plato)
42+
43+
tiempo_listo = randint(1,10)
44+
sleep(tiempo_listo)
45+
listo(plato,tiempo_listo)
46+
47+
tiempo_entregado = randint(1,10)
48+
sleep(tiempo_entregado)
49+
entregado(plato,tiempo_entregado)
50+
threading.Thread(target=proceso).start()
51+
def confirmacion(plato):
52+
print(f"{plato} ha sido confirmado, pronto estara listo.")
53+
54+
def listo(plato,tiempo):
55+
print(f"{plato} esta listo en {tiempo}s")
56+
57+
def entregado(plato,tiempo):
58+
print(f"{plato} ha sido entregado en {tiempo}s")
59+
60+
proceso_pedido("Tortilla de patatas",confirmacion,listo,entregado)
61+
proceso_pedido("Burger XXL",confirmacion,listo,entregado)
62+
proceso_pedido("Cordero Asado",confirmacion,listo,entregado)

0 commit comments

Comments
 (0)