Skip to content

Commit eca1c64

Browse files
Add files via upload
1 parent 9e400d6 commit eca1c64

File tree

5 files changed

+280
-0
lines changed

5 files changed

+280
-0
lines changed

Cap1/Programa 1_1.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
@author: guardati
4+
Problema 1.1
5+
"""
6+
7+
def primero_y_ultimo(lista):
8+
""" Obtiene el primero y el último elemento de la lista.
9+
Parámetro:
10+
lista: de tipo list.
11+
Regresa:
12+
Una tupla formada con el primero y el último elemento de la lista.
13+
Lanza:
14+
ValueError: cuando el parámetro recibido no es una lista o cuando no
15+
tiene, al menos, 2 elementos.
16+
"""
17+
if lista:
18+
if len(lista) >= 2:
19+
return (lista[0], lista[-1])
20+
raise ValueError('La lista no tiene elementos suficientes.')
21+
raise ValueError('No es un dato válido.')
22+
23+
# =============================================================================
24+
# Algunas pruebas para la función primero_y_ultimo()
25+
# =============================================================================
26+
# CP1: lista con varios elementos.
27+
lista1 = [1, 2, 3, 4]
28+
print('\nCP1:', primero_y_ultimo(lista1))
29+
30+
# CP2: lista con solo 2 elementos.
31+
lista2 = [1, 2]
32+
print('CP2:', primero_y_ultimo(lista2))
33+
# CP3: lista con 1 solo elemento.
34+
lista3 = [1]
35+
try:
36+
print('CP3:', primero_y_ultimo(lista3))
37+
except Exception as error:
38+
print('CP3:', error)
39+
# CP4: No se proporciona una lista.
40+
lista4 = None
41+
try:
42+
print('CP4:', primero_y_ultimo(lista4))
43+
except Exception as error:
44+
print('CP4:', error)

Cap1/Programa 1_2.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
@author: guardati
4+
Problema 1.2
5+
"""
6+
7+
def carga_lista(nom_arch):
8+
""" Lee los datos de un archivo de texto y los guarda en una lista.
9+
Cada dato se encuentra en una línea diferente del archivo.
10+
Parámetro:
11+
nom_arch: de tipo str. Indica el nombre del archivo del
12+
cual se leerán los datos.
13+
Regresa:
14+
Una lista con los datos leídos del archivo.
15+
Lanza:
16+
FileNotFoundError: si no se pudo abrir el archivo.
17+
"""
18+
try:
19+
resultado = []
20+
with open(nom_arch, 'r') as arch:
21+
for dato in arch:
22+
resultado.append(dato.strip()) # Quita el salto de línea.
23+
return resultado
24+
except FileNotFoundError:
25+
raise FileNotFoundError('No se pudo abrir el archivo.'.upper())
26+
27+
# =============================================================================
28+
# Algunas pruebas para la función carga_lista()
29+
# =============================================================================
30+
31+
# CP1: se proporciona el nombre de un archivo que tiene valores válidos.
32+
lista1 = carga_lista('escritores')
33+
print('\nCP1:', lista1)
34+
# CP2: se proporciona el nombre de un archivo vacío.
35+
lista2 = carga_lista('pintores')
36+
print('CP2:', lista2)
37+
# CP3: se proporciona el nombre de un archivo que no fue creado.
38+
try:
39+
lista3 = carga_lista('escultores')
40+
print('CP3:', lista3)
41+
except Exception as error:
42+
print('CP3:', error)

