From 5227fb24cdcd64f76bdf3489a77b78eced7c2c0c Mon Sep 17 00:00:00 2001 From: David Bohorquez Date: Thu, 6 Oct 2022 06:29:52 -0500 Subject: [PATCH] Add course --- 00-zen.py | 1 + 01-hola.py | 2 + 02-tipos_datos.py | 31 ++++++++ 03-operadores_aritmeticos.py | 38 ++++++++++ 04-operador_relacionales.py | 24 ++++++ 05-operdor_logico.py | 39 ++++++++++ 06-operadores_asignacion.py | 19 +++++ 07-salida_consola.py | 5 ++ 08-entrada_datos.py | 7 ++ 09-funciones_integradas.py | 39 ++++++++++ 10-condicionales.py | 11 +++ 11-condiciones_anidadas.py | 12 +++ 12-listas.py | 21 ++++++ 13-listas_metodos.py | 30 ++++++++ 14-tuplas.py | 16 ++++ 15-set.py | 9 +++ 15-set2.py | 30 ++++++++ 16-teoria_conjuntos.py | 19 +++++ 17-diccionario.py | 22 ++++++ 17-diccionario_ej.py | 44 +++++++++++ 18-diccionario2.py | 41 ++++++++++ 19-pilas.py | 16 ++++ 20-colas.py | 26 +++++++ 21-while.py | 8 ++ 22-while_true.py | 16 ++++ 23-for.py | 35 +++++++++ 24-funcion_kwargs.py | 9 +++ 24-funciones.py | 40 ++++++++++ 24-funciones2.py | 33 +++++++++ 25-parametros_funciones.py | 32 ++++++++ 26-multiples_parametros.py | 26 +++++++ 27-burbuja.py | 40 ++++++++++ 28-orden_insercion.py | 28 +++++++ 29-orden_seleccion.py | 27 +++++++ 30-busqueda_secuencial.py | 11 +++ 31-busqueda_binaria.py | 11 +++ 32-operaciones_mat.py | 3 + 33-operaciones_mat2.py | 8 ++ 34-variables_locales_globales.py | 22 ++++++ 35-lambda.py | 28 +++++++ 36-funciones_anidadas.py | 13 ++++ 37-closure.py | 18 +++++ 38-decoradores.py | 23 ++++++ 39-generador.py | 22 ++++++ 40-continue_pass_else.py | 43 +++++++++++ 41-doc.py | 10 +++ 42-argv.py | 9 +++ 43-excepcion.py | 35 +++++++++ 44-poo.py | 70 ++++++++++++++++++ 45-propierties.py | 25 +++++++ 46-herencia.py | 41 ++++++++++ 47-archivo.py | 20 +++++ 48-cadenas.py | 16 ++++ Programa1.py | 3 + Programa2.py | 2 + README.md | 30 ++++++++ archivo.txt | 8 ++ archivos/archivo.txt | 2 + archivos/hola.txt | 3 + archivos/hola2.txt | 3 + archivos/hola3.txt | 3 + archivos/personas.txt | 4 + ejercicios/01-operacionesAritmeticas.py | 18 +++++ ejercicios/02-exprecionMatematicaCodigo.py | 4 + ejercicios/03-exprecionMatematica2daParete.py | 8 ++ ejercicios/04-IntercambioValores.py | 8 ++ ejercicios/04-figuras.py | 12 +++ ejercicios/05-CalificacionAlumno.py | 16 ++++ ejercicios/06-parImpar.py | 11 +++ ejercicios/07-validarNumero.py | 8 ++ ejercicios/08-MayorNumero.py | 9 +++ ejercicios/09-vocalConstante.py | 6 ++ ejercicios/10-calculadora.py | 31 ++++++++ ejercicios/11-RangoExperiencia.py | 12 +++ ejercicios/12-banco.py | 20 +++++ ejercicios/13-EmpresaDiccionario.py | 22 ++++++ ejercicios/14-EliminarRepetidos.py | 12 +++ ejercicios/15-OpreacionesConjuntos.py | 20 +++++ ejercicios/16-RepiteNumero.py | 22 ++++++ ejercicios/17-listaVideos.py | 14 ++++ ejercicios/18-numeroCorrecto.py | 8 ++ ejercicios/19-Escuela.py | 41 ++++++++++ ejercicios/20-menu.py | 23 ++++++ ejercicios/21-TablasMultiplicar.py | 8 ++ ejercicios/22-SumaCuadrados.py | 6 ++ ejercicios/23-sumaRangoNumeros.py | 14 ++++ ejercicios/24-fibonacci.py | 14 ++++ ejercicios/25-SumaNumerosSucesivos.py | 16 ++++ ejercicios/26-Factorial.py | 15 ++++ ejercicios/27-DosAlaNpotencia.py | 15 ++++ ejercicios/28-NumeroMagico.py | 13 ++++ ejercicios/29-fibonacciFunciones.py | 30 ++++++++ ejercicios/30-FuncionesMatematicas.py | 37 +++++++++ ejercicios/31-mayorMenor.py | 30 ++++++++ ejercicios/32-CombinaListas.py | 5 ++ ejercicios/33-ValidaPalindromo.py | 9 +++ ejercicios/34-MatematicasLambda.py | 8 ++ ejercicios/35-DecoradoresOfendeHumano.py | 44 +++++++++++ ejercicios/36-GenerarIps.py | 29 ++++++++ ejercicios/37-ContinuePassElse.py | 30 ++++++++ ejercicios/38-MatematicasDoc.html | 32 ++++++++ ejercicios/39-ArgvMenuMat.py | 60 +++++++++++++++ ejercicios/40-ExcepcionNumero.py | 22 ++++++ ejercicios/41-Rectangulo.py | 15 ++++ ejercicios/42-Herencia.py | 18 +++++ ejercicios/43-Archivos.py | 10 +++ ejercicios/44-Archivocontador.py | 29 ++++++++ ejercicios/MatematicasDoc.html | 44 +++++++++++ ejercicios/MatematicasDoc.py | 24 ++++++ .../38MatematicasDoc.cpython-38.pyc | Bin 0 -> 869 bytes .../__pycache__/MatematicasDoc.cpython-38.pyc | Bin 0 -> 1162 bytes ejercicios/a sobre b mas uno.png | Bin 0 -> 1315 bytes ejercicios/contador.txt | 1 + ejercicios/exprecionMat2.png | Bin 0 -> 1402 bytes ejercicios/formula eje 7.png | Bin 0 -> 54519 bytes ejercicios/intercambio.png | Bin 0 -> 3686 bytes ejercicios/listas/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 167 bytes .../__pycache__/operaciones.cpython-38.pyc | Bin 0 -> 459 bytes ejercicios/listas/operaciones.py | 14 ++++ ejercicios/matematicasLambda/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 178 bytes .../__pycache__/basicas.cpython-38.pyc | Bin 0 -> 604 bytes ejercicios/matematicasLambda/basicas.py | 9 +++ ejercicios/texto/__init__.py | 0 .../texto/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 166 bytes .../__pycache__/reordenar.cpython-38.pyc | Bin 0 -> 433 bytes ejercicios/texto/reordenar.py | 9 +++ formula.png | Bin 0 -> 3130 bytes imagenes/Python_logo.jpg | Bin 0 -> 198695 bytes imagenes/banner_python.jpg | Bin 0 -> 14072 bytes imagenes/busqueda secuencial.gif | Bin 0 -> 3275530 bytes imagenes/diferencia simetrica.jpg | Bin 0 -> 51645 bytes imagenes/diferencia.png | Bin 0 -> 17231 bytes imagenes/disconexos.png | Bin 0 -> 38038 bytes imagenes/factorial.png | Bin 0 -> 2742 bytes imagenes/fibonacci.png | Bin 0 -> 6974 bytes imagenes/interseccion.png | Bin 0 -> 16351 bytes imagenes/subconjunto.png | Bin 0 -> 9836 bytes imagenes/union.png | Bin 0 -> 3709 bytes matematicas/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 161 bytes .../__pycache__/basicas.cpython-38.pyc | Bin 0 -> 699 bytes .../__pycache__/exponentes.cpython-38.pyc | Bin 0 -> 310 bytes matematicas/basicas.py | 8 ++ matematicas/exponentes.py | 2 + modulos/08-maximo.py | 3 + modulos/__pycache__/humano.cpython-38.pyc | Bin 0 -> 398 bytes .../__pycache__/matematicas.cpython-38.pyc | Bin 0 -> 699 bytes modulos/busquedas.py | 22 ++++++ modulos/matematicas.py | 8 ++ operadores/operadores comparacion.png | Bin 0 -> 79428 bytes salida.txt | 14 ++++ trabajo.py | 64 ++++++++++++++++ trabajo2.py | 45 +++++++++++ 155 files changed, 2383 insertions(+) create mode 100644 00-zen.py create mode 100644 01-hola.py create mode 100644 02-tipos_datos.py create mode 100644 03-operadores_aritmeticos.py create mode 100644 04-operador_relacionales.py create mode 100644 05-operdor_logico.py create mode 100644 06-operadores_asignacion.py create mode 100644 07-salida_consola.py create mode 100644 08-entrada_datos.py create mode 100644 09-funciones_integradas.py create mode 100644 10-condicionales.py create mode 100644 11-condiciones_anidadas.py create mode 100644 12-listas.py create mode 100644 13-listas_metodos.py create mode 100644 14-tuplas.py create mode 100644 15-set.py create mode 100644 15-set2.py create mode 100644 16-teoria_conjuntos.py create mode 100644 17-diccionario.py create mode 100644 17-diccionario_ej.py create mode 100644 18-diccionario2.py create mode 100644 19-pilas.py create mode 100644 20-colas.py create mode 100644 21-while.py create mode 100644 22-while_true.py create mode 100644 23-for.py create mode 100644 24-funcion_kwargs.py create mode 100644 24-funciones.py create mode 100644 24-funciones2.py create mode 100644 25-parametros_funciones.py create mode 100644 26-multiples_parametros.py create mode 100644 27-burbuja.py create mode 100644 28-orden_insercion.py create mode 100644 29-orden_seleccion.py create mode 100644 30-busqueda_secuencial.py create mode 100644 31-busqueda_binaria.py create mode 100644 32-operaciones_mat.py create mode 100644 33-operaciones_mat2.py create mode 100644 34-variables_locales_globales.py create mode 100644 35-lambda.py create mode 100644 36-funciones_anidadas.py create mode 100644 37-closure.py create mode 100644 38-decoradores.py create mode 100644 39-generador.py create mode 100644 40-continue_pass_else.py create mode 100644 41-doc.py create mode 100644 42-argv.py create mode 100644 43-excepcion.py create mode 100644 44-poo.py create mode 100644 45-propierties.py create mode 100644 46-herencia.py create mode 100644 47-archivo.py create mode 100644 48-cadenas.py create mode 100644 Programa1.py create mode 100644 Programa2.py create mode 100644 README.md create mode 100644 archivo.txt create mode 100644 archivos/archivo.txt create mode 100644 archivos/hola.txt create mode 100644 archivos/hola2.txt create mode 100644 archivos/hola3.txt create mode 100644 archivos/personas.txt create mode 100644 ejercicios/01-operacionesAritmeticas.py create mode 100644 ejercicios/02-exprecionMatematicaCodigo.py create mode 100644 ejercicios/03-exprecionMatematica2daParete.py create mode 100644 ejercicios/04-IntercambioValores.py create mode 100644 ejercicios/04-figuras.py create mode 100644 ejercicios/05-CalificacionAlumno.py create mode 100644 ejercicios/06-parImpar.py create mode 100644 ejercicios/07-validarNumero.py create mode 100644 ejercicios/08-MayorNumero.py create mode 100644 ejercicios/09-vocalConstante.py create mode 100644 ejercicios/10-calculadora.py create mode 100644 ejercicios/11-RangoExperiencia.py create mode 100644 ejercicios/12-banco.py create mode 100644 ejercicios/13-EmpresaDiccionario.py create mode 100644 ejercicios/14-EliminarRepetidos.py create mode 100644 ejercicios/15-OpreacionesConjuntos.py create mode 100644 ejercicios/16-RepiteNumero.py create mode 100644 ejercicios/17-listaVideos.py create mode 100644 ejercicios/18-numeroCorrecto.py create mode 100644 ejercicios/19-Escuela.py create mode 100644 ejercicios/20-menu.py create mode 100644 ejercicios/21-TablasMultiplicar.py create mode 100644 ejercicios/22-SumaCuadrados.py create mode 100644 ejercicios/23-sumaRangoNumeros.py create mode 100644 ejercicios/24-fibonacci.py create mode 100644 ejercicios/25-SumaNumerosSucesivos.py create mode 100644 ejercicios/26-Factorial.py create mode 100644 ejercicios/27-DosAlaNpotencia.py create mode 100644 ejercicios/28-NumeroMagico.py create mode 100644 ejercicios/29-fibonacciFunciones.py create mode 100644 ejercicios/30-FuncionesMatematicas.py create mode 100644 ejercicios/31-mayorMenor.py create mode 100644 ejercicios/32-CombinaListas.py create mode 100644 ejercicios/33-ValidaPalindromo.py create mode 100644 ejercicios/34-MatematicasLambda.py create mode 100644 ejercicios/35-DecoradoresOfendeHumano.py create mode 100644 ejercicios/36-GenerarIps.py create mode 100644 ejercicios/37-ContinuePassElse.py create mode 100644 ejercicios/38-MatematicasDoc.html create mode 100644 ejercicios/39-ArgvMenuMat.py create mode 100644 ejercicios/40-ExcepcionNumero.py create mode 100644 ejercicios/41-Rectangulo.py create mode 100644 ejercicios/42-Herencia.py create mode 100644 ejercicios/43-Archivos.py create mode 100644 ejercicios/44-Archivocontador.py create mode 100644 ejercicios/MatematicasDoc.html create mode 100644 ejercicios/MatematicasDoc.py create mode 100644 ejercicios/__pycache__/38MatematicasDoc.cpython-38.pyc create mode 100644 ejercicios/__pycache__/MatematicasDoc.cpython-38.pyc create mode 100644 ejercicios/a sobre b mas uno.png create mode 100644 ejercicios/contador.txt create mode 100644 ejercicios/exprecionMat2.png create mode 100644 ejercicios/formula eje 7.png create mode 100644 ejercicios/intercambio.png create mode 100644 ejercicios/listas/__init__.py create mode 100644 ejercicios/listas/__pycache__/__init__.cpython-38.pyc create mode 100644 ejercicios/listas/__pycache__/operaciones.cpython-38.pyc create mode 100644 ejercicios/listas/operaciones.py create mode 100644 ejercicios/matematicasLambda/__init__.py create mode 100644 ejercicios/matematicasLambda/__pycache__/__init__.cpython-38.pyc create mode 100644 ejercicios/matematicasLambda/__pycache__/basicas.cpython-38.pyc create mode 100644 ejercicios/matematicasLambda/basicas.py create mode 100644 ejercicios/texto/__init__.py create mode 100644 ejercicios/texto/__pycache__/__init__.cpython-38.pyc create mode 100644 ejercicios/texto/__pycache__/reordenar.cpython-38.pyc create mode 100644 ejercicios/texto/reordenar.py create mode 100644 formula.png create mode 100644 imagenes/Python_logo.jpg create mode 100644 imagenes/banner_python.jpg create mode 100644 imagenes/busqueda secuencial.gif create mode 100644 imagenes/diferencia simetrica.jpg create mode 100644 imagenes/diferencia.png create mode 100644 imagenes/disconexos.png create mode 100644 imagenes/factorial.png create mode 100644 imagenes/fibonacci.png create mode 100644 imagenes/interseccion.png create mode 100644 imagenes/subconjunto.png create mode 100644 imagenes/union.png create mode 100644 matematicas/__init__.py create mode 100644 matematicas/__pycache__/__init__.cpython-38.pyc create mode 100644 matematicas/__pycache__/basicas.cpython-38.pyc create mode 100644 matematicas/__pycache__/exponentes.cpython-38.pyc create mode 100644 matematicas/basicas.py create mode 100644 matematicas/exponentes.py create mode 100644 modulos/08-maximo.py create mode 100644 modulos/__pycache__/humano.cpython-38.pyc create mode 100644 modulos/__pycache__/matematicas.cpython-38.pyc create mode 100644 modulos/busquedas.py create mode 100644 modulos/matematicas.py create mode 100644 operadores/operadores comparacion.png create mode 100644 salida.txt create mode 100644 trabajo.py create mode 100644 trabajo2.py diff --git a/00-zen.py b/00-zen.py new file mode 100644 index 0000000..9839e63 --- /dev/null +++ b/00-zen.py @@ -0,0 +1 @@ +import this \ No newline at end of file diff --git a/01-hola.py b/01-hola.py new file mode 100644 index 0000000..5796264 --- /dev/null +++ b/01-hola.py @@ -0,0 +1,2 @@ +print ("Hola mundo en Python 🐍") +print ("Hola mundo en Python") diff --git a/02-tipos_datos.py b/02-tipos_datos.py new file mode 100644 index 0000000..58d5d91 --- /dev/null +++ b/02-tipos_datos.py @@ -0,0 +1,31 @@ +''' +Una variable es un espacio en memoria que puede almacenar algún tipo de dato: + Número + Coma flotante + Texto + Booleano: Falso o Verdadero +Además vamos a aprender el tipado dinámico. +''' +# Declaramos e imprimimos una variable de tipo numero y su tipo +numero = 10 +print(numero) +print(type(numero)) +print("-------------") +# Declaramos e imprimimos una variable y su tipo +numero_flotante = 10.25 +print(numero_flotante) +print(type(numero_flotante)) +print("-------------") +texto = "Hola mundo en Python 🐍" +print (texto) +print(type(texto)) +print("-------------") +booleano = True +print (booleano) +print(type(booleano)) +print("-------------") +suma = numero + numero_flotante +print(suma) +print(type(suma)) +print("-------------") + diff --git a/03-operadores_aritmeticos.py b/03-operadores_aritmeticos.py new file mode 100644 index 0000000..fe3f98a --- /dev/null +++ b/03-operadores_aritmeticos.py @@ -0,0 +1,38 @@ +num1 = 5 +num2 = 3 +# Operador suma +resultado = num1+num2 +print("La suma es: ", resultado) +# Operador resta +resultado = num1-num2 +print("La resta es: ", resultado) +# Operador multiplicación +resultado = num1*num2 +print("La multiplicación es: ", resultado) +# Operador división +resultado = num1/num2 +print("La división es: ", resultado) +# Operador división parte entera +resultado = num1//num2 +print("La división entera es: ", resultado) +# Operador módulo +resultado = num1 % num2 +print("El modulo es: ", resultado) +# Operador exponente +resultado = num1**num2 +print("El exponente es: ",resultado) +# Operación +resultado=3**3*(13/(5*8)) +# resultado = 3**3*(20.8) +#r1 = ((13/5)*8) +#r2 = 3**3*20.8 +# 3**3*0.325 +# 27*0.325 = 8.75 + +# 3**3*20.8 +# 561.6 + + +#print("El resultado es: ",r1) +#print("El resultado es: ",r2) +print("El resultado es: ",resultado) \ No newline at end of file diff --git a/04-operador_relacionales.py b/04-operador_relacionales.py new file mode 100644 index 0000000..341ecfd --- /dev/null +++ b/04-operador_relacionales.py @@ -0,0 +1,24 @@ +num1 = 10 +num2 = 20 +num3 = 30 +resultado = num1num2 +print(num1, "es > que ", num2, ":", resultado) +# 10 es > que 20: False +resultado = num1==num2 +print(num1, "es == que ",num2, ":", resultado) +# 10 es = que 20: Flase +resultado = num1<=num2 +print(num1, "es <= que ",num2, ":", resultado) +# 10 es <= 20: True +resultado = num1>=num2 +print(num1, "es >= que ", num2, ":", resultado) +# 10 es >= 20: Flase +resultado = num1!=num2 +print(num1, "es != que ", num2, ":", resultado) +# 10 es >= 20: True +resultado = num1+num2==num3 +print(num1+num2, "es == que ", num3,":", resultado) +# 30 es == que 30: True \ No newline at end of file diff --git a/05-operdor_logico.py b/05-operdor_logico.py new file mode 100644 index 0000000..c0e8bda --- /dev/null +++ b/05-operdor_logico.py @@ -0,0 +1,39 @@ +''' +AND +0 0 = 0 +1 0 = 0 +0 1 = 0 +1 1 = 1 + +OR +0 0 = 0 +1 0 = 1 +0 1 = 1 +1 1 = 1 + +NOT +0 = 1 +1 = 0 +''' +imc = 26 +if imc > 19.9 or imc <= 25: + print("Su peso es normal") + +a = 10 +b = 15 +c = 20 +resultado = ((ab) and (bb, " and ", bb) or (bb, " or ", b= 0 and edad < 100: +#if 0 <= edad < 120: +if edad >= 0 and edad <= 150: + if edad >= 18: + print("El es mayor de edad", edad) + else: + print("El es menor de edad", edad) +else: + print("Edad incorrecta") + +# Ejercicios del 6 al 12 \ No newline at end of file diff --git a/12-listas.py b/12-listas.py new file mode 100644 index 0000000..6b3cb4c --- /dev/null +++ b/12-listas.py @@ -0,0 +1,21 @@ +''' +Primer elemento +Último elemento +Un elemento que no está en la lista. +Rango del primero al tercero. +Rango del tercero al último. +''' +lista = ["Enero", "Febrero", "Marzo", "Abril", 1, 2, 3.33, [4, 5, 6]] +print(lista) +print(lista[1]) +# print("Primer elemento:", lista[0]) +# print("Tercer elemento:", lista[2]) +# print("Último elemento:", lista[-1]) +# #print("Un elemento que no está en la lista:",lista[9]) +# print("Rango del primero al tercero:", lista[:3]) +# print("Rango del tercero al último:", lista[3:]) +# print("Imprimir desde el último elemento al primero", lista[::-1]) +# lista[3] = "Noviembre" +# print(lista) + + diff --git a/13-listas_metodos.py b/13-listas_metodos.py new file mode 100644 index 0000000..b6a1d80 --- /dev/null +++ b/13-listas_metodos.py @@ -0,0 +1,30 @@ +lista = [1, 1, 2, 3] +#lista[0] = "Enero" +print(lista) +print("len(lista)=", len(lista)) +lista.append(4) +print("list.append(4)=", lista) +lista.insert(0,0) +print("list.insert(0,0)=", lista) +lista.extend([5, 6, 7]) +print("list.extend([5,6,7])=", lista) # [0, 1, 1, 2, 3, 4, 5, 6, 7] +lista += [8,9,10] +print("list+=[8,9,10]=", lista) +num = 5 +if num in lista: + print(f"El numero {num} si esta en la lista") +else: + print(f"El numero {num} no esta en la lista") +print("lista.index(5)=", lista.index(5)) +print("lista.count(1)=", lista.count(1)) +i = 3 +lista.pop(i) +print("lista.pop(0)=", lista) +lista.remove(5) +print("lista.remove(5)=", lista) +lista.reverse() +print("lista.reverse()=", lista) +lista.sort() +print("lista.sort()=", lista) +lista.clear() +print("lista.clear()=", lista) \ No newline at end of file diff --git a/14-tuplas.py b/14-tuplas.py new file mode 100644 index 0000000..a39dd3a --- /dev/null +++ b/14-tuplas.py @@ -0,0 +1,16 @@ +tupla = (1, 2, 3, "Hola", "mundo") +#tupla.append(5) +#tupla[1] = 5 +print(tupla) +print("tupla[1]=", tupla[1]) +print("tupla[0:3]=", tupla[0:3]) +print("3 in tupla=", 3 in tupla) +print("tupla.index(0)=", tupla.index("Hola")) +print("tupla.count(0)=", tupla.count(1)) +print("len(tupla)=", len(tupla)) + +lista = list(tupla) +print(lista) +tupla2 = tuple(lista) +print(tupla2) +# Tuplas diff --git a/15-set.py b/15-set.py new file mode 100644 index 0000000..3a3addf --- /dev/null +++ b/15-set.py @@ -0,0 +1,9 @@ +conjuntos = set() +conjuntos = {1, 2, 3, "Hola", "mundo", 1, 2, 3} +print(conjuntos) +#conjuntos.append(5) +conjuntos.add(5) +print(conjuntos) +print("3 in conjuntos=", 3 in conjuntos) +conjuntos.discard(1) +print("conjuntos.discard(1)=", conjuntos) \ No newline at end of file diff --git a/15-set2.py b/15-set2.py new file mode 100644 index 0000000..264e778 --- /dev/null +++ b/15-set2.py @@ -0,0 +1,30 @@ +#set es una colección sin orden y sin índices, no permite elementos repetidos +#y los elementos no se pueden modificar, pero si agregar nuevos o eliminar +planetas = { + "Marte", + "Júpiter", + "Venus" +} +print(planetas) +#longitud +print(len(planetas)) +#revisar si un elemento está presente +print("Marte" in planetas) +#agregar +planetas.add("Tierra") +print(planetas) +planetas.add("Tierra")#no se pueden agregar elementos duplicados +print(planetas) +#eliminar con remove posiblemente arroja excepción +planetas.remove("Tierra") +print(planetas) +#descarta con discard no arroja excepción +planetas.discard("Júpiter") +print(planetas) +#limpiar el set +planetas.clear() +print(planetas) +#eliminar el set +del planetas +#print(planetas) + diff --git a/16-teoria_conjuntos.py b/16-teoria_conjuntos.py new file mode 100644 index 0000000..6c59c95 --- /dev/null +++ b/16-teoria_conjuntos.py @@ -0,0 +1,19 @@ +a = {1, 2, 3, 4} +b = {4, 5, 6, 7} +d = {1, 2, 3, 4, 5, 6} +e = {11, 12, 13, 14, 15, 16} +print("a==b:", a==b) +c = a|b +print("c=a|b=", c) +c = a&b +print("c=a&b=", c) +c = a-b +print("c=a-b=", c) +c = a^b +print("c=a^b=", c) +print("a.issubset(d)=", a.issubset(d)) +print("d.issubset(a)=", d.issubset(a)) +print("d.issubset(a)=", d.issuperset(a)) +print("a.isdisjoint(e)=", a.isdisjoint(e)) +f = frozenset({1, 2, 3}) +#f.add(2) \ No newline at end of file diff --git a/17-diccionario.py b/17-diccionario.py new file mode 100644 index 0000000..23f286a --- /dev/null +++ b/17-diccionario.py @@ -0,0 +1,22 @@ +diccionario = { + 1: "Python", + 2: "Java", + 3: "Javascript", + 4: (1, 3) +} +print(diccionario) +print('len(diccionario)=', len(diccionario)) +print("diccionario['Python']=", diccionario[3]) +print(diccionario) + +print("diccionario['c++']=4=", diccionario) +diccionario[5] = "C++" +print("diccionario['c++']=5=", diccionario) +# del(diccionario['c++']) +# print("del(diccionario['c++'])=", diccionario) +# diccionario['c/c++'] = [4,5] +# print("diccionario['c/c++']=[4,5]=", diccionario) +# #diccionario['c/c++'] = (4,5) +# #print("diccionario['c/c++']=(4,5)=", diccionario) +# diccionario['otros'] = {100,101,102} +# print("diccionario['otros']={100,101,102}=", diccionario) diff --git a/17-diccionario_ej.py b/17-diccionario_ej.py new file mode 100644 index 0000000..c9c1ce0 --- /dev/null +++ b/17-diccionario_ej.py @@ -0,0 +1,44 @@ +#un diccionario está compuesto de llave,valor (key,value) +diccionario = { + "IDE": "Integrated Development Environment", + "OOP": "Object Oriented Programming", + "DBMS": "Database Management System" +} +print(diccionario) +#longitud +print(len(diccionario)) +#accediendo a un elemento +print(diccionario["OOP"]) +#otra forma, mismo resultado +print(diccionario.get("OOP")) +#modificando valores +diccionario["IDE"] = "Integrated development environment" +print(diccionario) +#iterar +for termino in diccionario: + print(termino) + +for termino in diccionario: + print(diccionario[termino]) + +for valor in diccionario.values(): + print(valor) + +#comprobando existencia de un elemento +print("IDE" in diccionario) + +#agregar nuevos elementos +diccionario["PK"] = "Primary Key" +print (diccionario) + +#remover elementos +diccionario.pop("DBMS") +print(diccionario) + +#limpiar +diccionario.clear() +print(diccionario) + +#eliminar por completo +#del diccionario +#print(diccionario) diff --git a/18-diccionario2.py b/18-diccionario2.py new file mode 100644 index 0000000..9941897 --- /dev/null +++ b/18-diccionario2.py @@ -0,0 +1,41 @@ +alumnos={ + 1:["Eugenio", "Chaparro"], + 2:["Maria", "Martinez"], + 3:["Pepe", "Fernández"] +} +''' +print(alumnos[1]) +print(alumnos[2]) +print(alumnos[3]) +print(alumnos[4]) +''' +if 1 in alumnos: + print(alumnos[1]) +else: + print("Alumno 1 no existe") +if 2 in alumnos: + print(alumnos[2]) +else: + print("Alumno 2 no existe") +if 3 in alumnos: + print(alumnos[3]) +else: + print("Alumno 3 no existe") +if 4 in alumnos: + print(alumnos[4]) +else: + print("Alumno 4 no existe") +''' +print(alumnos.get(1,"Alumno 1 no existe")) +print(alumnos.get(2,"Alumno 2 no existe")) +print(alumnos.get(3,"Alumno 3 no existe")) +print(alumnos.get(4,"Alumno 4 no existe")) +''' +print(alumnos.keys()) +print(alumnos.values()) +print(alumnos.items()) +print(alumnos) +alumnos.clear() +print(alumnos) + +# Ejercicio 13 \ No newline at end of file diff --git a/19-pilas.py b/19-pilas.py new file mode 100644 index 0000000..49ec883 --- /dev/null +++ b/19-pilas.py @@ -0,0 +1,16 @@ +pila = [] +print("ENTRADA") +pila.append('T') +print('T') +pila.append('E') +print('E') +pila.append('C') +print('C') + +print("SALIDA") +n = pila.pop() +print(n) +n = pila.pop() +print(n) +n = pila.pop() +print(n) \ No newline at end of file diff --git a/20-colas.py b/20-colas.py new file mode 100644 index 0000000..ab46710 --- /dev/null +++ b/20-colas.py @@ -0,0 +1,26 @@ +cola = [] +print("ENTRADA") +cola.append("Juan") +print("Llego:", cola[-1]) +cola.append("Alejandra") +print("Llego:", cola[-1]) +cola.append("Maria") +print("Llego:", cola[-1]) +cola.append("Mario") +print("Llego:", cola[-1]) +cola.append("Pepe") +print("Llego:", cola[-1]) +print("SALIDA") +atendido = cola.pop(0) +print("Se atendio a:", atendido) +atendido = cola.pop(0) +print("Se atendio a:", atendido) +atendido = cola.pop(0) +print("Se atendio a:", atendido) +atendido = cola.pop(0) +print("Se atendio a:",atendido) +atendido = cola.pop(0) +print("Se atendio a:", atendido) +print(cola) + +# Ejercicio del 14 al 17 \ No newline at end of file diff --git a/21-while.py b/21-while.py new file mode 100644 index 0000000..9f5917c --- /dev/null +++ b/21-while.py @@ -0,0 +1,8 @@ +contador = 1 + +while contador <= 10: + print("Contador: ", contador) + contador += 1 +print("Fin del ciclo") + +# Ejericio 18 \ No newline at end of file diff --git a/22-while_true.py b/22-while_true.py new file mode 100644 index 0000000..c29b1ca --- /dev/null +++ b/22-while_true.py @@ -0,0 +1,16 @@ +#Con do while + +while True: + letra = input("Usuario digita la letra 'a': ") + if letra == 'a': + break + else: + print("Incorrecto, se digitó una letra diferente a la letra 'a'") +print("Correcto, se digitó la letra 'a'") +''' +#Con while +letra = input("Usuario digita la letra 'a': ") +while letra == 'a': + letra = input("Usuario digita la letra 'a': ") +print("Usuario digitaste una letra diferente a 'a'") +''' \ No newline at end of file diff --git a/23-for.py b/23-for.py new file mode 100644 index 0000000..f09eaf4 --- /dev/null +++ b/23-for.py @@ -0,0 +1,35 @@ +numeros = [1, 2, 34, 35] +for numero in numeros[:2]: + print("Las numeros son:", numero) + +#for numero in range(10, 0, -1): # range(inicio, final) +# print("Número: ", numero) + + +#for n in range(1, 6): +# c = n**2 +# print("Número: ", n, "Cuadrado del número: ", c) + + +for i in range(5): + print("Numero:", i) + +for i in [5,6,7]: + print("Numero:", i) + +for i in (5,6,7): + print("Numero:", i) + +diccionario = {"Python":1, "Java":2, "JavaScript":3} +for lenguaje in diccionario: + print(f"{lenguaje} -> {diccionario[lenguaje]} ") + +for clave,valor in {"Python":1, "Java":2, "JavaScript":3}.items(): + print(f"{clave} -> {valor}") + +texto = "programador" +for letra in texto: + print("Dame una:", letra) +print("Como dice:", texto) + +# Ejercicio 19 al 28 \ No newline at end of file diff --git a/24-funcion_kwargs.py b/24-funcion_kwargs.py new file mode 100644 index 0000000..efe7934 --- /dev/null +++ b/24-funcion_kwargs.py @@ -0,0 +1,9 @@ +def suma(**kwargs): + suma = 0 + for key, value in kwargs.items(): + print(key, value) + suma += value + return suma + +resultado = suma(a=5, b=20, c=23, d=50, e=100) +print("El resultado es:", resultado) \ No newline at end of file diff --git a/24-funciones.py b/24-funciones.py new file mode 100644 index 0000000..5090f71 --- /dev/null +++ b/24-funciones.py @@ -0,0 +1,40 @@ +def bienvenida(mensaje): + print(mensaje) + +bienvenida("Bienvenido al curso de Python") + +def multiplicacion(numero1: float, numero2: float): + resultado = numero1 * numero2 + return resultado + +mult = multiplicacion(14.8, 4.8) +print(mult) + +""" +def suma(n1, n2): + res = n1 + n2 + return res +def resta(n1, n2): + res = n1 - n2 + return res + +#print("Hola desde la funcion print soy un parametro") +num1 = 10 +num2 = 50 +while True: + print(f"Selecciona que deseas hacer con estos números {num1} y {num2}:\n\ +1.-Sumar\n\ +2.-Restar\n\ +3.-Salir") + opcion=input() + if opcion == '1': + res = suma(num1, num2) + print(f"El resultado es:{res} tipo:{type(res)}") + elif opcion == '2': + res = resta(num1, num2) + print(f"El resultado es:{res} tipo:{type(res)}") + elif opcion == '3': + break + else: + print("Elije un número de las opciones") +""" diff --git a/24-funciones2.py b/24-funciones2.py new file mode 100644 index 0000000..daecf9e --- /dev/null +++ b/24-funciones2.py @@ -0,0 +1,33 @@ +# def bienvenida(nombre): +# mensaje = f"Bienvenido {nombre}" +# return mensaje + +# texto = bienvenida("David") +# print(texto) + +# def suma(a: float, b: float): +# resultado = a + b +# return resultado + +# resultado_suma = suma(67.8, 86.7) +# print(resultado_suma) + +def area_circulo(r: float, pi=3.14): + """ + Función que calcula el área de un circulo. Recibe + como parámetro de entrada el radio y el valor de pi + que por defecto es 3.14. + """ + resultado = pi*(r**2) + return resultado + +circulo = area_circulo(8.7) +print(circulo) + +help(area_circulo) + +# resultado_suma = suma(3, 3) +# print("El resultado es:", resultado_suma) + + + diff --git a/25-parametros_funciones.py b/25-parametros_funciones.py new file mode 100644 index 0000000..74f8ae5 --- /dev/null +++ b/25-parametros_funciones.py @@ -0,0 +1,32 @@ +''' +#Parámetro con valor por defecto. +def parametrosDefecto(n1, n2=20): + print(f"n1={n1} y n2={n2}") +#parametrosDefecto(10,15) +parametrosDefecto(10) + +#Orden de los parámetros. +def parametrosOrden(n1,n2,n3=30): + print(f"n1={n1},n2={n2},n3={n3}") +#parametrosOrden(10,20,40) +parametrosOrden(n3=50,n2=40,n1=5) + +#Enviar una lista como parámetro. +def listaParametro(numeros): + cont=1 + for n in numeros: + print(f"n{cont}={n}") + cont+=1 +listaParametro([1,2.2,"Hola"]) + +#Enviar un diccionario como parámetro. +def parametroDiccionario(numeros): + print(numeros) + print(f"n1={numeros['n1']} , n2={numeros['n2']}") +parametroDiccionario({'n1':1,'n2':2}) +''' +#Enviar un diccionario como parámetro. +def parametroDiccionario2(**numeros): + print(numeros) + print(f"n1={numeros['n1']} , n2={numeros['n2']}") +parametroDiccionario2(n1=1, n2=2) \ No newline at end of file diff --git a/26-multiples_parametros.py b/26-multiples_parametros.py new file mode 100644 index 0000000..8698026 --- /dev/null +++ b/26-multiples_parametros.py @@ -0,0 +1,26 @@ +''' +#Que es la asignación simultánea de valores. +#a=5 +#b=10 +#c=15 +a,b,c=10,15,20 +print(f"a={a},b={b},c={c}") +''' +''' +#Funciones que retornan valores simultáneos. +def retornaValoresSimultaneos(a,b,c): + return a+b,c +#d,f=retornaValoresSimultaneos(4,5,6) +#print(f"d={d},f={f}") +t=retornaValoresSimultaneos(4,5,6) +print(t) +print(f"t[0]={t[0]},t[1]={t[1]}") +''' +#Funciones que admiten indeterminada cantidad de valores. +def admiteIndeterminadaParametros(*args): + suma = 0 + for i in args: + print(f"{i}",end="+") + suma = suma+i + print(f"\nSuma={suma}") +admiteIndeterminadaParametros(4,5,6,7,8,9,10,11,12) \ No newline at end of file diff --git a/27-burbuja.py b/27-burbuja.py new file mode 100644 index 0000000..7a07942 --- /dev/null +++ b/27-burbuja.py @@ -0,0 +1,40 @@ +def pedirDatos(): + lista = [] + while True: + n = int(input("Ingresa el numero que quieras (0 para terminar):")) + if n == 0: + return lista + else: + lista.append(n) + return lista + +def burbuja(lista): + cont = 0 + ordenado = False + tamano = len(lista) + comparaciones = tamano + for _ in range(0,tamano): + if ordenado == True: + break + for j in range(0,comparaciones-1): + ordenado = True + cont = cont+1 + if lista[j]>lista[j+1]: + ordenado = False + aux=lista[j] + lista[j] = lista[j+1] + lista[j+1] = aux + comparaciones = comparaciones-1 + return lista,cont +def mostrarLista(lista,cont): + tam = len(lista) + print(f"Lista ordenada en {cont} ciclos de forma acendente:") + for i in range(0,tam): + print(f"{lista[i]}") + print(f"Lista ordenada en {cont} ciclos de forma desendente:") + for i in range(tam,0,-1): + print(f"{lista[i-1]}") + +lista = pedirDatos() +lista, cont = burbuja(lista) +mostrarLista(lista, cont) \ No newline at end of file diff --git a/28-orden_insercion.py b/28-orden_insercion.py new file mode 100644 index 0000000..ea7b234 --- /dev/null +++ b/28-orden_insercion.py @@ -0,0 +1,28 @@ +def insertarNumero(): + lista=[] + while True: + n=int(input("Por favor ingresa un número (0 terminar):")) + if n==0: + return lista + else: + lista.append(n) +def ordenPorInsercion(lista): + pos=0 + i=0 + aux=0 + for _ in lista: + pos=i + aux=lista[i] + while pos>0 and lista[pos-1]>aux: + lista[pos]=lista[pos-1] + pos=pos-1 + lista[pos]=aux + i=i+1 + return lista +def mostrarLista(lista): + for numero in lista: + print(numero) +lista=insertarNumero() +lista=ordenPorInsercion(lista) +print("Lista ordenada por inserción") +mostrarLista(lista) \ No newline at end of file diff --git a/29-orden_seleccion.py b/29-orden_seleccion.py new file mode 100644 index 0000000..49adfd9 --- /dev/null +++ b/29-orden_seleccion.py @@ -0,0 +1,27 @@ +def insertarNumero(): + lista=[] + while True: + n=int(input("Por favor ingresa un número (0 terminar):")) + if n==0: + return lista + else: + lista.append(n) +def ordenPorSeleccion(lista): + tamaño=len(lista) + for i in range(0,tamaño): + min=i + for j in range(i+1,tamaño): + if lista[min]>lista[j]: + min=j + aux=lista[i] + lista[i]=lista[min] + lista[min]=aux + return lista +def mostrarLista(lista): + for numero in lista: + print(numero) + +lista=insertarNumero() +ordenPorSeleccion(lista) +print("Números ordenados:") +mostrarLista(lista) \ No newline at end of file diff --git a/30-busqueda_secuencial.py b/30-busqueda_secuencial.py new file mode 100644 index 0000000..c598797 --- /dev/null +++ b/30-busqueda_secuencial.py @@ -0,0 +1,11 @@ +import modulos.humano as humus +import modulos.busquedas as busquedas +lista=[1,2,3,4,5] +while True: + num=humus.pedirNumero(lista) + encontrado=busquedas.busquedaSecuencia(lista,num) + if encontrado==True: + print("Felicidades has colocado ún numero de la lista") + break + else: + print("Inténtalo de nuevo:") \ No newline at end of file diff --git a/31-busqueda_binaria.py b/31-busqueda_binaria.py new file mode 100644 index 0000000..442575c --- /dev/null +++ b/31-busqueda_binaria.py @@ -0,0 +1,11 @@ +import modulos.humano as humus +import modulos.busquedas as busquedas +lista=[1,2,3,4,5,6,7,8,9,10] +while True: + num=humus.pedirNumero(lista) + encontrado=busquedas.busquedaBinaria(lista,num) + if encontrado==True: + print("Felicidades el número ingresado esta en la lista") + break + else: + print("El número no esta en la lista intentalo de nuevo:") diff --git a/32-operaciones_mat.py b/32-operaciones_mat.py new file mode 100644 index 0000000..4f4c265 --- /dev/null +++ b/32-operaciones_mat.py @@ -0,0 +1,3 @@ +import modulos.matematicas as mate +mate.suma(5,6) +mate.resta(6,5) \ No newline at end of file diff --git a/33-operaciones_mat2.py b/33-operaciones_mat2.py new file mode 100644 index 0000000..ef0bfe9 --- /dev/null +++ b/33-operaciones_mat2.py @@ -0,0 +1,8 @@ +import matematicas.basicas as basicas +from matematicas.basicas import suma +from matematicas.basicas import mul +import matematicas.exponentes as ex +basicas.suma(5,6) +suma(7,8) +mul(3,3) +ex.exponente(5,3) \ No newline at end of file diff --git a/34-variables_locales_globales.py b/34-variables_locales_globales.py new file mode 100644 index 0000000..0df578d --- /dev/null +++ b/34-variables_locales_globales.py @@ -0,0 +1,22 @@ +''' +def funcionUno(): + miVariable="Hola desde funcionUno" + miVariable=miVariablePrincipal + miVariablefuncionUno="miVariablefuncionUno" + print(miVariable) +def funcionDos(): + miVariable="Hola desde funcionDos" + print(miVariable) +miVariable="Hola desde principal" +miVariablePrincipal="Estoy en principal" +miVariablefuncionUno="" +funcionUno() +funcionDos() +print(miVariablefuncionUno) +''' +def funcionUno(): + global miVariable + miVariable="Hola desde funcionUno" +miVariable="Estoy en principal" +funcionUno() +print(miVariable) \ No newline at end of file diff --git a/35-lambda.py b/35-lambda.py new file mode 100644 index 0000000..15d39be --- /dev/null +++ b/35-lambda.py @@ -0,0 +1,28 @@ +''' +def suma(a,b): + return a+b +aliasSuma=suma +res=aliasSuma(5,6) +print(res) +''' +''' +suma=lambda a,b: a+b +res=suma(5,6) +print(res) +''' +''' +quitaEspacios=lambda texto: texto.replace(" ","") +res=quitaEspacios("Hola mundo") +print(res) +''' +''' +noParametros=lambda : 10+10 +res=noParametros() +print(res) +''' +noParametrosnoRetorna=lambda : print("Hola mundo") +res=noParametrosnoRetorna() +print(res) + +def noParametrosnoRetorna1(): + print("Hola mundo") \ No newline at end of file diff --git a/36-funciones_anidadas.py b/36-funciones_anidadas.py new file mode 100644 index 0000000..aa7dab1 --- /dev/null +++ b/36-funciones_anidadas.py @@ -0,0 +1,13 @@ +def divicion(a,b): + def validar(): + if a>0 and b>0: + return True + else: + return False + print(validar()) + if validar()==True: + return a/b + else: + return None +resultado=divicion(0,0) +print(resultado) diff --git a/37-closure.py b/37-closure.py new file mode 100644 index 0000000..61511eb --- /dev/null +++ b/37-closure.py @@ -0,0 +1,18 @@ +''' +def closure(parametro): + def funcionAretornar(): + return parametro+1 + return funcionAretornar +resibeFuncion=closure(5) +resultado=resibeFuncion() +print(resultado) +''' +def closureValidador(a,b): + def validar(): + if a>0 and b>0: + return True + else: + return False + return validar +validado=closureValidador(0,1) +print(validado()) \ No newline at end of file diff --git a/38-decoradores.py b/38-decoradores.py new file mode 100644 index 0000000..1caef3f --- /dev/null +++ b/38-decoradores.py @@ -0,0 +1,23 @@ +def A(parametro=True): + def _A(B): + def antes(): + print("************") + def despues(): + print("************") + def C(*args): + if parametro==True: + antes() + res=B(*args) + if parametro==True: + despues() + return res + return C + return _A + +@A(True) +def B(a,b): + print(f"Hola mundo a={a} b={b}") + return a+b + +res=B(5,6) +print(res) diff --git a/39-generador.py b/39-generador.py new file mode 100644 index 0000000..1119b19 --- /dev/null +++ b/39-generador.py @@ -0,0 +1,22 @@ +''' +for i in range(0,5): + print(i) + +def miRango(ini,fin): + for i in range(ini,fin): + if i%2==0: + yield i*2,True + else: + yield i*2,False + +for i in miRango(0,5): + print(i) +''' +def comofuncionaGenerador(): + print("Hola") + yield "Adios" + print("Hola de nuevo") + yield "Adios otra vez" +print(type(comofuncionaGenerador())) +res=list(comofuncionaGenerador()) +print(res) \ No newline at end of file diff --git a/40-continue_pass_else.py b/40-continue_pass_else.py new file mode 100644 index 0000000..eab62ca --- /dev/null +++ b/40-continue_pass_else.py @@ -0,0 +1,43 @@ +''' +#continue +for letra in "Programador Novato": + if letra==" ": + continue + print(letra,end="") +print() + +var=10 +while var>0: + var=var-1 + if var==5: + continue + print(var) + +#pass +for letra in "Programador Novato": + if letra==" ": + pass + print(letra,end="") +print() + +var=10 +while var>0: + var=var-1 + if var==5: + pass + print(var) + +def funcionQueaunNoSeQueVaHacer(): + pass +funcionQueaunNoSeQueVaHacer() +''' +email=input("Ingresa un email:") +i=0 +while i0: + res=a/b +else: + print("b debe ser mayor a 0") +''' diff --git a/44-poo.py b/44-poo.py new file mode 100644 index 0000000..50dde27 --- /dev/null +++ b/44-poo.py @@ -0,0 +1,70 @@ +class Auto: + #Atributos publicos + encendido = False + velocidad = 0 + _alto = 1.5 + _ancho = 2.3 + _velocidadMaxima = 100 + + #Atributos privados + #Metodos publicos + def __init__(self,llave,color,modelo,marca): + self.__llave = llave + self.color = color + self.modelo = modelo + self.marca = marca + + def encender(self,llave): + if self.__llave == llave: + self.encendido = True + print("El auto esta encendido") + else: + print("Esa no es la llave") + def acelera(self): + if self.encendido == True: + if self.velocidad0: + self.velocidad = self.velocidad-10 + self.__enciendeLuzFreno() + def apaga(self): + if self.encendido == True: + self.encendido = False + self.velocidad = 0 + self.corneta(True) + #Metodos privados + def __enciendeLuzFreno(self): + print("Luz del freno encendida") + @staticmethod + def corneta(precionar=False): + if precionar == True: + print("La corneta suena") + else: + print("La corneta no suena") + @classmethod + def canasta(cls, peso): + pesoMax=cls._ancho*10 + if peso + +## Enlaces de interés +- [Web oficial de Python](https://www.python.org/) +- [Tutorial oficial de Python en Español](https://docs.python.org/es/3/tutorial/index.html) +- [El libro de Python](https://ellibrodepython.com/) +- [Recursos para el desarrollo con Python](https://learn.microsoft.com/es-es/windows/python/resources) +- [Python para todos PY4E](https://es.py4e.com/lessons) +- [Repositorio 30 días de Python](https://github.com/Asabeneh/30-Days-Of-Python) + +## Slides +- [Presentación](https://slides.com/davidbcaro/python-55ddbb) + +## Libros de Python +- [Python para todos](https://do1.dr-chuck.com/pythonlearn/ES_es/pythonlearn.pdf) +- [Repositorio con lista de libros de Python gratuitos](https://github.com/pamoroso/free-python-books) + +## Proyectos en Python +- [Repositorio con proyectos en Python](https://github.com/geekcomputers/Python) + +## Editores de Python online +- [Replit](https://replit.com/new/python3) +- [Programiz](https://www.programiz.com/python-programming/online-compiler/) +- [W3Schools](https://www.w3schools.com/python/python_compiler.asp) +- [Online Python](https://www.online-python.com/) + +## Ruta como desarrollador Python +- [Roadmap](https://roadmap.sh/python) + diff --git a/archivo.txt b/archivo.txt new file mode 100644 index 0000000..54a77ca --- /dev/null +++ b/archivo.txt @@ -0,0 +1,8 @@ +Tres tristes tigres +tragaban trigo +en tres tristes trastos +sentados tras un trigal. +Sentados tras un trigal, +en tres tristes trastos +tragaban trigo +tres tristes tigres. \ No newline at end of file diff --git a/archivos/archivo.txt b/archivos/archivo.txt new file mode 100644 index 0000000..fb8112d --- /dev/null +++ b/archivos/archivo.txt @@ -0,0 +1,2 @@ +Calculo +Fisica Frances \ No newline at end of file diff --git a/archivos/hola.txt b/archivos/hola.txt new file mode 100644 index 0000000..a472b5f --- /dev/null +++ b/archivos/hola.txt @@ -0,0 +1,3 @@ +Python +Java +C++ \ No newline at end of file diff --git a/archivos/hola2.txt b/archivos/hola2.txt new file mode 100644 index 0000000..7432260 --- /dev/null +++ b/archivos/hola2.txt @@ -0,0 +1,3 @@ +C# +VB.NET +ASP.NET \ No newline at end of file diff --git a/archivos/hola3.txt b/archivos/hola3.txt new file mode 100644 index 0000000..d6ff531 --- /dev/null +++ b/archivos/hola3.txt @@ -0,0 +1,3 @@ +Hola +Como +Estas \ No newline at end of file diff --git a/archivos/personas.txt b/archivos/personas.txt new file mode 100644 index 0000000..c222a07 --- /dev/null +++ b/archivos/personas.txt @@ -0,0 +1,4 @@ +1;Carlos;Pérez;05/01/1989 +2;Manuel;Heredia;26/12/1973 +3;Rosa;Campos;12/06/1961 +4;David;García;25/07/2006 \ No newline at end of file diff --git a/ejercicios/01-operacionesAritmeticas.py b/ejercicios/01-operacionesAritmeticas.py new file mode 100644 index 0000000..3eea23d --- /dev/null +++ b/ejercicios/01-operacionesAritmeticas.py @@ -0,0 +1,18 @@ +''' +Declarar múltiples variables. +Pedir al usuario que ingrese el valor de 2 variables +Realizar varias operaciones aritméticas (Suma,Resta, Division y Multiplicacion). +Mostrar el resultado en consola con print. +''' +n1 = float(input("Ingresa el numero 1: ")) +n2 = float(input("Ingresa el numero 2: ")) +suma = n1+n2 +resta = n1-n2 +mul = n1*n2 +div = n1/n2 +divEntera = n1//n2 +print(f"Suma={suma}") +print(f"Resta={resta}") +print(f"Multiplicacion={mul}") +print(f"Divicion={div}") +print(f"Divicion entera={divEntera}") diff --git a/ejercicios/02-exprecionMatematicaCodigo.py b/ejercicios/02-exprecionMatematicaCodigo.py new file mode 100644 index 0000000..dd6a6a8 --- /dev/null +++ b/ejercicios/02-exprecionMatematicaCodigo.py @@ -0,0 +1,4 @@ +a = float(input("Ingresa el valor de a:")) +b = float(input("Ingresa el valor de b:")) +res = a/b+1 +print(f"El resultado es:{res:,.2f}") \ No newline at end of file diff --git a/ejercicios/03-exprecionMatematica2daParete.py b/ejercicios/03-exprecionMatematica2daParete.py new file mode 100644 index 0000000..a3d1112 --- /dev/null +++ b/ejercicios/03-exprecionMatematica2daParete.py @@ -0,0 +1,8 @@ +a = float(input("Ingresa el valor de a:")) +b = float(input("Ingresa el valor de b:")) +c = float(input("Ingresa el valor de c:")) +d = float(input("Ingresa el valor de d:")) +e = float(input("Ingresa el valor de e:")) +f = float(input("Ingresa el valor de f:")) +res = (a+b/c) / (d+e/f) +print(f"Humano aqui esta tu pich... resultado:{res:,.3f}") \ No newline at end of file diff --git a/ejercicios/04-IntercambioValores.py b/ejercicios/04-IntercambioValores.py new file mode 100644 index 0000000..5b96ea0 --- /dev/null +++ b/ejercicios/04-IntercambioValores.py @@ -0,0 +1,8 @@ +a = int(input("Ingresa el valor de a:")) +b = int(input("Ingresa el valor de b:")) +aux=a +a=b +b=aux +print("Humano aqui estan tus ingaos valores:") +print(f"Valor a {a}") +print(f"Valor b {b}") \ No newline at end of file diff --git a/ejercicios/04-figuras.py b/ejercicios/04-figuras.py new file mode 100644 index 0000000..e51f84c --- /dev/null +++ b/ejercicios/04-figuras.py @@ -0,0 +1,12 @@ +menu = """ +Seleccione una opción +(1) Área cuadrado +(2) Área rectángulo +(3) Área circulo +""" +opcion = int(input(menu)) + +if opcion == 1: + lado = int(input("Ingrese el valor del lado (cm): ")) + area_c = lado * lado + print("El área del cuadrado es: ", area_c) \ No newline at end of file diff --git a/ejercicios/05-CalificacionAlumno.py b/ejercicios/05-CalificacionAlumno.py new file mode 100644 index 0000000..8ee6118 --- /dev/null +++ b/ejercicios/05-CalificacionAlumno.py @@ -0,0 +1,16 @@ +''' +Calcular las calificaciones de un alumno con las siguientes características: +Calificación de prácticas que es 40%. +Calificación de participación que es 20%. +Calificación de examen que es 40%. +Obtener la calificación final sumando y obteniendo el promedio. +''' +print("Ingresa las calificaciones del alumno:") +practicas = float(input("Calificación de las prácticas:")) +participacion = float(input("Calificación de las participaciones:")) +examen = float(input("Calificación del examen:")) +practicas *= 0.40 +participacion *= 0.20 +examen *= 0.40 +final=practicas+participacion+examen +print(f"Esta es la calificación:{final:.2f}") \ No newline at end of file diff --git a/ejercicios/06-parImpar.py b/ejercicios/06-parImpar.py new file mode 100644 index 0000000..2fd6be3 --- /dev/null +++ b/ejercicios/06-parImpar.py @@ -0,0 +1,11 @@ +numero1=int(input("Ingresa un número par:")) +numero2=int(input("Ingresa otro número par:")) +numeroPar1=numero1%2 +numeroPar2=numero2%2 +if numeroPar1==0 and numeroPar2==0: + print("Correcto, los número son pares") +else: + if numeroPar1!=0: + print(f"El número {numero1} no es par") + if numeroPar2!=0: + print(f"El número {numero2} no es par") \ No newline at end of file diff --git a/ejercicios/07-validarNumero.py b/ejercicios/07-validarNumero.py new file mode 100644 index 0000000..70bddc4 --- /dev/null +++ b/ejercicios/07-validarNumero.py @@ -0,0 +1,8 @@ +x = float(input("Ingresa el valor de x:")) +y = float(input("Ingresa el valor de y:")) +dividendo = (y**2)-1 +if dividendo != 0: + res= ( x**(1/2) ) / dividendo + print(f"El resultado es:{res}") +else: + print(f"El valor de 'Y' no puede ser {y}") \ No newline at end of file diff --git a/ejercicios/08-MayorNumero.py b/ejercicios/08-MayorNumero.py new file mode 100644 index 0000000..54bb503 --- /dev/null +++ b/ejercicios/08-MayorNumero.py @@ -0,0 +1,9 @@ +print("Ingresa dos números:") +n1=int(input("Número 1:")) +n2=int(input("Número 2:")) +if n1==n2: + print("Los 2 números son iguales") +elif n1>n2: + print(f"El número {n1} es mayor que {n2}") +else: + print(f"El número {n2} es mayor que {n1}") \ No newline at end of file diff --git a/ejercicios/09-vocalConstante.py b/ejercicios/09-vocalConstante.py new file mode 100644 index 0000000..313eee2 --- /dev/null +++ b/ejercicios/09-vocalConstante.py @@ -0,0 +1,6 @@ +letra=input("Ingresa una constante:").lower() +#letra=letra.lower() +if letra=="a" or letra=="e" or letra=="i" or letra=="o" or letra=="u": + print("No se ingresó una constante") +else: + print("Correcto") \ No newline at end of file diff --git a/ejercicios/10-calculadora.py b/ejercicios/10-calculadora.py new file mode 100644 index 0000000..cc1c499 --- /dev/null +++ b/ejercicios/10-calculadora.py @@ -0,0 +1,31 @@ +''' +S o s: Suma. +R o r: Resta. +M o m: Multiplicación. +D o d: División. +''' +print("Ingresa dos numeros") +num1=int(input("Numero 1:")) +num2=int(input("Numero 2:")) +opcion=input("Selecciona lo que quieres hacer con estos dos números\n\ +S s=Suma\n\ +R r=Resta\n\ +M m=Multiplicacion\n\ +D d=Divicion\n" +) +opcion=opcion.lower() +res=0 +if opcion=="s": + res=num1+num2 +if opcion=="r": + res=num1-num2 +if opcion=="m": + res=num1*num2 +if opcion=="d": + if num2!=0: + res=num1/num2 +else: + print("Elige una opción correcta") + quit() +print(f"El resultado es:{res}") + diff --git a/ejercicios/11-RangoExperiencia.py b/ejercicios/11-RangoExperiencia.py new file mode 100644 index 0000000..0ea843d --- /dev/null +++ b/ejercicios/11-RangoExperiencia.py @@ -0,0 +1,12 @@ +''' +Entre 0 y 1 años es junior +Entre 1 y 3 años es semi senior +Entre 3 y 5 años es senior +''' +anios=int(input("Cuántos años de experiencia tienes: ")) +if 0 <= anios<1: + print("Cadidato para ser junior") +elif 1 <= anios<3: + print("Cadidato para ser semi senior") +elif 3 <= anios<5: + print("Cadidato para ser senior") \ No newline at end of file diff --git a/ejercicios/12-banco.py b/ejercicios/12-banco.py new file mode 100644 index 0000000..209dab5 --- /dev/null +++ b/ejercicios/12-banco.py @@ -0,0 +1,20 @@ +total=1000 +print("¡Bienvenido al banco!\n\ +Qué quieres hacer\n\ +1.- Ingresar dinero:\n\ +2.- Sacar dinero:\n\ +3.-Salir:\n") +opcion=int(input()) +if opcion==1: + ingreso=float(input("¿Cuánto dinero deseas ingresar?:")) + total+=ingreso + print(f"Tu saldo es de {total:.2f}") +elif opcion==2: + egreso=float(input("¿Cuánto dinero deseas sacar?:")) + if total-egreso<0: + print(f"Tu saldo solo es de {total:.2f}") + else: + total-=egreso + print(f"Tu saldo es de {total:.2f}") +elif opcion==3: + quit() diff --git a/ejercicios/13-EmpresaDiccionario.py b/ejercicios/13-EmpresaDiccionario.py new file mode 100644 index 0000000..5b98e8d --- /dev/null +++ b/ejercicios/13-EmpresaDiccionario.py @@ -0,0 +1,22 @@ +''' +El diccionario tendrá una lista con 3 empleados con nombre y edad. +El mismo diccionario tendrá una lista de 3 de autos con marca, modelo + y también cada auto tendrá 2 submodelos +Accederemos a la edad del empleado número 3. +Accederemos al segundo submodelo del auto número 2. +''' +empresa={ +'empleados':[ + {'nombre':'Maria','edad':20}, + {'nombre':'Esteban','edad':30}, + {'nombre':'Pepe','edad':25} +], +'autos':[ + {'marca':'Ford','modelo':'f20','submodelos':['f20.01','f20.02']}, + {'marca':'Nissan','modelo':'n20','submodelos':['n20.01','n20.02']}, + {'marca':'Seat','modelo':'s20','submodelos':['s20.01','s20.02']} +] +} +print("empresa['empleados'][2]['edad']=",empresa['empleados'][2]['edad']) +print("empresa['autos'][2]['submodelos'][1]=",empresa['autos'][2]['submodelos'][1]) +print(empresa) \ No newline at end of file diff --git a/ejercicios/14-EliminarRepetidos.py b/ejercicios/14-EliminarRepetidos.py new file mode 100644 index 0000000..c8a5461 --- /dev/null +++ b/ejercicios/14-EliminarRepetidos.py @@ -0,0 +1,12 @@ +lista=[1,1,1,2,8,8,3,3,4,1,3,5,6] +print(lista) +''' +conjunto=set() +conjunto=set(lista) +lista=list(conjunto) +lista.sort() +print(lista) +''' +lista=list(set(lista)) +lista.sort() +print(lista) \ No newline at end of file diff --git a/ejercicios/15-OpreacionesConjuntos.py b/ejercicios/15-OpreacionesConjuntos.py new file mode 100644 index 0000000..ac4eb7f --- /dev/null +++ b/ejercicios/15-OpreacionesConjuntos.py @@ -0,0 +1,20 @@ +''' +Crear un programa en python que tenga dos listas en las cuales eliminaremos los elementos repetidos y de los cuales obtendremos: + +Elementos que aparecen en las dos listas (Unión). +Elementos que aparecen en la primer lista pero no en la segunda (Diferencia). +Elementos que aparecen en la segunda lista pero no en la primera (Diferencia). +Elementos que aparecen en Ambas listas (intersección). +''' +lista1=[1,2,2,3,4,5,4,8,45,54,87,99,5] +lista2=[1,2,4,6,2,4,5,2,45,22,55,77,88,99] +A=set(lista1) +B=set(lista2) +union=A | B +diferenciaAmenosB= A - B +diferenciaBmenosA= B - A +interseccion=A & B +print("Elementos que aparecen en las dos listas (Unión).",union) +print("Elementos que aparecen en la primer lista pero no en la segunda (Diferencia).",diferenciaAmenosB) +print("Elementos que aparecen en la segunda lista pero no en la primera (Diferencia).",diferenciaBmenosA) +print("Elementos que aparecen en Ambas listas (intersección).",interseccion) \ No newline at end of file diff --git a/ejercicios/16-RepiteNumero.py b/ejercicios/16-RepiteNumero.py new file mode 100644 index 0000000..771333d --- /dev/null +++ b/ejercicios/16-RepiteNumero.py @@ -0,0 +1,22 @@ +''' +En este ejercicio le mostraremos una lista de números al humano y pediremos que ingrese un número y la cantidad de veces que ese número se repite. + +Crearemos una tupla con números al azar y se la mostraremos al humano. +Pediremos al humano que ingrese un numero de la tupla y nos diga cuantas veces se repite. +Si le atina felicitamos al humano. +En caso contrario reprendemos al humano. + +''' +tupla=(1,2,4,2,5,6,7,8,15,2,3) +print(tupla) +numero=int(input("Ingresa un número de la lista:")) +if numero in tupla: + print(f"Cuántas veces se repite el número {numero} en la lista:") + repite=int(input()) + seRepiteEnTupla=tupla.count(numero) + if repite==seRepiteEnTupla: + print("Correcto") + else: + print(f"El número {numero} se repite {seRepiteEnTupla} en la lista") +else: + print(f"El número {numero} no esta en la lista") \ No newline at end of file diff --git a/ejercicios/17-listaVideos.py b/ejercicios/17-listaVideos.py new file mode 100644 index 0000000..7d1dc81 --- /dev/null +++ b/ejercicios/17-listaVideos.py @@ -0,0 +1,14 @@ +''' +Crearemos una lista vacía. +Crearemos un diccionario con 3 llaves y valores: nombre, url y duracion. +Agregaremos cada diccionarios nuestra lista. +Mostraremos el resultado. +''' +videos=[] +v={"nombre":"01.- Tutorial python","url":"youtube.com/lkdslkdjs","duracion":500} +videos.append(v) +v={"nombre":"02.- Tutorial python","url":"youtube.com/ljsajas","duracion":400} +videos.append(v) +v={"nombre":"03.- Tutorial python","url":"youtube.com/ñlksdlksdd","duracion":700} +videos.append(v) +print(videos) \ No newline at end of file diff --git a/ejercicios/18-numeroCorrecto.py b/ejercicios/18-numeroCorrecto.py new file mode 100644 index 0000000..4e772df --- /dev/null +++ b/ejercicios/18-numeroCorrecto.py @@ -0,0 +1,8 @@ +divisor = float(input("Ingresa el divisor:")) +dividendo = float(input("Ingresa un dividendo superior a 0:")) +while dividendo<=0: + print(f"El dividendo {dividendo} debe ser superior a 0 intentalo de nuevo:") + dividendo=float(input()) + +division = divisor/dividendo +print(f"El resultado de la división es:{division}") \ No newline at end of file diff --git a/ejercicios/19-Escuela.py b/ejercicios/19-Escuela.py new file mode 100644 index 0000000..a7ef8f5 --- /dev/null +++ b/ejercicios/19-Escuela.py @@ -0,0 +1,41 @@ +''' +En este ejercicio vamos a acceder a una lista de alumnos que tengan: +nombre +edad +calificación + +Además un diccionario que tenga alumnos y maestros donde: + +Los alumnos tendrán: +nombre +edad +calificación + +Y los maestros tendrán: +nombre +grado +''' +alumnos=[ + {"nombre":"Juan","edad":19,"calificacion":10}, + {"nombre":"Maria","edad":19,"calificacion":8}, + {"nombre":"Pedro","edad":20,"calificacion":9} +] +#for alumno in alumnos: +# print(f"Nombre:{alumno['nombre']} Edad:{alumno['edad']} Calificacion:{alumno['calificacion']}") + +escuela={ + "alumnos":alumnos, + "maestros":[ + {"nombre":"Javier","grado":"Lic."}, + {"nombre":"Martha","grado":"Maestria"}, + {"nombre":"Pedro","grado":"Doc."}, + ] +} +print("ALUMNOS") +for alumno in escuela["alumnos"]: + print(f"Nombre:{alumno['nombre']} Edad:{alumno['edad']} Calificacion:{alumno['calificacion']}") +print("\nMAESTROS") +for maestro in escuela["maestros"]: + print(f"Nombre:{maestro['nombre']} Grado:{maestro['grado']}") + +print(escuela) \ No newline at end of file diff --git a/ejercicios/20-menu.py b/ejercicios/20-menu.py new file mode 100644 index 0000000..f86ce59 --- /dev/null +++ b/ejercicios/20-menu.py @@ -0,0 +1,23 @@ +import os +num1=10 +num2=5 +while True: + print(f"Humano que quieres realizar con estos numeros {num1} y {num2}\n\ +Presiona m para multiplicar.\n\ +Presiona d para dividir.\n\ +Presiona s para sumar.\n\ +Presiona r para restar.\n\ +Presiona x para salir.") + opcion=input() + if opcion=='m': + print(f"Este es el resultado de la multiplicacion {num1*num2}") + elif opcion=='d': + print(f"Este es el resultado de la divicion {num1/num2}") + elif opcion=='s': + print(f"Este es el resultado de la suma {num1+num2}") + elif opcion=='r': + print(f"Este es el resultado de la resta {num1-num2}") + elif opcion=='x': + break + input() + os.system("cls") diff --git a/ejercicios/21-TablasMultiplicar.py b/ejercicios/21-TablasMultiplicar.py new file mode 100644 index 0000000..589b6e1 --- /dev/null +++ b/ejercicios/21-TablasMultiplicar.py @@ -0,0 +1,8 @@ +while True: + numero=int(input("Ingresa un número entre el 1 y el 10:")) + if numero<1 or numero>10: + print(f"El número {numero} esta fuera del rango de 1 y 10:") + else: + break +for i in range(10): + print(f"{(i+1)} * {numero} = {(i+1)*numero} ") \ No newline at end of file diff --git a/ejercicios/22-SumaCuadrados.py b/ejercicios/22-SumaCuadrados.py new file mode 100644 index 0000000..27f2496 --- /dev/null +++ b/ejercicios/22-SumaCuadrados.py @@ -0,0 +1,6 @@ +suma=0 +for i in range(1,11): + cuadrado=(i)*(i) + suma=suma+cuadrado + print(f"El cuadrado de {i}={cuadrado}") +print(f"La suma es:{suma}") \ No newline at end of file diff --git a/ejercicios/23-sumaRangoNumeros.py b/ejercicios/23-sumaRangoNumeros.py new file mode 100644 index 0000000..4e46508 --- /dev/null +++ b/ejercicios/23-sumaRangoNumeros.py @@ -0,0 +1,14 @@ +''' +Programa que pida numero enteros y los vaya sumando. +Si el número introducido esta dentro de 100 y 200 o es 0 cerrar el programa. +''' +suma=0 +while True: + numero=int(input("Ingresa un numero entre 100 y 200 para ser sumado si presionas 0 se cierra el programa:")) + if numero>=100 and numero<=200: + suma=suma+numero + print(f"El resultado es: {suma}") + else: + print(f"Solo se pueden sumar números entre 100 y 200 aqui esta tu suma {suma}") + if numero==0: + break \ No newline at end of file diff --git a/ejercicios/24-fibonacci.py b/ejercicios/24-fibonacci.py new file mode 100644 index 0000000..699901e --- /dev/null +++ b/ejercicios/24-fibonacci.py @@ -0,0 +1,14 @@ +x=0 +y=1 +z=0 +while True: + n=int(input("Ingresa un número mayor a 1:")) + if n>1: + break +print("1",end=" ") +for i in range(0,n): + z=x+y + print(f"{z}",end=" ") + x=y + y=z +print("") \ No newline at end of file diff --git a/ejercicios/25-SumaNumerosSucesivos.py b/ejercicios/25-SumaNumerosSucesivos.py new file mode 100644 index 0000000..041dff0 --- /dev/null +++ b/ejercicios/25-SumaNumerosSucesivos.py @@ -0,0 +1,16 @@ +while True: + n=int(input("Ingresa un numero mayor a 1:")) + if n>1: + break + else: + print("Te pedí un numero mayor a 1") +suma=0 +strResultado="" +for i in range(1,n+1): + suma=suma+i + #print(f"{i}",end="+") + strResultado=strResultado+str(i)+"+" +strResultado=strResultado[:-1] +strResultado=strResultado+"=" +print(strResultado) +print(f"Resultado de la suma:{suma}") \ No newline at end of file diff --git a/ejercicios/26-Factorial.py b/ejercicios/26-Factorial.py new file mode 100644 index 0000000..53b8d2c --- /dev/null +++ b/ejercicios/26-Factorial.py @@ -0,0 +1,15 @@ +while True: + n=int(input("Ingresa un número mayor a 1:")) + if n>1: + break + else: + print("Te pedí que ingresara un número mayor a 1 intentalo de nuevo") +factorial=1 +strResultado="" +for i in range(1,n+1): + factorial=factorial*i + strResultado=strResultado+str(i)+"*" +strResultado=strResultado[:-1] +strResultado=strResultado+"=" +print(strResultado) +print(f"Factorial:{factorial}") \ No newline at end of file diff --git a/ejercicios/27-DosAlaNpotencia.py b/ejercicios/27-DosAlaNpotencia.py new file mode 100644 index 0000000..31ee0fc --- /dev/null +++ b/ejercicios/27-DosAlaNpotencia.py @@ -0,0 +1,15 @@ +while True: + n=int(input("Por favor ingresa un número mayor a 1:")) + if n>1: + break + else: + print("Te pedí un número mayor a 1") +suma=0 +for i in range(1,n+1): + potencia=pow(2,i) + suma=suma+potencia + if ialeatorio: + print(f"El número {numero} es mayor al que estoy pensando") + if numero==aleatorio: + print(f"FELICIDADES ADIVINASTE EL NÚMERO EN {contador} INTENTOS") + break + contador=contador+1 \ No newline at end of file diff --git a/ejercicios/29-fibonacciFunciones.py b/ejercicios/29-fibonacciFunciones.py new file mode 100644 index 0000000..8acea23 --- /dev/null +++ b/ejercicios/29-fibonacciFunciones.py @@ -0,0 +1,30 @@ +#Crear una función que pida un número mayor a 1 al humano. +def pideNumero(): + while True: + n=int(input("Ingresa un numero mayor a 1:")) + if n>1: + return n + +#Crear una función que genere una lista fibonacci desde 1 hasta un número x. +def generaFibonnaci(n): + lista=[] + for i in range(0,n): + if i==0 or i==1: + lista.append(1) + else: + lista.append(lista[-2]+lista[-1]) + return lista +#Crear una función que muestre una lista de números. +def muestraLista(lista): + for i in lista: + if(i!=lista[-1]): + print(f"{i}",end="+") + else: + print(f"{i}") +#pide un numero humano +n=pideNumero() +#genera una susecion fibonacci +lista=generaFibonnaci(n) +muestraLista(lista) + +#muestraLista(generaFibonnaci(pideNumero())) \ No newline at end of file diff --git a/ejercicios/30-FuncionesMatematicas.py b/ejercicios/30-FuncionesMatematicas.py new file mode 100644 index 0000000..f204550 --- /dev/null +++ b/ejercicios/30-FuncionesMatematicas.py @@ -0,0 +1,37 @@ +import os +def pedirNumeros(): + a=int(input("ingresa el valor de a:")) + b=int(input("ingresa el valor de b:")) + os.system("cls") + return a,b +def suma(a,b): + return a+b +def resta(a,b): + return a-b +def mul(a,b): + return a*b +def div(a,b): + return a/b +def menu(a,b): + while True: + print(f"Qué tipo de operacion matematica deseas realizar con {a} y {b}\n\ +s para sumar\n\ +r para restar\n\ +m para multiplicar\n\ +d para dividir\n\ +x para salir:") + opcion=input() + if opcion=='s': + print(f"Resultado es:{suma(a,b)}") + if opcion=='r': + print(f"Resultado es:{resta(a,b)}") + if opcion=='m': + print(f"Resultado es:{mul(a,b)}") + if opcion=='d': + print(f"Resultado es:{div(a,b)}") + if opcion=='x': + break + input("Presione cualquier tecla") + os.system("cls") +a,b=pedirNumeros() +menu(a,b) \ No newline at end of file diff --git a/ejercicios/31-mayorMenor.py b/ejercicios/31-mayorMenor.py new file mode 100644 index 0000000..45e79e3 --- /dev/null +++ b/ejercicios/31-mayorMenor.py @@ -0,0 +1,30 @@ +''' +Mostrar los resultados. +''' +#Crear una función que pida una cantidad indeterminada de números y guardarlos en una lista. +def pideNumero(): + lista=[] + while True: + n=int(input("ingresa cualquier número (0 para terminar):")) + if n==0: + break + else: + lista.append(n) + return lista +#Crear una función que busque el mayor y menor número de una lista. +def mayorMenor(lista): + mayor=0 + menor=999999 + + for numero in lista: + + if numero>mayor: + mayor=numero + + if numero0 and b>0: + return a,b + else: + print("Los números no son mayores que cero") + + #Muestre el resultado de la operación. + def despues(res): + print(f"Resultado:{res}") + + def muestraDatos(*args): + a,b=antes() + res=operacionMatematica(a,b) + despues(res) + return muestraDatos + +@ValidarDatos +def suma(a=0,b=0): + return a+b +@ValidarDatos +def resta(a=0,b=0): + return a-b +@ValidarDatos +def mul(a=0,b=0): + return a*b +@ValidarDatos +def div(a=0,b=0): + return a/b +@ValidarDatos +def concatenar(a=0,b=0): + return str(a)+""+str(b) + +concatenar() \ No newline at end of file diff --git a/ejercicios/36-GenerarIps.py b/ejercicios/36-GenerarIps.py new file mode 100644 index 0000000..726c2a4 --- /dev/null +++ b/ejercicios/36-GenerarIps.py @@ -0,0 +1,29 @@ +def decoradorPideBloques(generarIps): + def antes(): + bloque1=int(input("Ingresa el bloque 1:")) + bloque2=int(input("Ingresa el bloque 2:")) + bloque3=int(input("Ingresa el bloque 3:")) + ini=int(input("Ingresa el rango inicial del bloque 4:")) + fin=int(input("Ingresa el rango final del bloque 4:")) + return bloque1,bloque2,bloque3,ini,fin + def despues(ips): + for ip in ips: + print(ip) + def integrar(*args): + bloque1,bloque2,bloque3,ini,fin=antes() + ips=generarIps(bloque1,bloque2,bloque3,ini,fin) + despues(ips) + return integrar + + +@decoradorPideBloques +def generarIps(bloque1=0,bloque2=0,bloque3=0,ini=0,fin=0): + for ip in range(ini,fin+1): + yield str(bloque1)+"."+str(bloque2)+"."+str(bloque3)+"."+str(ip) + +generarIps() + +''' +for ip in generarIps(192,168,1,5,10): + print(ip) +''' \ No newline at end of file diff --git a/ejercicios/37-ContinuePassElse.py b/ejercicios/37-ContinuePassElse.py new file mode 100644 index 0000000..2a9060c --- /dev/null +++ b/ejercicios/37-ContinuePassElse.py @@ -0,0 +1,30 @@ +''' +Crear un programa en python que pida al usuario que ingrese una sucesión de números pares ascendentes (de menor a mayor). +Pedir al usuario un número par: + Si es par guardarlo en una lista de lo contrario no. +Validar que los números que ingresó sean ascendentes y mostrar el resultado: +''' +lista=[] +while True: + num=int(input("Ingresa un numero par (0 para terminar):")) + if num%2==0: + pass + else: + continue + if num==0: + break + lista.append(num) + +print(lista) + +i=0 +while i0: + if lista[i]<= lista[i-1]: + esAscendente=False + break + i=i+1 +else: + esAscendente=True +print("Es ascendente:",esAscendente) + diff --git a/ejercicios/38-MatematicasDoc.html b/ejercicios/38-MatematicasDoc.html new file mode 100644 index 0000000..900daa8 --- /dev/null +++ b/ejercicios/38-MatematicasDoc.html @@ -0,0 +1,32 @@ + +Python: module 38MatematicasDoc + + + + + +
 
