PIAPROGRAMACIONAVANZADA - Ipynb - Colaboratory
PIAPROGRAMACIONAVANZADA - Ipynb - Colaboratory
ipynb - Colaboratory
PORTADA
PARTE TEORICA
1. Qué tipo de lenguaje es Python?
4. Para pedir al usuario que introduzca algún dato a través del teclado,
usaremos el método input() .
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 1/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory
6. int()
7. float()
8. split()
11. Sirve para volver al principio del bucle en cualquier momento, sin
ejecutar las líneas que haya por debajo de la palabra continue.
16. Si la lista está vacía, evalúa a False (falso) y se ejecuta la cláusula else
17. Qué librería se debe importar para validar usando expresiones regulares?
17. "re"
18. /^[0-9]+$/
20. Usando un par de corchetes “[]” vacíos para crear listas vacías.
21. Cómo se leen los valores de una lista, uno por uno, en Python?
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 3/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory
23. En este primer caso vamos a utilizar el método .remove() este método
se puede ejecutar directamente sobre la lista, así que su sintaxis es:
lista.remove(elemento)
25. Para verificar si un elemento, cadena o valor está en una lista en Python,
use el operador in o not in.
26. Cómo sé en qué número de índice está un determinado valor en una lista, en Python?
PROGRAMA
1
# Montar el Google Drive
3
from google.colab import drive
4
drive.mount('/content/drive')
Mounted at /content/drive
1
# Se cargan las librerías requeridas para trabajar con expresiones regulares
3
import re # Librería para el manejo de expresiones regulares para validación
4
import os # Librería para interactuar con el sistema operativo y manipular archivos
5
import pickle # Librería para serializar y deserializar en formato pickle (binario)
1
# Declarar variables globales de trabajo, una por cada dato manejado
3
numdeempleado=""
4
nombre=""
5
primer_apellido=""
6
segundo_apellido=""
7
edad=0
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 4/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory
9
# Declaro una variable para almacenar el índice de un elemento
10
# buscado y encontrado.
11
i=0
12
13
# Declaro una variable booleana que me indique si la última búsqueda
14
# fue exitosa o no.
15
encontrada=False
16
17
# Colecciones de almacenamiento de datos
18
19
contenedor=[]
20
llaves=[] # Se almacenan las llaves
21
datos=[] # Se almacenan las características
22
23
# Reviso si ya se tienen datos previamente grabados, y los cargo.
24
25
ruta= os.getcwd() + r"\EMPLEADOS.pickle"
26
27
if os.path.exists(ruta):
28
with open(ruta,"rb") as f:
29
contenedor=pickle.load(f)
30
llaves=contenedor[0]
31
datos=contenedor[1]
32
33
# Datos de prueba
34
35
#llaves.append("1111111")
36
#datos.append(["JUAN","HERNÁNDEZ","CRUZ",25])
37
38
#llaves.append("2222222")
39
#datos.append(["ALFONSO","LÓPEZ","CANTU",23])
40
41
#llaves.append("3333333")
42
#datos.append([" ÁNGEL","GASCA","RIOS",25])
43
44
#llaves.append("4444444")
45
#datos.append(["ELIAS","CORONADO","PEREZ",29])
46
47
# print(llaves)
48
# print(datos)
49
50
# Qué recupera esta línea?
51
# print(datos[2][1])
52
53
def VerTodo():
54
print(f"\n{'Numero de empleado':10} {'Nombre':15} {'Primer Apellido':20} {'Segundo Apell
55
print(f"{'-'*10:10} {'-'*15:15} {'-'*20:20} {'-'*20:20} {'-'*5:5}")
56
for x in range(len(llaves)):
57
print(f"{llaves[x]:10} {datos[x][0]:15} {datos[x][1]:20} {datos[x][2]:20} {datos[x][3]
58
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 5/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory
59
# VerTodo()
60
61
def PreguntarLlave():
62
# Se especifican las variables globales que serán usadas en esta función
63
global numdeempleado, nombre, primer_apellido, segundo_apellido, edad, i, encontrada, ll
64
# Se pregunta El numero de empleado
65
while True:
66
numdeempleado=input("\nDame el numero de empleado: ")
67
# Validar que no se omita
68
if (numdeempleado==""):
69
print("\nEl numero de empleado no puede omitirse. Intenta de nuevo.")
70
continue
71
# Validar que sea 7 dígitos
72
if (not bool(re.match("^[0-9]{7}$",numdeempleado))):
73
print("\nEl numero de empleado debe ser de 7 dígitos. Intenta de nuevo.")
74
continue
75
# Si llega aquí, es que El numero de empleado se ha proporcionado y es correcta
76
# Verificar si existe o no en la lista.
77
if (numdeempleado in llaves):
78
# Si El numero de empleado la está registrada, recupera el índice...
79
i = llaves.index(numdeempleado)
80
# Carga los datos en las variables de trabajo
81
nombre=datos[i][0]
82
primer_apellido=datos[i][1]
83
segundo_apellido=datos[i][2]
84
edad=datos[i][3]
85
# Actualiza la variable de estado, lo que evita estar
86
# haciendo búsquedas
87
encontrada=True
88
else:
89
# Si no existe, inicializa las variables de trabajo y
90
# actualiza la variable de estado.
91
nombre=""
92
primer_apellido=""
93
segundo_apellido=""
94
edad=0
95
encontrada=False
96
# Al concluir, se sale del ciclo y de la función
97
break
98
99
# PreguntarLlave()
100
101
# print(numdeempleado,nombre)
102
103
def MostrarDatosRegistro():
104
# global numdeempleado, nombre, primer_apellido, segundo_apellido, edad
105
print("\n\tRegistro encontrado\n")
106
print(f"\tnumdeempleado : {numdeempleado}")
107
print(f"\tNombre : {nombre}")
108
print(f"\tPrimer Apellido : {primer_apellido}")
109
print(f"\tSegundo Apellido: {segundo_apellido}")
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 6/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory
110
print(f"\tEdad : {edad}")
111
112
# MostrarDatosRegistro()
113
114
def EliminarDato():
115
llaves.pop(i)
116
datos.pop(i)
117
print("\nRegistro eliminado")
118
119
# EliminarDato()
120
121
def PreguntarDatos():
122
global numdeempleado, nombre, primer_apellido, segundo_apellido, edad, encontrada
123
print("\n")
124
125
# Pregunta NOMBRE
126
# Si se trata de un registro existente, se muestra el valor
127
# actual, que permanecerá sin cambios en caso de omitir la
128
# captura.
129
if (encontrada):
130
print(f"\nNombre actual: {nombre} (Omitir para mantener)")
131
# Pregunta el nombre de forma indefinida, hasta que esté correcto
132
while True:
133
_nombre=input("\nDame el nombre :").upper()
134
# Si el dato se encontró, y se omitió, no pasa nada.
135
# Quiere decir que se queda como está
136
if (encontrada and _nombre==""):
137
break
138
# Si el dato no existe en la lista, la validación del campo
139
# es obligatoria.
140
if (not encontrada):
141
if (_nombre==""):
142
print("\nEl nombre no puede omitirse.")
143
continue
144
# El resto de las validaciones aplican en modificaciones, exista o no.
145
# Si no cumple con el patrón, se pregunta de nuevo.
146
if (not bool(re.match("^[A-Z ÑÁÉÍÓÚÜ]{1,15}$",_nombre))):
147
print("\nEl nombre solo puede contener 15 letras y espacios.")
148
continue
149
# Si todo salió bien, actualiza la variable global, y sale.
150
nombre=_nombre.upper()
151
break
152
153
# Pregunta PRIMER APELLIDO
154
# Si se trata de un registro existente, se muestra el valor
155
# actual, que permanecerá sin cambios en caso de omitir la
156
# captura.
157
if (encontrada):
158
print(f"\nPrimer apellido: {primer_apellido} (Omitir para mantener)")
159
# Pregunta el nombre de forma indefinida, hasta que esté correcto
160
while True:
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 7/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory
161
_primer_apellido=input("\nDame el primer apellido :").upper()
162
# Si el dato se encontró, y se omitió, no pasa nada.
163
# Quiere decir que se queda como está
164
if (encontrada and _primer_apellido==""):
165
break
166
# Si el dato no existe en la lista, la validación del campo
167
# es obligatoria.
168
if (not encontrada):
169
if (_primer_apellido==""):
170
print("\nEl primer apellido no puede omitirse.")
171
continue
172
# El resto de las validaciones aplican en modificaciones, exista o no.
173
# Si no cumple con el patrón, se pregunta de nuevo.
174
if (not bool(re.match("^[A-Z ÑÁÉÍÓÚÜ]{1,20}$",_primer_apellido))):
175
print("\nEl nombre solo puede contener 20 letras y espacios.")
176
continue
177
# Si todo salió bien, actualiza la variable global, y sale.
178
primer_apellido=_primer_apellido.upper()
179
break
180
181
# Pregunta SEGUNDO APELLIDO
182
# Si se trata de un registro existente, se muestra el valor
183
# actual, que permanecerá sin cambios en caso de omitir la
184
# captura.
185
if (encontrada):
186
print(f"\nSegiundo apellido: {segundo_apellido} (Omitir para mantener)")
187
# Pregunta el nombre de forma indefinida, hasta que esté correcto
188
while True:
189
_segundo_apellido=input("\nDame el segundo apellido :").upper()
190
# Si el dato se encontró, y se omitió, no pasa nada.
191
# Quiere decir que se queda como está
192
if (encontrada and _segundo_apellido==""):
193
break
194
# Si el dato no existe en la lista, la validación del campo
195
# es obligatoria.
196
if (not encontrada):
197
if (_segundo_apellido==""):
198
print("\nEl primer apellido no puede omitirse.")
199
continue
200
# El resto de las validaciones aplican en modificaciones, exista o no.
201
# Si no cumple con el patrón, se pregunta de nuevo.
202
if (not bool(re.match("^[A-Z ÑÁÉÍÓÚÜ]{1,20}$",_segundo_apellido))):
203
print("\nEl nombre solo puede contener 20 letras y espacios.")
204
continue
205
# Si todo salió bien, actualiza la variable global, y sale.
206
segundo_apellido=_segundo_apellido.upper()
207
break
208
209
# Pregunta EDAD
210
# Si se trata de un registro existente, se muestra el valor
211
# actual, que permanecerá sin cambios en caso de omitir la
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 8/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory
212
# captura.
213
if (encontrada):
214
print(f"\nEdad: {edad} (Omitir para mantener)")
215
# Pregunta el nombre de forma indefinida, hasta que esté correcto
216
while True:
217
_edad=input("\nDame la edad :").upper()
218
# Si el dato se encontró, y se omitió, no pasa nada.
219
# Quiere decir que se queda como está
220
if (encontrada and _edad==""):
221
break
222
# Si el dato no existe en la lista, la validación del campo
223
# es obligatoria.
224
if (not encontrada):
225
if (_edad==""):
226
print("\nLa edad no puede omitirse.")
227
continue
228
# El resto de las validaciones aplican en modificaciones, exista o no.
229
# Si no cumple con el patrón, se pregunta de nuevo.
230
if (not bool(re.match("^[0-9]{1,2}$",_edad))):
231
print("\nEl nombre solo puede contener 2 dígitos.")
232
continue
233
234
# Si todo salió bien, actualiza la variable global, y sale.
235
edad=int(_edad)
236
break
237
238
def AgregarRegistro():
239
llaves.append(numdeempleado)
240
datos.append([nombre, primer_apellido, segundo_apellido, edad])
241
print("\nRegistro agregado.")
242
243
def ActualizarRegistro():
244
# La llave primaria no cambia
245
datos[i][0]=nombre
246
datos[i][1]=primer_apellido
247
datos[i][2]=segundo_apellido
248
datos[i][3]=edad
249
print("\nRegistro actualizado.")
250
251
# Elaboro el entry point
252
def inicio():
253
print("ACTUALIZADOR DE EMPLEADOS\n")
254
while True:
255
# Opciones del Menú general.
256
opcion=input("\n[V]er Todo [C]onsultar/Actualizar [S]alir: ")
257
258
# Si lo que quiero hacer es SALIR
259
if (opcion.upper()=="S"):
260
# Guardamos las listas en el contenedor
261
contenedor=[llaves,datos]
262
# Lo guardo en el archivo, en formato pickle
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 9/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory
263
with open(ruta,"wb+") as f:
264
pickle.dump(contenedor,f)
265
print("\nGracias por usar el actualizador.")
266
break
267
268
# Si lo que quiero hacer es VER TODO
269
if (opcion.upper()=="V"):
270
if (len(llaves)==0):
271
print("\nNada que ver.")
272
continue
273
else:
274
VerTodo()
275
276
# Si lo que quiero hacer es CONSULTAR / ACTUALIZAR
277
if (opcion.upper()=="C"):
278
# Pregunta la llave primaria
279
PreguntarLlave()
280
# Valida si ya hay un registro con esa llave.
281
if (encontrada):
282
# Si ya existe el registro, carga y muestra los datos
283
MostrarDatosRegistro()
284
# Posibilidades si el dato ya existe
285
while True:
286
opcion=input("\n[M]odificar, [E]liminar, [R]egresar: ")
287
# Regresa al menú general
288
if (opcion.upper()=="R"):
289
break
290
# Si desea eliminar
291
if (opcion.upper()=="E"):
292
EliminarDato()
293
break
294
# Si desea modificar
295
if (opcion.upper()=="M"):
296
PreguntarDatos()
297
ActualizarRegistro()
298
break
299
else:
300
print("\nEse regisro no existe.")
301
while True:
302
opcion=input("\nDesea crear un nuevo registro? [S/N] :")
303
if (opcion.upper()=="N"):
304
break
305
if (opcion.upper()=="S"):
306
PreguntarDatos()
307
AgregarRegistro()
308
break
309
310
311
312
# Desmonto el acceso a Google Drive
313
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 10/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory
314
drive.flush_and_unmount()
315
316
317
# Se ejecuta Entry Point
318
319
inicio()
Registro encontrado
numdeempleado : 1234567
Nombre : EDGAR
Edad : 21
Registro actualizado.
Registro encontrado
numdeempleado : 1234567
Nombre : EDGAR
Edad : 21
Registro eliminado
Comentarios personales
Edgar: Si se me facilita la programacion,las expectativas que tengo es poder trabajar en una buena
empresa para poder tener un buen puesto de trabajo.
If the programming is easier for me, the expectations I have is to be able to work in a good
company to be able to have a good job.
Lesly:La programacion me gusta mucho y es algo que se me facilita,las expectativas que tengo es
poder aprender mucho para lograr tener un buen puesto de trabajo y trabajar en una empresa de
algo que me guste.
I like programming a lot and it is something that is easy for me, the expectations I have is to be
able to learn a lot to get a good job and work in a company that does something that I like.
Liga
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0?usp=sharing
Referencias
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 12/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory
https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 13/13