Add exercises 14

Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
Manuel Vergara 2023-09-28 00:02:42 +02:00
parent b89cfe618a
commit e1121c9826
6 changed files with 3182 additions and 0 deletions

View 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)

View 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()

View File

@ -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'])

View File

@ -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)

View 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',
]

File diff suppressed because it is too large Load Diff