Skip to content

Commit a11d202

Browse files
authored
Merge pull request mouredev#4797 from any7dev/main
#20 - Python
2 parents c7eacb2 + 2ebe445 commit a11d202

File tree

3 files changed

+253
-0
lines changed

3 files changed

+253
-0
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
""" /*
2+
* EJERCICIO:
3+
* Utilizando un mecanismo de peticiones HTTP de tu lenguaje, realiza
4+
* una petición a la web que tú quieras, verifica que dicha petición
5+
* fue exitosa y muestra por consola el contenido de la web.
6+
*
7+
* DIFICULTAD EXTRA (opcional):
8+
* Utilizando la PokéAPI (https://pokeapi.co), crea un programa por
9+
* terminal al que le puedas solicitar información de un Pokémon concreto
10+
* utilizando su nombre o número.
11+
* - Muestra el nombre, id, peso, altura y tipo(s) del Pokémon
12+
* - Muestra el nombre de su cadena de evoluciones
13+
* - Muestra los juegos en los que aparece
14+
* - Controla posibles errores
15+
*/ """
16+
17+
#EJERCICIO
18+
import requests
19+
20+
def peticion(web):
21+
respuesta = requests.get(web)
22+
23+
if respuesta.status_code == 200:
24+
print("Petición Exitosa")
25+
print(f"Contenido de la web:\n{respuesta.text}\n")
26+
else:
27+
print(f"Fallo al hacer la petición, código {respuesta.status_code}\n")
28+
29+
peticion("https://www.google.es")
30+
peticion("https://retosdeprogramacion.com/roadmap/")
31+
peticion("https://thepiratebay3.com/")
32+
33+
#DIFICULTAD EXTRA
34+
INFO_POKEMON = "https://pokeapi.co/api/v2/pokemon/"
35+
INFO_SPECIES = "https://pokeapi.co/api/v2/pokemon-species/"
36+
37+
def inicio(pokemon):
38+
url = INFO_POKEMON + pokemon
39+
respuesta = requests.get(url)
40+
datos = respuesta.json()
41+
return datos
42+
43+
def datos_simples(datos):
44+
id = datos['id']
45+
peso = datos['weight']
46+
altura = datos['height']
47+
return id, peso, altura
48+
49+
def tipos(datos):
50+
tipos = datos['types']
51+
lista_tipos = []
52+
for tipo in tipos:
53+
lista_tipos.append(tipo['type']['name'])
54+
return lista_tipos
55+
56+
def games(datos):
57+
juegos = datos['game_indices']
58+
lista_juegos = []
59+
for juego in juegos:
60+
lista_juegos.append(juego['version']['name'])
61+
return lista_juegos
62+
63+
def datos_evo(id):
64+
species = INFO_SPECIES + str(id)
65+
respuesta = requests.get(species)
66+
datos = respuesta.json()
67+
evo_url = datos['evolution_chain']['url']
68+
respuesta = requests.get(evo_url)
69+
evo_json = respuesta.json()
70+
return evo_json
71+
72+
def evoluciones(evo_json, lista = []):
73+
lista.append(evo_json['species']['name'])
74+
if "evolves_to" in evo_json:
75+
for evo in evo_json['evolves_to']:
76+
evoluciones(evo)
77+
return lista
78+
79+
def extra():
80+
pokemon = input("Dime el pokemon: ")
81+
pokemon = pokemon.lower()
82+
try:
83+
data = inicio(pokemon)
84+
id, peso, altura = datos_simples(data)
85+
juegos = games(data)
86+
json = datos_evo(id)
87+
evo = evoluciones(json['chain'])
88+
print(f"Pokemon: {pokemon}, id: {id}, peso: {peso}, altura: {altura}")
89+
print(f"Evoluciones: {evo}")
90+
print(f"Juegos: {juegos}")
91+
except requests.exceptions.JSONDecodeError:
92+
print("Pokemon no encontrado")
93+
94+
extra()
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
""" /*
2+
* EJERCICIO:
3+
* Explora el concepto de callback en tu lenguaje creando un ejemplo
4+
* simple (a tu elección) que muestre su funcionamiento.
5+
*
6+
* DIFICULTAD EXTRA (opcional):
7+
* Crea un simulador de pedidos de un restaurante utilizando callbacks.
8+
* Estará formado por una función que procesa pedidos.
9+
* Debe aceptar el nombre del plato, una callback de confirmación, una
10+
* de listo y otra de entrega.
11+
* - Debe imprimir un confirmación cuando empiece el procesamiento.
12+
* - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre
13+
* procesos.
14+
* - Debe invocar a cada callback siguiendo un orden de procesado.
15+
* - Debe notificar que el plato está listo o ha sido entregado.
16+
*/ """
17+
18+
#EJERCICIO
19+
def multiplicar(numeros):
20+
return numeros[0]*numeros[1]
21+
22+
def llamar(funcion, numeros):
23+
return funcion(numeros)
24+
25+
tupla = (3, 9)
26+
resultado = llamar(multiplicar, tupla)
27+
print(resultado)
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
""" /*
2+
* EJERCICIO:
3+
* Explora el concepto de funciones de orden superior en tu lenguaje
4+
* creando ejemplos simples (a tu elección) que muestren su funcionamiento.
5+
*
6+
* DIFICULTAD EXTRA (opcional):
7+
* Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y
8+
* lista de calificaciones), utiliza funciones de orden superior para
9+
* realizar las siguientes operaciones de procesamiento y análisis:
10+
* - Promedio calificaciones: Obtiene una lista de estudiantes por nombre
11+
* y promedio de sus calificaciones.
12+
* - Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes
13+
* que tienen calificaciones con un 9 o más de promedio.
14+
* - Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven.
15+
* - Mayor calificación: Obtiene la calificación más alta de entre todas las
16+
* de los alumnos.
17+
* - Una calificación debe estar comprendida entre 0 y 10 (admite decimales).
18+
*/ """
19+
20+
from functools import reduce
21+
from datetime import datetime
22+
23+
#EJERCICIO
24+
25+
#Función como parámetro
26+
def funcion_orden_superior(num1, num2, funcion):
27+
return funcion(num1, num2)
28+
29+
def suma(num1, num2):
30+
return num1 + num2
31+
32+
def resta(num1, num2):
33+
return num1 - num2
34+
35+
def multiplica(num1, num2):
36+
return num1 * num2
37+
38+
def divide(num1, num2):
39+
return num1 / num2
40+
41+
print(funcion_orden_superior(16, 5, suma))
42+
print(funcion_orden_superior(16, 5, resta))
43+
print(funcion_orden_superior(16, 5, divide))
44+
print(funcion_orden_superior(16, 5, multiplica))
45+
46+
#Función como valor de retorno
47+
def cuadrado(num):
48+
return num ** 2
49+
50+
def cubo(num):
51+
return num ** 3
52+
53+
def funcion_orden_superior(operacion):
54+
if operacion == "doble":
55+
return cuadrado
56+
else:
57+
return cubo
58+
59+
resultado = (funcion_orden_superior("doble"))
60+
print(resultado(5))
61+
resultado = (funcion_orden_superior("triple"))
62+
print(resultado(5))
63+
64+
#Función dentro de otra función(cierre)
65+
def suma_dos():
66+
dos = 2
67+
def suma(num):
68+
return num + dos
69+
return suma
70+
71+
resultado = suma_dos()
72+
print(resultado(2))
73+
print(resultado(7))
74+
75+
#Map
76+
numeros = [1, 2, 3, 4, 5]
77+
cadena = map(str, numeros)
78+
print(list(cadena))
79+
80+
#Filter
81+
def par(numero):
82+
if numero % 2 == 0:
83+
return True
84+
else:
85+
return False
86+
87+
pares = filter(par, numeros)
88+
print(list(pares))
89+
#Usando lambda
90+
pares = filter((lambda x: x%2 == 0), numeros)
91+
print(list(pares))
92+
93+
#Reduce
94+
def suma(num1, num2):
95+
return num1 + num2
96+
97+
total = reduce(suma, numeros)
98+
print(total)
99+
#Usando lambda
100+
total = reduce((lambda x, y: x + y), numeros)
101+
print(total)
102+
103+
#Sort o sorted
104+
numeros = [2, 0.2, 52, 41, 20]
105+
print(sorted(numeros))
106+
print(sorted(numeros, reverse=True))
107+
108+
109+
#DIFICULTAD EXTRA
110+
111+
estudiantes = [["Estudiante1",[8, 9.8, 9, 9.5], "2/3/1995"],
112+
["Estudiante2",[5, 6.5, 7, 8], "9/6/2001"],
113+
["Estudiante3",[9, 3.2, 10, 5], "15/8/2020"],
114+
["Estudiante4",[9.2, 3.4, 7, 9.9], "23/8/1999"],
115+
["Estudiante5",[9.7, 9.5, 8.8, 9], "1/1/2003"],
116+
["Estudiante6",[1.2, 4.5, 7.6, 8.9], "31/12/1980"]]
117+
118+
print(f"\nLista Estudiantes: {estudiantes}\n")
119+
120+
lista_promedio = list(map(lambda estudiante: [estudiante[0], round((reduce(lambda x,y: x+y, estudiante[1]))/len(estudiante[1]),2)], estudiantes))
121+
print(f"Promedio calificaciones: {lista_promedio}\n")
122+
123+
mejores = list(map(lambda x: x[0], (filter(lambda estudiante: estudiante[1] >= 9, lista_promedio))))
124+
print(f"Mejores estudiantes: {mejores}\n")
125+
126+
def ordenar_fechas(lista):
127+
return datetime.strptime(lista[2], "%d/%m/%Y")
128+
estudiantes.sort(key=ordenar_fechas, reverse=True)
129+
print(f"Estudiantes ordenados por el más joven: {estudiantes}\n")
130+
131+
mayor_nota = list(map(lambda estudiante: max(estudiante[1]), estudiantes))[0]
132+
print(f"Mayor calificación: {mayor_nota}\n")

0 commit comments

Comments
 (0)