Add exercises 14
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
parent
b89cfe618a
commit
e1121c9826
105
30-days-of-python/14_Funciones_de_orden_superior/01_func_sup.py
Normal file
105
30-days-of-python/14_Funciones_de_orden_superior/01_func_sup.py
Normal file
@ -0,0 +1,105 @@
|
||||
"""
|
||||
01_func_sup.py
|
||||
"""
|
||||
|
||||
|
||||
# Ejercicios: Nivel 1
|
||||
|
||||
|
||||
# 1. Explica la diferencia entre map, filter y reduce.
|
||||
|
||||
# map, filter y reduce son funciones integradas en Python
|
||||
# que se utilizan para procesar y transformar datos.
|
||||
|
||||
# map toma una función y una secuencia
|
||||
# y aplica la función a cada elemento de la secuencia,
|
||||
# devolviendo una nueva secuencia con los resultados.
|
||||
|
||||
# filter toma una función y una secuencia
|
||||
# y devuelve una nueva secuencia
|
||||
# que contiene solo los elementos de la secuencia original
|
||||
# para los cuales la función devuelve True.
|
||||
|
||||
# reduce toma una función y una secuencia
|
||||
# y aplica la función a los elementos de la secuencia
|
||||
# de izquierda a derecha, reduciendo la secuencia a un solo valor.
|
||||
|
||||
|
||||
# 2. Explica la diferencia entre función
|
||||
# de orden superior, cierre y decorador.
|
||||
|
||||
# Una función de orden superior es una función
|
||||
# que toma una o más funciones como argumentos
|
||||
# y/o devuelve una función como resultado.
|
||||
|
||||
# Un cierre es una función
|
||||
# que recuerda el estado
|
||||
# de su entorno léxico cuando se define
|
||||
# y puede acceder a ese estado
|
||||
# incluso cuando se llama en un entorno diferente.
|
||||
|
||||
# Un decorador es una función
|
||||
# que toma otra función
|
||||
# y extiende o modifica su comportamiento
|
||||
# sin cambiar su código fuente.
|
||||
|
||||
|
||||
# 3. Define una función de llamada antes de map, filter o reduce,
|
||||
# mira los ejemplos.
|
||||
|
||||
# map
|
||||
from functools import reduce
|
||||
|
||||
|
||||
def double(x):
|
||||
return x * 2
|
||||
|
||||
|
||||
numbers = [1, 2, 3, 4, 5]
|
||||
doubled_numbers = list(map(double, numbers))
|
||||
|
||||
print(doubled_numbers)
|
||||
|
||||
|
||||
# filter
|
||||
def is_even(x):
|
||||
return x % 2 == 0
|
||||
|
||||
|
||||
even_numbers = list(filter(is_even, numbers))
|
||||
|
||||
print(even_numbers)
|
||||
|
||||
# reduce
|
||||
|
||||
|
||||
def add(x, y):
|
||||
return x + y
|
||||
|
||||
|
||||
sum = reduce(add, numbers)
|
||||
|
||||
print(sum)
|
||||
|
||||
|
||||
# 4. Usa un bucle for para imprimir cada país
|
||||
# en la lista de países.
|
||||
|
||||
countries = ["Spain", "France", "Germany", "Italy"]
|
||||
|
||||
for country in countries:
|
||||
print(country)
|
||||
|
||||
# 5. Usa un bucle for para imprimir cada nombre
|
||||
# en la lista de nombres.
|
||||
|
||||
names = ["Alice", "Bob", "Charlie", "David"]
|
||||
|
||||
for name in names:
|
||||
print(name)
|
||||
|
||||
# 6. Usa un bucle for para imprimir cada número
|
||||
# en la lista de números.
|
||||
|
||||
for number in numbers:
|
||||
print(number)
|
195
30-days-of-python/14_Funciones_de_orden_superior/02_func_sup.py
Normal file
195
30-days-of-python/14_Funciones_de_orden_superior/02_func_sup.py
Normal file
@ -0,0 +1,195 @@
|
||||
"""
|
||||
02_func_sup.py
|
||||
"""
|
||||
from functools import reduce
|
||||
import countries
|
||||
# Ejercicios: Nivel 2
|
||||
|
||||
|
||||
# 1. Usa map para crear una nueva lista
|
||||
# cambiando cada país a mayúsculas
|
||||
# en la lista de países.
|
||||
|
||||
|
||||
upper_countries = list(map(str.upper, countries.countries))
|
||||
|
||||
print(upper_countries)
|
||||
|
||||
print()
|
||||
|
||||
# 2. Usa map para crear una nueva lista
|
||||
# cambiando cada número por su cuadrado
|
||||
# en la lista de números.
|
||||
|
||||
numbers = [1, 2, 3, 4, 5]
|
||||
squared_numbers = list(map(lambda x: x ** 2, numbers))
|
||||
|
||||
print(squared_numbers)
|
||||
|
||||
print()
|
||||
|
||||
# 3. Usa map para cambiar
|
||||
# cada nombre a mayúsculas
|
||||
# en la lista de nombres.
|
||||
|
||||
names = ["Alice", "Bob", "Charlie", "David"]
|
||||
upper_names = list(map(str.upper, names))
|
||||
|
||||
print(upper_names)
|
||||
|
||||
print()
|
||||
|
||||
# 4. Usa filter para filtrar
|
||||
# los países que contengan 'land'.
|
||||
|
||||
land_countries = list(filter(lambda x: "land" in x, countries.countries))
|
||||
|
||||
print(land_countries)
|
||||
|
||||
print()
|
||||
|
||||
# 5. Usa filter para filtrar los países
|
||||
# que tengan exactamente seis caracteres.
|
||||
|
||||
six_letter_countries = list(filter(lambda x: len(x) == 6, countries.countries))
|
||||
|
||||
print(six_letter_countries)
|
||||
|
||||
print()
|
||||
|
||||
# 6. Usa filter para filtrar los países
|
||||
# que contengan seis letras
|
||||
# o más en la lista de países.
|
||||
|
||||
long_countries = list(filter(lambda x: len(x) >= 6, countries.countries))
|
||||
|
||||
print(long_countries)
|
||||
|
||||
print()
|
||||
|
||||
# 7. Usa filter para filtrar los países
|
||||
# que comiencen con 'E'.
|
||||
|
||||
e_countries = list(filter(lambda x: x.startswith("E"), countries.countries))
|
||||
|
||||
print(e_countries)
|
||||
|
||||
print()
|
||||
|
||||
# 8. Encadena dos o más iteradores de lista
|
||||
# (por ejemplo,
|
||||
# arr.map(callback).filter(callback).reduce(callback)).
|
||||
|
||||
numbers = [1, 2, 3, 4, 5]
|
||||
result = list(map(lambda x: x ** 2, filter(lambda x: x % 2 == 0, numbers)))
|
||||
|
||||
print(result)
|
||||
|
||||
print()
|
||||
|
||||
# 9. Declara una función llamada get_string_lists
|
||||
# que tome una lista como parámetro
|
||||
# y luego devuelva una lista que contenga
|
||||
# solo elementos de tipo cadena.
|
||||
|
||||
|
||||
def get_string_lists(lst):
|
||||
return list(filter(lambda x: isinstance(x, str), lst))
|
||||
|
||||
|
||||
mixed_list = [1, "hello", 2, "world", 3]
|
||||
string_list = get_string_lists(mixed_list)
|
||||
|
||||
print(string_list)
|
||||
|
||||
print()
|
||||
|
||||
# 10. Usa reduce para sumar todos los números
|
||||
# en la lista de números.
|
||||
|
||||
|
||||
numbers = [1, 2, 3, 4, 5]
|
||||
sum = reduce(lambda x, y: x + y, numbers)
|
||||
|
||||
print(sum)
|
||||
|
||||
print()
|
||||
|
||||
# 11. Usa reduce para concatenar todos los países
|
||||
# y producir la siguiente oración:
|
||||
# Estonia, Finlandia, Suecia, Dinamarca, Noruega e Islandia son países del norte de Europa.
|
||||
|
||||
sentence = reduce(lambda x, y: x + ", " + y, countries.countries)
|
||||
|
||||
print(sentence + " son países del norte de Europa.")
|
||||
|
||||
print()
|
||||
|
||||
# 12. Declara una función llamada categorize_countries
|
||||
# que devuelva una lista de países
|
||||
# con algún patrón común de countries.py
|
||||
|
||||
|
||||
def categorize_countries():
|
||||
patterns = ["land", "ia", "island", "stan"]
|
||||
categorized_countries = []
|
||||
for pattern in patterns:
|
||||
matching_countries = list(
|
||||
filter(lambda x: pattern in x.lower(), countries.countries))
|
||||
categorized_countries.append(matching_countries)
|
||||
|
||||
return categorized_countries
|
||||
|
||||
|
||||
print(categorize_countries())
|
||||
|
||||
print()
|
||||
|
||||
# 13. Crea una función que devuelva un diccionario,
|
||||
# donde las claves sean las letras iniciales de los países
|
||||
# y los valores sean la cantidad de nombres de países
|
||||
# que comienzan con esa letra.
|
||||
|
||||
|
||||
def count_countries_by_initial():
|
||||
counts = {}
|
||||
for country in countries.countries:
|
||||
initial = country[0]
|
||||
if initial in counts:
|
||||
counts[initial] += 1
|
||||
else:
|
||||
counts[initial] = 1
|
||||
return counts
|
||||
|
||||
|
||||
print(count_countries_by_initial())
|
||||
|
||||
print()
|
||||
|
||||
# 14. Declara una función llamada get_first_ten_countries
|
||||
# que devuelva una lista de los primeros diez países
|
||||
# de la lista de países.
|
||||
|
||||
|
||||
def get_first_ten_countries():
|
||||
|
||||
return countries.countries[:10]
|
||||
|
||||
|
||||
print(get_first_ten_countries())
|
||||
|
||||
print()
|
||||
|
||||
# 15. Declara una función llamada get_last_ten_countries
|
||||
# que devuelva los últimos diez países
|
||||
# en la lista de países.
|
||||
|
||||
|
||||
def get_last_ten_countries():
|
||||
|
||||
return countries.countries[-10:]
|
||||
|
||||
|
||||
print(get_last_ten_countries())
|
||||
|
||||
print()
|
@ -0,0 +1,61 @@
|
||||
"""
|
||||
03_func_sup.py
|
||||
"""
|
||||
import countries_data
|
||||
from collections import Counter
|
||||
|
||||
# Ejercicios: Nivel 3
|
||||
|
||||
# 1. Usa el archivo [countries_data.py](https://github.com/Asabeneh/30-Days-Of-Python/blob/master/data/countries-data.py) y sigue las siguientes tareas:
|
||||
# - Ordena los países por nombre, capital y población.
|
||||
|
||||
sorted_by_name = sorted(countries_data.countries,
|
||||
key=lambda country: country['name'])
|
||||
|
||||
sorted_by_capital = sorted(
|
||||
countries_data.countries,
|
||||
key=lambda country: country['capital']
|
||||
)
|
||||
|
||||
sorted_by_population = sorted(
|
||||
countries_data.countries,
|
||||
key=lambda country: country['population'],
|
||||
reverse=True
|
||||
)
|
||||
|
||||
# Filtra los diez idiomas más hablados por ubicación
|
||||
|
||||
all_languages = []
|
||||
for country in countries_data.countries:
|
||||
all_languages.extend(country['languages'])
|
||||
|
||||
# Calcula las frecuencias de cada idioma
|
||||
language_counts = Counter(all_languages)
|
||||
|
||||
# Obtiene los diez idiomas más hablados
|
||||
top_10_languages = language_counts.most_common(10)
|
||||
|
||||
# Filtra los diez países más poblados
|
||||
top_10_population = sorted(
|
||||
countries_data.countries, key=lambda country: country['population'], reverse=True)[:10]
|
||||
|
||||
# Imprime los resultados
|
||||
print("## Países ordenados por nombre:")
|
||||
for country in sorted_by_name:
|
||||
print(country['name'])
|
||||
|
||||
print("\n## Países ordenados por capital:")
|
||||
for country in sorted_by_capital:
|
||||
print(country['name'], "-", country['capital'])
|
||||
|
||||
print("\n## Países ordenados por población:")
|
||||
for country in sorted_by_population:
|
||||
print(country['name'], "-", country['population'])
|
||||
|
||||
print("\n## Los diez idiomas más hablados por ubicación:")
|
||||
for language, count in top_10_languages:
|
||||
print(language, "-", count)
|
||||
|
||||
print("\n## Los diez países más poblados:")
|
||||
for country in top_10_population:
|
||||
print(country['name'], "-", country['population'])
|
@ -19,6 +19,8 @@ numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
5. Usa un bucle for para imprimir cada nombre en la lista de nombres.
|
||||
6. Usa un bucle for para imprimir cada número en la lista de números.
|
||||
|
||||
[Solución](01_func_sup.py)
|
||||
|
||||
### Ejercicios: Nivel 2
|
||||
|
||||
1. Usa map para crear una nueva lista cambiando cada país a mayúsculas en la lista de países.
|
||||
@ -37,6 +39,8 @@ numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
14. Declara una función llamada get_first_ten_countries que devuelva una lista de los primeros diez países de la lista de países.
|
||||
15. Declara una función llamada get_last_ten_countries que devuelva los últimos diez países en la lista de países.
|
||||
|
||||
[Solución](02_func_sup.py)
|
||||
|
||||
### Ejercicios: Nivel 3
|
||||
|
||||
1. Usa el archivo [countries_data.py](https://github.com/Asabeneh/30-Days-Of-Python/blob/master/data/countries-data.py) y sigue las siguientes tareas:
|
||||
@ -44,4 +48,6 @@ numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
- Filtra los diez idiomas más hablados por ubicación.
|
||||
- Filtra los diez países más poblados.
|
||||
|
||||
[Solución](03_func_sup.py)
|
||||
|
||||
[<< Day 13](../13_Comprensión_de_listas/README.md) | [Day 15 >>](../15_Errores_de_tipo_en_Python/README.md)
|
||||
|
195
30-days-of-python/14_Funciones_de_orden_superior/countries.py
Normal file
195
30-days-of-python/14_Funciones_de_orden_superior/countries.py
Normal file
@ -0,0 +1,195 @@
|
||||
countries = [
|
||||
'Afghanistan',
|
||||
'Albania',
|
||||
'Algeria',
|
||||
'Andorra',
|
||||
'Angola',
|
||||
'Antigua and Barbuda',
|
||||
'Argentina',
|
||||
'Armenia',
|
||||
'Australia',
|
||||
'Austria',
|
||||
'Azerbaijan',
|
||||
'Bahamas',
|
||||
'Bahrain',
|
||||
'Bangladesh',
|
||||
'Barbados',
|
||||
'Belarus',
|
||||
'Belgium',
|
||||
'Belize',
|
||||
'Benin',
|
||||
'Bhutan',
|
||||
'Bolivia',
|
||||
'Bosnia and Herzegovina',
|
||||
'Botswana',
|
||||
'Brazil',
|
||||
'Brunei',
|
||||
'Bulgaria',
|
||||
'Burkina Faso',
|
||||
'Burundi',
|
||||
'Cambodia',
|
||||
'Cameroon',
|
||||
'Canada',
|
||||
'Cape Verde',
|
||||
'Central African Republic',
|
||||
'Chad',
|
||||
'Chile',
|
||||
'China',
|
||||
'Colombi',
|
||||
'Comoros',
|
||||
'Congo (Brazzaville)',
|
||||
'Congo',
|
||||
'Costa Rica',
|
||||
"Cote d'Ivoire",
|
||||
'Croatia',
|
||||
'Cuba',
|
||||
'Cyprus',
|
||||
'Czech Republic',
|
||||
'Denmark',
|
||||
'Djibouti',
|
||||
'Dominica',
|
||||
'Dominican Republic',
|
||||
'East Timor (Timor Timur)',
|
||||
'Ecuador',
|
||||
'Egypt',
|
||||
'El Salvador',
|
||||
'Equatorial Guinea',
|
||||
'Eritrea',
|
||||
'Estonia',
|
||||
'Ethiopia',
|
||||
'Fiji',
|
||||
'Finland',
|
||||
'France',
|
||||
'Gabon',
|
||||
'Gambia, The',
|
||||
'Georgia',
|
||||
'Germany',
|
||||
'Ghana',
|
||||
'Greece',
|
||||
'Grenada',
|
||||
'Guatemala',
|
||||
'Guinea',
|
||||
'Guinea-Bissau',
|
||||
'Guyana',
|
||||
'Haiti',
|
||||
'Honduras',
|
||||
'Hungary',
|
||||
'Iceland',
|
||||
'India',
|
||||
'Indonesia',
|
||||
'Iran',
|
||||
'Iraq',
|
||||
'Ireland',
|
||||
'Israel',
|
||||
'Italy',
|
||||
'Jamaica',
|
||||
'Japan',
|
||||
'Jordan',
|
||||
'Kazakhstan',
|
||||
'Kenya',
|
||||
'Kiribati',
|
||||
'Korea, North',
|
||||
'Korea, South',
|
||||
'Kuwait',
|
||||
'Kyrgyzstan',
|
||||
'Laos',
|
||||
'Latvia',
|
||||
'Lebanon',
|
||||
'Lesotho',
|
||||
'Liberia',
|
||||
'Libya',
|
||||
'Liechtenstein',
|
||||
'Lithuania',
|
||||
'Luxembourg',
|
||||
'Macedonia',
|
||||
'Madagascar',
|
||||
'Malawi',
|
||||
'Malaysia',
|
||||
'Maldives',
|
||||
'Mali',
|
||||
'Malta',
|
||||
'Marshall Islands',
|
||||
'Mauritania',
|
||||
'Mauritius',
|
||||
'Mexico',
|
||||
'Micronesia',
|
||||
'Moldova',
|
||||
'Monaco',
|
||||
'Mongolia',
|
||||
'Morocco',
|
||||
'Mozambique',
|
||||
'Myanmar',
|
||||
'Namibia',
|
||||
'Nauru',
|
||||
'Nepal',
|
||||
'Netherlands',
|
||||
'New Zealand',
|
||||
'Nicaragua',
|
||||
'Niger',
|
||||
'Nigeria',
|
||||
'Norway',
|
||||
'Oman',
|
||||
'Pakistan',
|
||||
'Palau',
|
||||
'Panama',
|
||||
'Papua New Guinea',
|
||||
'Paraguay',
|
||||
'Peru',
|
||||
'Philippines',
|
||||
'Poland',
|
||||
'Portugal',
|
||||
'Qatar',
|
||||
'Romania',
|
||||
'Russia',
|
||||
'Rwanda',
|
||||
'Saint Kitts and Nevis',
|
||||
'Saint Lucia',
|
||||
'Saint Vincent',
|
||||
'Samoa',
|
||||
'San Marino',
|
||||
'Sao Tome and Principe',
|
||||
'Saudi Arabia',
|
||||
'Senegal',
|
||||
'Serbia and Montenegro',
|
||||
'Seychelles',
|
||||
'Sierra Leone',
|
||||
'Singapore',
|
||||
'Slovakia',
|
||||
'Slovenia',
|
||||
'Solomon Islands',
|
||||
'Somalia',
|
||||
'South Africa',
|
||||
'Spain',
|
||||
'Sri Lanka',
|
||||
'Sudan',
|
||||
'Suriname',
|
||||
'Swaziland',
|
||||
'Sweden',
|
||||
'Switzerland',
|
||||
'Syria',
|
||||
'Taiwan',
|
||||
'Tajikistan',
|
||||
'Tanzania',
|
||||
'Thailand',
|
||||
'Togo',
|
||||
'Tonga',
|
||||
'Trinidad and Tobago',
|
||||
'Tunisia',
|
||||
'Turkey',
|
||||
'Turkmenistan',
|
||||
'Tuvalu',
|
||||
'Uganda',
|
||||
'Ukraine',
|
||||
'United Arab Emirates',
|
||||
'United Kingdom',
|
||||
'United States',
|
||||
'Uruguay',
|
||||
'Uzbekistan',
|
||||
'Vanuatu',
|
||||
'Vatican City',
|
||||
'Venezuela',
|
||||
'Vietnam',
|
||||
'Yemen',
|
||||
'Zambia',
|
||||
'Zimbabwe',
|
||||
]
|
2620
30-days-of-python/14_Funciones_de_orden_superior/countries_data.py
Normal file
2620
30-days-of-python/14_Funciones_de_orden_superior/countries_data.py
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user