+ 
38MatematicasDoc
index
c:\users\eugenio\documents\github\curso-python\ejercicios\38matematicasdoc.py
+

Este modulo realiza operaciones matematicas como sumar, restar, multiplicar y dividir

+

+ + + + + +
 
+Functions
       
div(a, b)
Esta funcion divicion los parametros a y b
+
mul(a, b)
Esta funcion multiplicacion los parametros a y b
+
resta(a, b)
Esta funcion resta los parametros a y b
+
suma(a, b)
Esta funcion suma los parametros a y b
+

+ + + + + +
 
+Data
       pi = 3.1416
+ \ No newline at end of file diff --git a/ejercicios/39-ArgvMenuMat.py b/ejercicios/39-ArgvMenuMat.py new file mode 100644 index 0000000..af218b8 --- /dev/null +++ b/ejercicios/39-ArgvMenuMat.py @@ -0,0 +1,60 @@ +import sys +if __name__=="__main__": + tam=len(sys.argv) + for argumento in sys.argv: + if argumento=="-h" or argumento=="--help" or argumento=="" : + print("Bienvenido al programa\ +\n-h or --help: Ayuda\ +\n-s or --suma: Sumar n cantidad de numeros\ +\n-r or --resta: Restr n cantidad de numeros\ +\n-m or --mul: Multiplicar n cantidad de numeros\ +\n-d or --div: Dividir n cantidad de numeros") + if argumento=="-s" or argumento=="--suma": + i=2 + if tam>3: + res=0 + while i3: + res=0 + while i3: + res=1 + while i3: + res=0 + while i +Python: module Funciones Matematicas Basicas + + + + + +
 