Cap1/Programa 1_3.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
@author: guardati
4+
Problema 1.3
5+
"""
6+
7+
def cuenta_positivos(lista):
8+
""" Cuenta el total de números positivos que contiene la lista.
9+
Parámetro:
10+
lista: de tipo list. Todos sus elementos son del mismo tipo.
11+
Regresa:
12+
La cantidad de números positivos almacenados en la lista.
13+
Lanza:
14+
ValueError: si el parámetro recibido no es una lista o si
15+
sus elementos no son números.
16+
"""
17+
if lista and (type(lista[0]) == int or type(lista[0]) == float):
18+
positivos = 0
19+
for numero in lista:
20+
if numero > 0:
21+
positivos += 1
22+
return positivos
23+
raise ValueError('Error en los datos: no es un dato válido o no tiene números.')
24+
25+
# =============================================================================
26+
# Algunas pruebas de la función cuenta_positivos().
27+
# =============================================================================
28+
# CP1: se proporciona una lista de números enteros.
29+
lista1 = [405, -107, 210, 5, -23, -45, 87]
30+
print('\nCP1 - Total de positivos =', cuenta_positivos(lista1))
31+
# CP2: se proporciona una lista de números reales negativos.
32+
lista2 = [-35.61, -10.17, -15.99, -8.5]
33+
print('CP2 - Total de positivos =', cuenta_positivos(lista2))
34+
# CP3: se proporciona una lista de cadenas de caracteres.
35+
lista3 = ['Costa Rica', 'Colombia', 'Canadá', 'Chile']
36+
try:
37+
print('CP3 - Total de positivo s=', cuenta_positivos(lista3))
38+
except ValueError as error:
39+
print('CP3 -', error)
40+
# CP4: no se proporciona una lista.
41+
lista4 = None
42+
try:
43+
print('CP4 - Total de positivos =', cuenta_positivos(lista4))
44+
except ValueError as error:
45+
print('CP4 -', error)
46+

Cap1/Programa 1_4.py

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
@author: guardati
4+
Problema 1.4
5+
"""
6+
7+
def todos_son_multiplos(lista1, lista2):
8+
""" Determina si cada uno de los elementos de lista2 es múltiplo del
9+
correspondiente elemento de lista1 y, además, si las listas tienen la
10+
misma longitud.
11+
Parámetros:
12+
lista1: de tipo list. Almacena números.
13+
lista2: de tipo list. Almacena números.
14+
Regresa:
15+
True si se cumplen las 2 condiciones, False en caso contrario.
16+
"""
17+
if len(lista1) == len(lista2):
18+
limite = len(lista1)
19+
indice = 0
20+
while indice < limite and lista1[indice] % lista2[indice] == 0:
21+
indice += 1
22+
respuesta = indice == limite
23+
else:
24+
respuesta = False
25+
return respuesta
26+
27+
def calcula_promedio(lista, n):
28+
""" Calcula y regresa el promedio de los números que están en posiciones
29+
que son múltiplos de n.
30+
Parámetros:
31+
lista: de tipo list. Almacena números enteros o reales.
32+
n: de tipo int y es > 0.
33+
Regresa:
34+
El promedio de algunos números, elegidos por su posición.
35+
Lanza:
36+
ArithmeticError si no se puede calcular el promedio.
37+
"""
38+
suma = 0
39+
contador = 0
40+
for i, elemento in enumerate(lista):
41+
if i % n == 0:
42+
suma += elemento
43+
contador += 1
44+
try:
45+
promedio = suma / contador
46+
return promedio
47+
except:
48+
raise ArithmeticError('No se puede calcular el promedio.')
49+
50+
# =============================================================================
51+
# Algunas pruebas de las funcion todos_son_multiplos().
52+
# =============================================================================
53+
# CP1: se proporcionan dos listas de números, que cumplen con las condiciones.
54+
lista1 = [9, 16, 15, 8, 21]
55+
lista2 = [3, 2, 5, 8, 7]
56+
if todos_son_multiplos(lista1, lista2):
57+
print('\nCP1: Sí cumplen las condiciones.')
58+
else:
59+
print('\nCP1: No cumplen las condiciones.')
60+
# CP2: se proporcionan dos listas de números con distinta cantidad de elementos.
61+
lista3 = [3, 2, 5, 8]
62+
if todos_son_multiplos(lista1, lista3):
63+
print('CP2: Sí cumplen las condiciones.')
64+
else:
65+
print('CP2: No cumplen las condiciones.')
66+
# CP3: se proporcionan dos listas de números, de igual longitud, pero no todos
67+
# son múltiplos.
68+
lista4 = [4, 2, 5, 8, 7]
69+
if todos_son_multiplos(lista1, lista4):
70+
print('CP3: Sí cumplen las condiciones.')
71+
else:
72+
print('CP3: No cumplen las condiciones.')
73+
# =============================================================================
74+
# Algunas pruebas de la función calcula_promedio().
75+
# =============================================================================
76+
# CP4: se proporciona una lista de números enteros.
77+
lista1 = [11, -20, -7, 45, 10, -16, 14, 17]
78+
prom1 = calcula_promedio(lista1, 2)
79+
print('\nCP4 --> Promedio de enteros =', prom1)
80+
# CP5: se proporciona una lista de números reales.
81+
lista2 = [3.5, -2.8, 2.4, 1.5, -2.3, -3.1, -4.5, 5.2, 3.8, 6.0]
82+
prom2 = calcula_promedio(lista2, 3)
83+
print('CP5 --> Promedio de reales =', prom2)
84+
# CP6: se proporciona una lista vacía.
85+
lista3 = []
86+
try:
87+
prom3 = calcula_promedio(lista3, 3)
88+
print('CP6 --> Promedio (lista vacía) =', prom3)
89+
except ArithmeticError as error:
90+
print('CP6 -->', error)
91+

