0% encontró este documento útil (0 votos)
37 vistas13 páginas

PIAPROGRAMACIONAVANZADA - Ipynb - Colaboratory

Este documento presenta un programa en Python para gestionar datos de empleados. Incluye funciones para cargar datos previamente almacenados, mostrar todos los datos, agregar nuevos datos e insertarlos en listas, y buscar y editar datos específicos de empleados. Explica conceptos como listas, diccionarios, expresiones regulares e importa librerías como re, os y pickle para validaciones, manejo de archivos y serialización.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
37 vistas13 páginas

PIAPROGRAMACIONAVANZADA - Ipynb - Colaboratory

Este documento presenta un programa en Python para gestionar datos de empleados. Incluye funciones para cargar datos previamente almacenados, mostrar todos los datos, agregar nuevos datos e insertarlos en listas, y buscar y editar datos específicos de empleados. Explica conceptos como listas, diccionarios, expresiones regulares e importa librerías como re, os y pickle para validaciones, manejo de archivos y serialización.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.

ipynb - Colaboratory

PORTADA

UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN


FACULTAD DE CONTADURÍA PÚBLICA Y ADMINISTRACIÓN
LICENCIADO EN TECNOLOGÍAS DE LA INFORMACIÓN

PROGRAMACIÓN AVANZADA (2o SEMESTRE)

PRODUCTO INTEGRADOR DE APRENDIZAJE


Catedrático:
Dr. Felipe Ramírez

Integrantes del equipo:


Primer Apellido Segundo Apellido Nombre(s) Matrícula

Cruz Hernandez Edgar Sebastian 1852292

Pena Alvarez Lesly Nohemi 2018663


Fecha: 22 de Noviembre de 2022.

PARTE TEORICA
1. Qué tipo de lenguaje es Python?

1. Python es un lenguaje de propósito general, de tercera generación,


english-like, orientado a objetos, e interpretado, que tiene gran
aceptación por sus excelentes capacidades para la ciencia de datos.

2. Cuáles son los tipos de datos nativos de Python?

2. int, float, str, bool.

3. Cómo se declara una variable en Python?

3. El operador de asignación = Un identificador o nombre de variable, a la


izquierda del operador. p

4. Cómo se pregunta un dato en 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

5. De qué tipo de dato son los datos que se preguntan en Python?

5. Los booleanos, Los numéricos (enteros, punto flotante y complejos) y


Las cadenas de caracteres.

6. Con qué función convierto una expresión a int?

6. int()

7. Con qué función convierto una expresión a float?

7. float()

8. Con qué función convierto una expresión a str?

8. split()

9. Para qué sirve while?

9. Para repetir un código mientras dure una determinada condición.

10. Para qué sirve break?

10. Es terminar la ejecución del bucle cuando una variable toma un


determinado valor o cuando se cumple alguna condición.

11. Para qué sirve continue?

11. Sirve para volver al principio del bucle en cualquier momento, sin
ejecutar las líneas que haya por debajo de la palabra continue.

12. Qué diferencia tiene while y while True?

12. El bloque While En caso de que la condición se cumpla, se volverá a


repetir este proceso hasta que se deje de cumplir la condición, mientras
que en el bucle While true se comprueba la condición antes de ejecutar
el código, siendo ésta es la única diferencia entre los bucles While y
While true

13. Para qué sirve if?

13. Funciona verificando la condición ingresada y de acuerdo a su valor de


verdad (falso o verdadero) lleva a cabo o no una serie de instrucciones.

14. Para qué sirve try?


https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 2/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory

14. El bloque try (intentar) define el fragmento de codigo en el que creemos


que puede producirse una excepcion

15. Cuáles son los operadores de comparación en Python?

15. Igual a (==)


Mayor que (>)
Mayor o igual que (>=)
Menor(<)
Menor o
igual que (<=)
Diferente/ No igual (!=)

16. Cómo se valida si un valor está vacío?

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. Cómo validas si un número es int, usando expresiones regulares?

18. /^[0-9]+$/

19. Cómo validas si un número es float, usando expresiones regulares?

19. Consideremos ahora cómo el tipo de datos puede impactar en las


operaciones matemáticas entre nuestros datos. La suma, la resta, la
división y la multiplicación funcionan en float e integer como es de
esperar.

20. Cómo se define una lista vacía en Python?

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?

21. Para acceder a un elemento de una lista se utilizan los índices. Un


índice es un número entero que indica la posición de un elemento en
una lista. El primer elemento de una lista siempre comienza en el índice
0.

22. Cómo sé el número de elementos que tiene una lista en Python?

22. La función len() devuelve la longitud de una cadena de caracteres o el


número de elementos de una lista

23. Cómo elimino un elemento de una lista 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)

24. Cómo inserto un elemento de una lista en Python?

24. es con el método append()

25. Cómo busco si un elemento existe o no en una lista de Python?

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?

26. usamos la función index que devuelve la posición de la primera


aparición del elemento.

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

Dame el numero de empleado: 1234567

Registro encontrado

numdeempleado : 1234567

Nombre : EDGAR

Primer Apellido : CRUZ

Segundo Apellido: HERNANDEZ

Edad : 21

[M]odificar, [E]liminar, [R]egresar: M

Nombre actual: EDGAR (Omitir para mantener)

Dame el nombre :Edgar

Primer apellido: CRUZ (Omitir para mantener)

Dame el primer apellido :Cruz

Segiundo apellido: HERNANDEZ (Omitir para mantener)

Dame el segundo apellido :Hernandez

Edad: 21 (Omitir para mantener)

Dame la edad :21

Registro actualizado.

[V]er Todo [C]onsultar/Actualizar [S]alir: V

Numero de empleado Nombre Primer Apellido Segundo Apellido Edad

---------- --------------- -------------------- -------------------- -----

1234567 EDGAR CRUZ HERNANDEZ 21

[V]er Todo [C]onsultar/Actualizar [S]alir: C

Dame el numero de empleado: 1234567

Registro encontrado

numdeempleado : 1234567

Nombre : EDGAR

Primer Apellido : CRUZ

Segundo Apellido: HERNANDEZ


https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 11/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory
Segundo Apellido: HERNANDEZ

Edad : 21

[M]odificar, [E]liminar, [R]egresar: E

Registro eliminado

[V]er Todo [C]onsultar/Actualizar [S]alir: S

Gracias por usar el actualizador.

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

Introducción a la programación en Python. (s. f.). Udemy.


https://www.udemy.com/course/aprenda-programacion-python/

https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 12/13
11/23/22, 3:38 AM PIAPROGRAMACIONAVANZADA.ipynb - Colaboratory

Productos de pago de Colab


-
Cancelar contratos

check 0 s completado a las 3:27

https://colab.research.google.com/drive/1hnwy50I2NOLwsBKeEqfpYP8xma1idTS0#scrollTo=5dArIq1eVp61&uniqifier=2&printMode=true 13/13

También podría gustarte