+ 
Funciones Matematicas Basicas (version 1.0.2.3)
index
c:\users\eugenio\documents\github\curso-python\ejercicios\matematicasdoc.py
+

Este modulo realiza operaciones matematicas como sumar, restar, multiplicar y dividir

+

+ + + + + +
 
+Functions
       
div(a, b)
Esta funcion divicion los parametros a y b
+
mul(a, b)
Esta funcion multiplicacion los parametros a y b
+
resta(a, b)
Esta funcion resta los parametros a y b
+
suma(a, b)
Esta funcion suma los parametros a y b
+

+ + + + + +
 
+Data
       __copyright__ = 'Copyright Programador novato 2020'
+__email__ = 'info@programadornovato.com'
+__license__ = 'GPL'
+__maintainer__ = 'Eugenio Chaparro'
+__status__ = 'Finished'
+pi = 3.1416

+ + + + + +
 
+Author
       Yo dios
+ \ No newline at end of file diff --git a/ejercicios/MatematicasDoc.py b/ejercicios/MatematicasDoc.py new file mode 100644 index 0000000..e3cff74 --- /dev/null +++ b/ejercicios/MatematicasDoc.py @@ -0,0 +1,24 @@ +'''Este modulo realiza operaciones matematicas como sumar, restar, multiplicar y dividir''' +def suma(a,b): + '''Esta funcion suma los parametros a y b''' + return a+b +def resta(a,b): + '''Esta funcion resta los parametros a y b''' + return a-b +def mul(a,b): + '''Esta funcion multiplicacion los parametros a y b''' + return a*b +def div(a,b): + '''Esta funcion divicion los parametros a y b''' + return a/b +pi=3.1416 +__name__="Funciones Matematicas Basicas" +__version__="1.0.2.3" +__author__="Yo dios" +#__file__="MiArchivo" + +__copyright__="Copyright Programador novato 2020" +__license__="GPL" +__maintainer__="Eugenio Chaparro" +__email__="info@programadornovato.com" +__status__="Finished" \ No newline at end of file diff --git a/ejercicios/__pycache__/38MatematicasDoc.cpython-38.pyc b/ejercicios/__pycache__/38MatematicasDoc.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f955a5db232593c2dd8bd56cad302b2402b6a53f GIT binary patch literal 869 zcmbW0&r8EF6vxx+ zdhtIHyy$x=V;f8qQ?r`^+ z^c-H|Ww0)<@G966ukkwAGH>)MeCd|#E)Tm`CKWVNJPQ@of`xL(s7i!pfmE?DG-9cM zE(2z0pdv+07BRgKYfXwa%EDA8A$-?#K)HO9T2t|ZGBnqm8a==>2a(3LrD7#+SyOpx) zkw3x-^~Z4Iv{x?t1}-q(B_xrGituVYneXTgoH@jFK_|NI1 zm}8v4p$@oE`RGs=s!&5+fjX?Au0jJm)HP_*I<)8-v}ps@sRtd}gbmt)YqSlUbRDkK z4%~R>?A*+T`z8@2RFF;;(SlE9#)*oB=7Cg^FeK!OK#>7ABv7FuCJniMglA1+b(l^Q z8BcLvlNkYdCPC`JLY@z6TN$7j52thI+`Z#qcsF~1;W;@?BO9%_noN};G1oj4iAIy- zt)mO)qLRBjcSqXA3ySH->%lXBXoNPtNXH_Q%73MTG!#){{6m=>r6WH`wNa1bSu#