Cap1/Programa 1_5.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
@author: guardati
4+
Problema 1.5
5+
"""
6+
7+
def determina_minimo_2cadenas(lista):
8+
""" Determina si en la lista hay, por lo menos, dos datos tipo
9+
cadena de caracteres (str).
10+
Parámetro:
11+
lista: de tipo list. Almacena datos que pueden ser de cualquier tipo.
12+
Regresa:
13+
True si se encuentran los datos solicitados, False caso contrario.
14+
"""
15+
limite = len(lista)
16+
indice = 0
17+
contador = 0
18+
while indice < limite and contador < 2:
19+
if type(lista[indice]) == str:
20+
contador += 1
21+
indice += 1
22+
return contador == 2
23+
24+
# =============================================================================
25+
# Algunas pruebas de la función determina_minimo_2cadenas()
26+
# =============================================================================
27+
# CP1: se da una lista con 4 cadenas.
28+
colores = ['rojo', 'verde', 'blanco', 'amarillo']
29+
if determina_minimo_2cadenas(colores):
30+
print('\nCP1: sí hay, mínimo, 2 cadenas.') # Imprime.
31+
else:
32+
print('\nCP1: no hay, mínimo, 2 cadenas.')
33+
# CP2: se da una lista con 2 cadenas.
34+
lista_mezcla = [305.23, True, 'blanco', 108, 30, 'azul']
35+
if determina_minimo_2cadenas(lista_mezcla):
36+
print('CP2: sí hay, mínimo, 2 cadenas.') # Imprime.
37+
else:
38+
print('CP2: no hay, mínimo, 2 cadenas.')
39+
# CP3: se da una lista con 1 cadena.
40+
lista_mezcla.pop(5)
41+
if determina_minimo_2cadenas(lista_mezcla):
42+
print('CP3: sí hay, mínimo, 2 cadenas.')
43+
else:
44+
print('CP3: no hay, mínimo, 2 cadenas.') # Imprime.
45+
# CP4: se da una lista de números.
46+
pares = [2, 4, 6, 8]
47+
if determina_minimo_2cadenas(pares):
48+
print('CP4: sí hay, mínimo, 2 cadenas.')
49+
else:
50+
print('CP4: no hay, mínimo, 2 cadenas.') # Imprime.
51+
# CP5: se da una lista vacía.
52+
vacia = []
53+
if determina_minimo_2cadenas(vacia):
54+
print('CP5: sí hay, mínimo, 2 cadenas.')
55+
else:
56+
print('CP5: no hay, mínimo, 2 cadenas.') # Imprime.
57+

0 commit comments

Comments
 (0)