mAx02Xgjl=ZTT{vAmbz3nT_aajB6Lfk8H?5^OjZ1^7p=+|CC&_sLu z`TJ4#=XSH7-9ISVg4|qsM)Hyy%h9ayq}%K6b)RO9_X_E#Otw8x@l4C{Bq1kSjgeU# zlqQinefLdi+GCEcLc;Qs~bg>VpcOWBaCIa5>Y~&5b zKn08ytkL%6v@M&q$Y~{(xyM+9jAkrvGj@iYMY`jn#TZYKoEq&8W5FCKV-(L}Q;Eo+ z6Ww4eu zyL!uQ$CoBAgO+(SFRg6}xvevY!EeHJr2_Hw0>bV`ZrpI2^zq66S)%ve+}P*jujrsM(Z9?KSRZTKSH3xO{fgWn|5ZsZFELAWzU15auVV4E z1L6y3re2+<<88$lYq#gg6_&@D&DUijRi<(+{Bn@*Y6gQ)CS9|u*KV(IHP3x0V{gl(exYv}PjSpO zrzXWsdS~2o=d$&g$4~#lk&_seD_70m6*_avin3=r=C0Je&>Xq7^w*j_u8Y@bbzLSCrhYuHsDje{HeYhUTA%R}AjvNoO2d5oLOMOM0lgPigZx z2ksY#a;~&-r@q)dkG(K1-}s0xlQQ2P%RRH2mdPKp$clUHetQaAkk}-@N$RIwT%K(3 zZyj$q^U4)zy4x%EELB&y7r1enN`GtO6zO$bAERfu>|3uP#&1-;QS-^1jNf7VW(Pi2 zcY3ekyVANVt|0NrdppaY=Ul8)41DhPsZUM#>MHJjc5~ycV1dO|o!5F5N`JX;)QS&& zr2EyRuAIqLUt*cpwuvQi;y2GfmvPGDTXKGvF?Y#{aIYO6w>)y$r`&3|by`?&_EUqZ z3+$*d%s2OEp-g*J_=(2(*%PeJYiF&h`BVGvjP4K5Z&zl&`R3%C9LxKB!IL-J*nhpw zZmXLVEV*@W(Ct|&L1Mv+YufGnSWeTa^~AES)>&|KHuGoysz- zWhOh%yKwV?bD;PAx1~<@hxyrLjo^t2lGd8E=lCh~H<$Hqn4fYq=swRj{q(;d|CFYr znJ2%keE2{yb;Vwrf;N7)(267Im= zx>W&-JmU2qdM$JFe>mgTp%)V{6EeikBF(L(!A|aL)9%F_X#0JAi_=W)VvXAmZm<2y z{@SCI?{BkVMBgp1Bd-qb@_1VHj#YC}IP<^_DbLJ=P&-fpDc7%_ikbqEji?_ zTJ*3?C+zC4laCMnwR!ix`smw|KI1s`>9ekXyL{8T$yW05jA^&d-3)7aYoWGG>_u`? zR^i>1c52J6U72@h{)r=3R$Z@rcxic|k9V$m#``o6)4qeNZY?x%`L`(Mm+`_Vz3ZKK zSLn*``McbCU+iqo&B`0^DNcXAQ}~VEuIqQZ^V&a!CCoUj_sUlH$*g<#ua}l{em}FQ zWr6cVFd+_@`L+|(bH$o>=!&)Cw!hue-*G`WAJqKb6Mw< G&;$T@Reje0 literal 0 HcmV?d00001 diff --git a/ejercicios/contador.txt b/ejercicios/contador.txt new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/ejercicios/contador.txt @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/ejercicios/exprecionMat2.png b/ejercicios/exprecionMat2.png new file mode 100644 index 0000000000000000000000000000000000000000..161bdc8721df951386c65fddf3e6b800b6f54719 GIT binary patch literal 1402 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 B&~5+# literal 0 HcmV?d00001 diff --git a/ejercicios/listas/__init__.py b/ejercicios/listas/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ejercicios/listas/__pycache__/__init__.cpython-38.pyc b/ejercicios/listas/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b00a4c9630ab280187b226dfbb7cc88831954c51 GIT binary patch literal 167 zcmWIL<>g`kf;Tbz@gVv!h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6u!*(xTqIJKxa zCbcv@H7_$i#w9Sw?%juc_hb*6%?6;I-)`Jp6M&C0SvHEv5yGsYiyq~hi_nJFn}9yE^p#q$ z;WoSxf{eF7x2r1ouRdXpDro-`m!TTxO@(xU=5j1t$kSBFxK(rEG%*?P{BhScs=S|z zXFl{ZKI>GzJFH`T!RJallDvan!I|He(LNg(p$!xHSja@No{I9BkeOj8Np_l#Sd?p{ zcGG$Gpd=HILPtrID8s5PhN)C&js+>qUOIQRNX=tam2: + tamMayor=tam1 + else: + tamMayor=tam2 + for i in range(0,tamMayor): + if ig`k0`+|Y@gVv!h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o108*(xTqIJKxa zCbcv@H7_$i#w9*DhzJT=$TiDZ90AE@g060Mk7OepY-#ON*xXC_ zAlq75+gUluacZOIz&Afh=9|eRlfhtvpgg^7T|c9J^}$bJ7@Q#N9x5O}AIX#e3zk9@ zEQ1&lT#ulakx^gzoRxUr;}l_2R4r-g4#~)Zju&LXIx0Gv8-FCIk1Kh|CsrBDmAg?@ zQS-A}I<2b4^7Ep(a5~t2g`kf}jTeco6*I zlUkadnwOa$jQe6q8(9RGhC{P+5|ZpBIywm0FaXnVgwl98;27 jQIa1MAD@|*SrQ+wS5SG2!zMRBr8Fni4rIw^AZ7pnw$du6 literal 0 HcmV?d00001 diff --git a/ejercicios/texto/__pycache__/reordenar.cpython-38.pyc b/ejercicios/texto/__pycache__/reordenar.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d1b9d01f01a1a928856b578bf7b9302fab961738 GIT binary patch literal 433 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 literal 0 HcmV?d00001 diff --git a/imagenes/Python_logo.jpg b/imagenes/Python_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c8a3c7198d055ee2b8be690fa85637a858a720b5 GIT binary patch literal 198695 zcmeFa1zeO(*D!u9-3UmkfFhtG-Ho6iBA|35EX#t#0!ycj0ivKFEf&(!4JIfl-6ax& zbjecR>=NRA-%q^Hdq4mG_xpX0?sc8XGjZn3nRDhEHrh7^SoWOqw6%sHb#>?%1VJPa zF^m?%2M`SWgJ3KWAr6KhOW3|0_#*7cRvJ8zMi2r|h!y-?U_v-}FM#g_+Cl_dd7pvz zXNYXI6N0$+Y`;%fp)3*X=WI}}D6|dAiCsxsjQxndt)msn1AP<{5)c%V5)_aUl3*7Q zloAz^5)y=BIwBbUR$8Ln?SQfVYzK^McRTQ4+hxG` z@OH{(0(Hi@)8Gku1j4;H+Bd#X7^o^KnV-|rR8~EE3W9++iqmIp9Z`6DAjrYd)kRB1 zk=?-1h@H3&^a&|M1c3%vz|l_X+R8fE5>-zrv7MaI$dpf}qVdV{<{Y*uG^4oh&9ODJI4%#0R>6$NkgDomBrE zz>e)^in;T+F@rJG{0#e<_h%UD2?R+jfWEo+Gt4p)g7U9J5L4&Ru)~ibi251?<<;+M z4+EB7Y+PNPr1<$gJUsYp5pX_ihwiw4nP4a7KL&Q;Egg2an~OUZ26F=YAcV*uYG^OS47e%>bOhpsgdlN98d88x zL1!RMNCz^6%pf>q135r0kO$-oU50Kzcc6RFLnsQ0hn_)6P&$+aj-R2Hdv= z>Vo>AA!r<$h8Cd}7z{=XqlD4Hm|<)%P8bhN2qpoOgPnq%g=xVIVHaRXm?O*$<_o(D zy8{b_MZpqaNw7>IHp zCV~NiX@Ye^O2YkwJcLq&s)PoFNJ0<78-(G6F9>r9KM=MM4iPRA5fL#EaTAFXohC9Q zx=7?h6hstDltJ{GsDWsZXn~lRn3<%(A`iSf@ST-`Re|*)>jTy@)^BWdY;tV2Y!BGV*~ZxE*-x0;l+4~t(Aj}dQ^*eh{PB1qz+B%!3DWPoIe zq@I{m6i{?g%vD@cl2Y zYNzj?Zc{y=3Rg{1ojxOe#_!B~H3~ItwJ5bOXOEqAIa{QTr+!8~Oubu!Q^QdsUlY<) z)eO_@Imdm@`CRdNqVwm@N1q?o64dh5s??^_HrGzpUer<43DN1&J)-NT`&N%y&qOat zZ%O~8eyD!G0l$HtLA4=^p{-$o5wVe;(F>ym<5R{DjfYG`O>UU9nsS?Zntn24F|#)- zHK#VWFwed~ctQU{@`Y6kO^YWM3zn*uF_zPCC3pmU+)Baffz>yJEFu&!Vl8VOYCVdS zMTQ~2*~r_3+kCfGvW>Exxp?|w{KX|ZO}j+94SRk23jw2pR;?@_EMPgH{w zkJAmOerGA?htAV3YA!F(FtjPUz;!PWrfS@dxLtP}aF=tBcK_j_=aKD6Jhpw@o}iMD z_k`<7_*0^%?oWrG={>7_F7Z6+1Cky?mb}o|KflKRF}?FU2k8TdGOw z=d_b)1?jx$2^kC-cV0oS++K}kUdU|CQpp`!YZH=S>j-(O%@ z&`@}$@NJQFQEo9`abn5AlIT+U(vUK;vTJ1<<=*8Bubp0he}jB8_}2Vw*E@rE&F{~@ zulu0(;bVnz#kVUSIH8@^evx zOhZ|teB+y@lT8)Ps?F6c8Z8a2x~=VPCT;!gR_&u5_8l{w?wu=Lm%0hNZ};r!3GdzC z`=sw^Uq-)Jf9b%kFbp-jS7vHd{h4RdCYihXxwRh z<@=2Znu(anBa=B(3R5-H2Gc_`E;AdmL37M=iSr`!Zx_xj^e#Fqt}NaD!TjUpvcz&F zMjtb>;;~A+`e^OwTG6`NdiRFI#>U13M1k8InJcM7u#HKG3g?5YE&<5^w$TM$gD6Ny zNJvR2NJ%MZ$jQiQ=&30vsOg#L=;-O_m}n?)ZtJz_`QsBtNls2lMY)HHYR_IODyqHM z2i4xqEHwX40UNI&8WQLv^cWv@2*RU*;nTo2dVuUgw(%Y&4{AvW#0%g+g|QAFg5ePm z5)qS-l97XL<*$)22oHZdat{O}fZ^j2;1LoNkr3ij2!lu(e1e0tf`li|ThJYHzAQwv z_kKdABFABRtv8m!A}&`Nl!!S)wWkMW;Al~XCs|jyPKN1NoqGG!RgAGw_X}b+``WuE zx4}7O?g!7V=RADh{B{0$?uVA41wCu`8{seVDq4pZ#Z~l?9)S^w`IT)WOEeH39;ht= zu1>^6grc}A92BG_05xzvL`Nue`TkyP4c=%qObZ{j9B{c3s-#U1M~lpG5@9Pq%q9A^ z5me$Sqtz*0F;~Qwohtm}8gT!t!bT@VfseyU1Ia@*s)xfkzavnV#s(MECaHv+O z>fr~^LNzK3;a#ToZs9WTm|mNF@nxx~jtLD{m2O{@Z7F>oV!`WU!X79xfi{u%N@AdNA|m{>DjJrt(U8@gKo8CN~W2;RerN~EF zEXIEq!MJTej`f(%Z&Cp*lVO*X#uA$g0s@PBm)Fm(90Q01@0{YiQ?sfWRd1=?e|ZDq z4r!pCF4qVc_*8o5!H1A@637)3u4CW-cR{&4(|W% zb%u73t&Y?;J4x-z`3;CLbIH($n6CwM*gs@SrjVVK3;O!NJR9N7X0syOhh&K^<;FM< zj(wkRO>7~vEgom(_0a1w%&WXna+=Bx5z-kT86TDH?a|7Xx-bHF_Kup8AEQplO2oMh#x}^Bi))_o)*h{ zI~nC{Ir7Zc?^6=}yvCS*yw+EJn>E%hLb*UmjW%9MTZp#)@X3{%Eq6ZAL;MR{S(Vn^ z6Fdp8Xg45ct%_5I-H$e)+nuAaqNOS+gZ<`X`ljhlIj@vDSt>iZeN4Yi%`f_NrmmUU zri@$fV`*`Rkln#m2z zxt)H|Ve?cWZM@?T795kp?UPfZ*Q-tMiWx8s`Y_dZzbH*#TOcyC7HD+Y!^}(!2* zykTR(RdDK&rupQD;n}6GW~s||rq(qju|vUporJAxvX{Gb>*5#CDacEUx})dZ7Ba%| zWDL#cS_2}p*J)h4*0V0VYjEaRHl12xaW;6(v?$gk?tQsDHlQ(c1FG{5>CNXYdto&! zk?-^#nQFMwTdzfbJbrJ?(>K)>GK%oM&*k;07k&i1M(%%ry6qz3sCz*EjgymH;(YhH z<5g6(0l`-tv{$2yCp^}?7Sr-_Q!l_3;4BBz@F2ENHU{nWn9mjGn`edh*?7Tc1>9F; zxx+C*8Ov^&y&tl}Y!gbAK8F~y1a_QvPe|`5%ME*AHH=_ZldK*SkTL&SPa6A{jXUM) zys_sXg~H9(Dr!yhFQ3O$Yo6bmXeC)T$ zzFhbDwTqZyJHi&Xv!;ROZnbF*tI3n1o%IufX!!$o%}W%OX&=bGl4Ue8(VkzApole7 zc-M800RIE#Z0y3*vAOao<2|b=Pk6ME56i@yx-T7g-WgL$VWD2uTz>~iq(6#<>GRi zQ{4GApJ&*mWhT0|iwQeWQk5fT*F-&@teqOA|1$U$p}kmL%`!Me-I-I z8*QK$icag|U6P8|8cSJV)9jS*f7p9}0r_+w#y<6KriQv}*ZB`jUwx`s>$5S@>KW+o zXv5Nn>4^<5TSo0sPly^!C?ESz_C3jT*|(tfw7g9;tEMQ1&5W15=-mbBamTU>pH^4@ zqhUt{uK6W=V-qMNS)YIYW&;WqTOX%UR=IfvvA}nA*15=Uxo}b3L3e2Klb=I`!+eMS z%jq{|^=cl=w`Q_l3C`G7t(b~gv@RKa50_vdl4u_;+<*$_o29gcj=vE@3W%-dmyIWX z6>pX<Z-o7YW+_4_g zyaAEqj3*Z*JBa3p zdBzjLcY<%}KfR-UBxA`A_ISB?X#>j1^2!LFotgh~tCqiaSumh(p?Xzsm{sLyt4bG} zeVqLBwbP}w#E0{V(ien|=d7Bp)&~3#`i2QO`7KuJK(NAs$`6kfFthUy%*&4((|--; z7o1^5%HFEK!8SaD0d*Y>SWsS+(`S%XDDB2y>rFBeZKtMYIl{vgS1igubCO~s!Bh7w$}t!UYV0CpLal z=qGn_v2}FSbaQob!z%HyMkMGQ+Ev>Ug|f$`P<3=gAROHsun|}o`&P1d!TPCjd9`gl zu_+X7U9owv(VJx=Tr?~k5IUy}um*`uWSbezxu8(i+6Y%SCr!(X!14i60Bx)bgaZGp zA$CX`LO`yN8{~v73L(&ghBUSa zJYMkl*<#vVE!K3xYNvta17gIcRC024+-?MDq@~M_M+=Eo-|;B9I4b@0IJ*AyoVBz^ z@5E>zUEOy)ryT50?sz~y{w!J%Zin3Jh|OMtfa)F?U2sM*NXv?y-3sMqsetOo))41Z zTpa%trfC1?bc!xkI=YUo${bquI0MagenopL_P+|(LfgCI!q0iyD`-Jsmo_tyxg+4N zD3_BKt`^u9;3|0zc@Diz6<8RX61=h1hR!0aH;efLS{-0J{42EDaQn^hb1rZNLu?5+ zw+HTma?-a!fWZY63d{-H-A9Fu&;oT*M7g@69PCk!$gM0C+cDTG>A8i4BXw%@pU#D$Ba+CmCm@|S?U2s`^IabZ}~fECWqyyIuZ zl{$y>lj5G>0mJ12mR77I+nOYRU~y@I{Rz0!5WlrGh_MGxU>^kzwiS{P8MPB4gbN22 z!krLNTnLu(w{qdi#M=6Rbr6Dp_Tn!b{wOy3FCswD|0WLC7ucdf+aMUuhllgwj3_w2 zz-BCLGZtHKY|XK>hL4LU!G&ziVmt*<5cqBNI@Y4SWst$8Wx;y!)xcx3?N~2_&kjMv zmH;3J+{O!V7#qNE93gYa9=ws@x6Pygu*+>tNo)uX5nI*7`W@Zuu{;qE z{D>@3ZjM&yKg@NwE7snL>j>-w*`Y!Z_y;P66nCh7vl?1E#Efeg5!&7sjzH_#pT$l` z*e`epad9A+7W{~D9@Ue(a1kS2P;O4Y1QDTtG1qp7)1K1Cmad5l17%QJxVfTK5RM2J z3s}YoVFJVvdzTU5NwR91CkxQ{@d-xcXP4-Wx2t1{;whGXymU;5|M?ytBwWo zmsC`6guT5EuxhKKPwS|k-DY|u+rhsiCbdDic%QJhMQ-;L^=9KwZwG^x6I*Q>WdTU) zj&O1Pi{yIS!M`Raw?rxdBd*J?&ZXHbUr}Wz0%U$HXCUr$QfyEq+*v;k0>;XIc zQz(Tcj(z?qoE!|X%^#EF=G74_BCuKma+aUQ!JAxfFAm0%Fd;4-HU-4A2p-tU@fiG0 z0eNhsHrpAQ|1iNWl&%frAlZ z*aA0gE}NE3Vu%DF0RJ}zsE%%ZbLfcXv%r3_%Lhj}@OxS~@eA?^@Ix~4p5QA$JA^B{ zB?4IWWDiXhmmgxcwURxgFRCt}?xcjUu|4hWg3$KX(1Cl~!6mH@$;+|JcuILXI5{9( zE!aIB>>bfkp0bB=CN#!kEz$bfX*N2oI!h9$f zBtQ7DR1#Z;kPt6O!Hf2CbhYs0bwqP)mv9n%PwQffJK4dGEfJhraC4PC1Zuk31P7;` zV*j$Qwi8;xchWfl(;^PJ6`UVok8nUZx}rh93Syg&E7WQG>*$>qy$8H1Vp8T1vZnaqpWPLz5XgG z?ql#@k^+jc0>?=HWnwG1lr_r5!2-0`*1-aa;J@gEKptY>=|(A>?Gs=I)f3(w4!-mT zXMwD3?Low!zAMJnS6y97)e-G#0lrgJJt=z#bPk`bt(DXXrBi~6CzOQ6Pf9AC5)%|W z0i2|mq=>MPxR}rhVWI83CsA-W?C@{rwZi6A{P*&18qY24|D!UnlMzcVQm1XvU?jb^ zri(Vhc?+_)Wyg_-lm#4ns7dw^96RO+t3zACwtv;?e_8X*B0az{oPSCPo5|29YgZ2o z7sLr9=%If_XZ-)L-Y7?`k^E=Poh)3yNitW23tIM&wF}CDeUm1fz!%1@s4WkUK>lHo zXbbnB#rC~94y&l7NJ$Pzy6>XEN-?!tg&=#y*_QMcR{26u@WC2jQ8u$<0PVWWjHBMcG3M~X~Py%R4$SBAOi9yW)S{efA;2uF*LU!ye zN_0d5m+xmD5^~9QN>J3Y%xdJ=OAN5RX}A*lRu~;dKm9~W8-BIvut<*R7uN?2VgpYH zPg-&2>Rfx)jBtC%#khG#5)51oMFYC+O-MqY+|Ta&TOrA}(lj$8&OMA(Q)b_JKCE?t zt0~4KzI^^$k!%+RGag@7FY^7ez%Wu~;62CbJJbYCE3Gj9xU!w%Z+$Z>y~hxZtQ%p* z9X22lS#AAqUa$U(__)5+XJycOOf>jrEKI)f74IuN{|Nf;;UkYoLW1iN=CoU+qnDB6 zDRXc0!MBC5{=h}y8QfQ~e`{YtMCQwLFDAo=LNdg1=RBHqsj|bc2s{t21+AX=dr^VX z@N@Iha;S;Dd0hLB%lgFl3r-$Yz#@^^vtHrPehCZyoz8TP9MK(6lc7JUG*q58Ma|0&; z-#|w`RpUNU>s!8%*YAJ9yJ{FM`*;f*#7YtXm*1nX?fpC6)GuC_gmvbt&K9?I@hq>6 zeyeeNy;JVr&spf*={WNGV*TTKhylAqutgSu3BK+A_L+cx_{Zcz;Zy``VOK^?hMqnP zm+v+%@cz47M>1Or?)hR|3jVwb*w_12j!}v5mR2H;--?dN#;ZKpF#@av?y++r zO{KkmzT4q%oa)4G2y{*#9!B1^kEhfpN=|Nq{SR&X-^>O4BW`~2OnH9R`!D=jDtTL- zds@}%hlTJja;BKpahJ55UlU+`e>vsZ6#gAqO_=;#SH9XuOzT%kdEGj7?Tf25{?~lh zLeozFf`-V;%Q$l~V#p&S&ta~u(eLiD(O=?mp1)Z0NgA#r^{#8m@-2G%J!m|8YJtQl zsDy)?^qB=~kzr9GatsmwGTcAZ=w8CVoMAp3vzniOBbo_hfZ2iy6Xm-{1&&$nOWybWeiqUSPQ;J4353eB-M6!fl1?6z? zl2pAF`W%$Q6@Cq2!EB?fL8q;yJ8G3Oy{ojp0@(wP_kLWB7(dYOa`z?i(9~1_ah