0% encontró este documento útil (0 votos)
315 vistas124 páginas

Python para Ingenieros Civilespdf

Este documento presenta un curso de programación en Python para ingenieros civiles. Introduce Python, incluyendo su historia, instalación e interfaz. Explica tipos de variables, referenciación vs. asignación, y expresiones matemáticas. También cubre estructuras condicionales, ciclos, estructuras de datos, funciones, archivos externos e interfaces gráficas. Finalmente, presenta aplicaciones de Python en ingeniería civil como resolución de sistemas de ecuaciones y análisis de secciones transversales.
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 DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
315 vistas124 páginas

Python para Ingenieros Civilespdf

Este documento presenta un curso de programación en Python para ingenieros civiles. Introduce Python, incluyendo su historia, instalación e interfaz. Explica tipos de variables, referenciación vs. asignación, y expresiones matemáticas. También cubre estructuras condicionales, ciclos, estructuras de datos, funciones, archivos externos e interfaces gráficas. Finalmente, presenta aplicaciones de Python en ingeniería civil como resolución de sistemas de ecuaciones y análisis de secciones transversales.
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 DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 124

PROGRAMACIÓN PYTHON PARA INGENIEROS

CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

CONTENIDO
1. Introducción a Python
1.1 Breve historia de Python
1.2 Instalación de Python v. 3.7.x
1.3 Uso del intérprete
1.4 Ayudas

2. Variables y su referenciación
2.1 Tipos de variables
2.2 Referenciación vs. Asignación
2.3 Expresiones matemáticas
2.4 Funciones y biblioteca math

3. Entrada de datos y estructuras condicionales


3.1 Instrucciones print() e input()
3.2 Operadores booleanos e instrucciones if y else

4. Circuitos
4.1 Instrucción for
4.2 Instrucción while

5. Estructuras de datos
5.1 Arreglos
5.2 Listas
1
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
5.3 Tuplas
5.4 Matrices
5.5 Diccionarios

6. Procedimientos, funciones y archivos externos


6.1 Procedimientos y funciones
6.2 Archivos secuenciales

7. Interfaces gráficas de usuario con EasyGUI


7.1 Instalación de EasyGUI
7.2 Uso de elementos GUI con EasyGUI
7.3 Aplicación con GUI

8. Aplicaciones en ingeniería civil


Aplicación 1. Avión vs. Misil
Aplicación 2. Problema SI-NO
Aplicación 3. Problema trigonométrico
Aplicación 4. Problema de mínimos cuadrados
Aplicación 5. Raíz cuadrada por el método iterativo
Aplicación 6. Solución de un sistema de ecuaciones lineales por eliminación gaussiana
Aplicación 7. Propiedades geométricas de una sección plana
Aplicación 8. Menú de opciones para una aplicación
Aplicación 9. Ensaye AASHTO
Aplicación 10. Ensaye de penetración estándar SPT
Aplicación 11. Granulometría de los suelos
Aplicación 12. VRS vs. CBR

9. Problemas propuestos
Problema 1. Cálculo de la raíz cúbica por fórmula iterativa
Problema 2. Raíz cuadrada con otro método iterativo
Problema 3. Sucesiones
Problema 4. Logaritmo de X
Problema 5. Interpolación de Lagrange
Problema 6. Parábola de mínimos cuadrados

importante para hacer ejecutables

https://www.youtube.com/watch?v=FFE1VNMAZfc

2
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
1. INTRODUCCIÓN A PYTHON

1.1 Breve historia de Python

Python es un lenguaje multi-paradigma y multi-plataforma creado por Guido Van Rosum en


Holanda en 1986 y que fuertemente se ha convertido en un lenguaje muy utilizado en el mundo,
debido a la reutilización del código, a una sintaxis poco compleja, a la generación de diversas
biblio- tecas para resolver cualquier problema de científico o de ingeniería, a su uso en diversos
ambientes operativos y a su implementación con diferentes paradigmas de programación
reconocidos en el desa- rrollo de aplicaciones: estructurado, orientado a objetos, funcional, lineal.

Se recomienda visitar el blog http://python-para-impacientes.blogspot.com, el cual contiene


diversos tutoriales, información fundamental para comenzar a programar, para el manejo de
bibliotecas y apli- caciones de terceros, instrucciones para la instalación de utilerías e información
para el aprendizaje de herramientas desarrolladas por terceros.

3
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
1.2 Instalación de Python v. 3.7.x

Se recomienda descargar la última versión para el sistema operativo Windows, haciendo clic en el
botón Python 3.7.x.

4
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
1.3 Uso del intérprete

Cuando se ejecuta Python 3.7.x se abre la siguiente pantalla, figura 1, que es el Shell o intérprete
que se va a encargar de transformar las instrucciones escritas en el editor para procesarlas, detectar
e indicar errores y mostrar la ejecución del programa (run).

Figura 1. Shell o intérprete de Python 3.7.0

Mientras se encuentra uno en el Shell, se puede interactuar con el lenguaje escribiendo directamente
en el cursor (>>>) y observar los resultados mostrados.

Para crear un programa usando el Python’s IDLE (Integrated Development and Learning Environ-
ment), se recurre a File-New file y se abre la ventana de edición para comenzar a escribir las instruc-
ciones, como se observa en la figura 2.

5
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 2. IDLE

La ventana que se muestra dentro del IDLE se invocó mediante Help-About IDLE, y se puede obser-
var la información de la licencia (License), derechos de autor (Copyright), el archivo Leeme
(Readme), noticias (News) y los créditos (Credits) tanto para Python, Tk y IDLE.

6
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
1.4 Ayudas

Toda la información de ayuda que se requiera para el IDLE, el mismo lenguaje, etc., puede ser acce-
sado desde Help-IDLE Help, Help-Python Docs F1, como se observa en la figura 3.

Figura 3. Invocado de la ayuda

También se puede encontrar bastante documentación (en inglés) en la página de Python


(www.python.org) en Documentation.

Existen muy buenos libros comerciales (ver figura 4) y algunos disponibles en internet de forma
gratuita, y otros impresos, recomendando los siguientes:

1. Resolución de problemas para ingenieros con Python® estructurado de Rosalía Peña de Garceta
Grupo Editorial (2016) <Impreso>.
2. Learning Python de Fabrizio Romano de Pack Publishing (2015) <Gratuito y PDF>
3. Python for Everybody «Exploring Data Using Python 3» de Charles Severance (2016) <Gratuito
y PDF>
4. Python 3 al descubierto de Arturo Fernández Montoro de Alfaomega (2012) <Impreso>

Figura 4. Material bibliográfico de referencia


7
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
2. VARIABLES Y SU REFERENCIACION

2.1 Tipos de variables

En programación, una variable es un identificador (nombre) que se referencia a un lugar en


la memoria RAM de la computadora para almacenar un valor; El identificador es el nombre que el
programador escoge para la variable respetando las reglas del lenguaje; en Python, el nombre de la
variable debe empezar con una letra, puede ser un conjunto de hasta 256 caracteres combinados de
letras, números y algunos caracteres especiales que no sean usados dentro de la sintaxis del lenguaje
(_ «guión bajo», por ejemplo). El identificador es sensible a mayúsculas y minúsculas (case
sensitive), lo que significa que una variable identificada con mayúsculas es diferente de otra con el
mismo nom- bre, pero escrito en minúsculas, por ejemplo, RADIO es diferente de radio y de Radio
o de RaDio. El nombre seleccionado para la variable debe ser acorde al contexto de lo que
almacenará y respetarse durante toda la escritura del programa. Por ejemplo, si se requiere calcular
el área de un trapecio, donde se han referenciado previamente los lados del mismo, el identificador
puede ser el siguiente: AreaTrapecio = (BaseMayor+BaseMenor)*Altura/2; más adelante se
comentará sobre la forma de escribir las expresiones matemáticas mediante los operadores
aritméticos y funciones matemáticas.

Si una variable no se identifica previamente y se usa en una expresión, causará un error al


interpretar el Shell de Python al programa. En el ejemplo anterior, si a Altura no se le definió un
valor, el intérprete causará error al intentar cargar en memoria a AreaTrapecio. Algunas palabras
reservadas no pueden ser usadas como nombre de variables, por ejemplo, lambda es una palabra
reservada en Python.

El valor o valores que puede almacenar una variable pueden ser de tipo numérico (number),
carácter (string), lógico (booleano) o combinado. El tipo numérico puede ser entero (int) o flotante
(float); sin necesidad de definir el tipo, Python lo sabe automáticamente, diferenciando int de float
por el punto decimal (.)

La sintaxis para referenciar una variable es: variable=expresion, donde expresión puede ser
una constante, una variable, una función, cualquier conjunto de constantes, variables, funciones o
expresiones combinados con los operadores propios de su tipo y siguiendo las reglas adecuadas de
sintaxis (Peña, 2016).

Algunos ejemplos de variables y expresiones, relacionados con el diseño de elementos de


concreto reforzado, según NTC-2017:

fbiprima_c=0.85*fprima_c
p_min=0.7*math.sqrt(fprima_c)/fy
p_bal=fbiprima_c/fy*beta1*6000/(6000+fy)
p_max=0.75*p_bal
FR_flx=0.90
MR=FR_flx*fbiprima_c*base*peralte**2*q*(1-0.50*q)

Los operadores matemáticos y funciones los vamos a comentar más adelante. Obsérvese
que en la raíz cuadrada usamos math.sqrt().

8
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
2.2 Referenciación vs. Asignación

Una referenciación no es una expresión matemática; solo indica un proceso de lectura/escri-


tura en memoria. El intérprete consulta el valor de los datos referenciados por las variables a la
dere- cha del signo igual, realiza las operaciones indicadas en la expresión, busca el resultado en
memoria, lo crea si este no estaba y hace que la variable de la izquierda del signo igual apunte hacia
dicho dato (escribe en la variable la posición del dato). Si existía la variable de la izquierda la
modifica. Si no existía, la crea. Si tras el proceso de referenciación de una variable, el dato al que
apuntaba anterior- mente queda inaccesible (ninguna otra variable lo apunta), el recolector de
basura lo elimina, libe- rando la zona de memoria que ocupaba. (Peña, 2016)

Una variable en Python es un identificador que referencia a una posición de memoria.


Puesto que una posición puede estar apuntada por varios identificadores, podemos considerarlos
alias, es decir, pseudónimos.

La función id() proporciona la posición de memoria del objeto al que referencia la variable
indicada como argumento de la función. La posición de memoria que se asigne depende de los pro-
gramas en ejecución en el momento de arrancar el entorno Python y de lo que se haya realizado en
Python con anterioridad.

La función type() indica el tipo de la constante, variable o expresión que se quiera consultar.

Figura 4. Ejemplos de id() y type()

La figura 4 muestra algunos ejemplos del uso de id() y type() ejecutados directamente en el
Shell.

9
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
2.3 Expresiones matemáticas

Una expresión matemática en un lenguaje de programación requiere de operadores,


variables y funciones para indicar la operación de sus componentes y generar un resultado numérico
que se almacenará en la memoria a través de la variable referenciada.

Los operadores aritméticos como suma (a+b), resta (a-b), multiplicación (a*b), división real
(a/b) y elevar a una potencia (a**b) están disponibles en todos los lenguajes, y Python no es la ex-
cepción; sin embargo, existen otros operadores de uso no cotidiano que están disponibles en el len-
guaje: división entera (a//b), resto de la división entera o módulo (a%b); para modificar la jerarquía
de las operaciones (también llamado precedencia, prelación o prioridad) ímplicita en el lenguaje,
sólo se usan los paréntesis () como signos de agrupación.

La precedencia de las operaciones numéricas se muestra en la tabla no. 1.

Tabla 1. Orden de precedencia de las operaciones en Python.


Precedencia Operación Resultado
1 -x Cambio de signo
1 +x Operador identidad (no hace nada)
2 x+ Suma x e y
y
2 x- Resta de y a
y x
3 x* Multiplica x por y
y
3 x/ División real
y
3 x// División
y entera
3 x Resto de la división entera de x/y
%
y
4 x**y=pow(x,y) Elevación de x a la y
5 (expresión) Paréntesis: fuerza el orden de ejecución

Se recomienda poner solo los paréntesis necesarios en las expresiones, pero en operaciones
complejas, los paréntesis aumentan legibilidad.

Tanto el conjunto de los números enteros como el de los reales, (float), en matemáticas
pueden ir desde -∞ a +∞. Además, mientras que para cualquier entero existe un anterior y un
siguiente, entre dos reales cualesquiera existen infinitos números reales. La implementación
completa del tipo float en Python depende del sistema operativo sobre el que trabaja el Shell.
Generalmente está representado en 8 bytes, con un rango de valores que va desde 1.7x10 -308 a
1.7x10+308, para un sistema operativo Windows de 64 bits. En caso de presentarse un
desbordamiento, el lenguaje mostrará una salida inf (infinite). La representación de un flotante en
formato de notación científica sustituye el «x10x» por
«ex». Algunos ejemplos se muestran en la figura 5 ejecutados en el Shell.

10
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 5. Ejemplos de operaciones en el Shell.

En una de las entradas (la séptima) puede observarse que al pedirse el resultado de pi/2,
donde pi=3.141592657, y se invoca mediante la biblioteca (library) math, se presenta un error al no
haberse invocado primero usando la instrucción import, misma que más adelante la estudiaremos.

11
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
2.4 Funciones y biblioteca math

Una función es un objeto con un nombre reservado que permite obtener un valor numérico
de uno o varios parámetros encerrados dentro de paréntesis; por ejemplo, las funciones
trigonométricas seno, coseno, tangente son definidas mediante las funciones sin(), cos() y tan(),
cuyo parámetro que requieren es el valor de un ángulo expresado en radianes. Para ocupar estas
funciones, se requiere, primero, importarlas de la biblioteca math, pues es un archivo externo de
extensión .py alojado en la carpeta de instalación de Python y estará disponible en el Shell cuando
sea invocado. Su llamado o invocado se puede dar de las siguientes formas: import math, import
math as m, from math import sin.

La primera forma llama a la biblioteca math y pone disponible todas las funciones en
memoria siempre y cuando se llamen anteponiendo math al nombre de la función, por ejemplo,
math.sin(math.pi/4) regresa el flotante 0.7071067811865475. La segunda forma es similar a la ante-
rior pero usa el alias m para anteponerse en el nombre de la función, por ejemplo,
m.sin(m.pi/2)=1.0. La tercera forma pone sólo disponible en memoria a la función que se importa,
por ejemplo, sin(45*180/math.pi)=0.7071067811865475, solo dará este resultado si se ha
importado la biblioteca math previamente, si no mostrará un mensaje de error. Algunas funciones se
muestran en la tabla no. 2.

Tabla 2. Algunas funciones disponibles de la biblioteca math.


Función Ejemplo Resultado COMENTARIO
sqrt(a) math.sqrt(4) 2 Raíz cuadrada
.
0
sin math.sin(0) 0 Seno del ángulo a
(a) .
0
cos(a) math.cos(0) 1 Coseno del ángulo a
.
0
tan(a) math.tan(45*math.pi/ 1 Tangente del ángulo a
180) .
0
pi math.pi 3.141592653589793 π
asin(r) math.asin(1) 1.5707963267948966 Arco seno de la relación r
acos(r) math.acos(0) 1.5707963267948966 Arco coseno de la relación
r
atan(r) math.atan(1) 0.7853981633974483 Arco tangente de la
relacion r
log(x) math.log(1.5) 0.4054651081081644 Logaritmo base e de x
log(x,b) math.log(1.5,2) 0.5849625007211562 Logaritmo base b de x
log10(x) math.log10(1.5) 0.17609125905568124 Logaritmo decimal o base
10
exp(x) math.exp(1) 2.71828182845904 Constante de Euler o
número e
factorial(n) math.factorial(5) 1 Factorial de n
2
0
ceil(f) math.ceil(5.68) 6 Próximo entero
floor(f) math.floor(5.68) 5 Entero anterior
hypot(x,y) math.hypot(3,4) 5 Hipotenusa de x e y
12
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
.
0

Existen otras funciones disponibles sin recurrir a la biblioteca math como abs(), round(),
int() que permiten efectuar operaciones sobre números para encontrar el valor absoluto, redondear a
las cifras decimales que se indiquen y hallar la parte entera de un número decimal.

Existen otras bibliotecas que deberán ser llamadas en el momento que se deseen usar en la
escritura de un programa; algunas están colocadas en la carpeta lib que se generó al instalar Python
3.7.0. Otras bibliotecas creadas por terceros deberán descargadas e instaladas con el paquete de ins-
talación de Python (Python Install Packing) o comando pip desde la línea de comandos.

13
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
3. ENTRADA DE DATOS Y ESTRUCTURAS CONDICIONALES

3.1 Instrucciones print () e input()

Un paradigma de programación muy elemental y que permite crear programas de forma muy
sencilla, sin necesidad de estructurar un diagrama de flujo complejo o elaborar un algoritmo
compli- cado, es la programación secuencial, la cual se basa en tres bloques básicos (ver figura 6):
Lectura >>> Proceso
>>>Salida o
esquemáticamente:

Figura 6. Proceso secuencial

Lo importante es establecer cuáles son las variables que deberán estar en el bloque de lectura
de datos iniciales, cuáles en el proceso mediante nuevas variables y sus expresiones, y cuáles en el
bloque de salida de resultados.

La lectura de variables de entrada las realizaremos mediante la referenciación con la instruc-


ción input(), cuya sintaxis simple es: variable=input("mensaje"); después del mensaje, formado por
una cadena de texto (string), el valor se referencía a la variable al introducirlo desde el teclado; la
variable referenciada es de tipo string y se deberá convertir a número, si así se necesita, mediante
la función eval() o específicamente para volverlo número flotante con float().

Para mostrar los resultados calculados en el proceso mediante expresiones referenciadas a


nuevas variables, se utiliza la instrucción print(), misma que se utiliza respetando la siguiente
sintaxis simple: print("rótulo {:formato}".format(variable1),...). La variable1 puede ser
representada con un formato mediante la función format() para ajustar su representación de salida
mediante un dato tipo conjunto {} dentro de una cadena de texto. El rótulo es el texto que se asocie
al resultado de la variable para que el usuario sepa que obtiene el programa.

Veamos el siguiente ejemplo: para calcular las raíces de una ecuación cuadrática de la forma

, se utiliza la fórmula general, cuyas expresiones matemáticas son:

En este problema, identificamos a los coeficientes A, B y C como los datos de entrada, a x1 y


x2 como las variables referenciadas en el proceso mediante sus expresiones respectivas, y a las mis-
mas para mostrar los resultados en el bloque de salida.

El programa y su corrida (run) en Python 3.7.0 se muestra en la figura 7.


14
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 7. Programa y corrida para raíces de una ecuación cuadrática

En el programa anterior se observa al inicio el uso de las comillas triples (""") para
documentar, tanto al programador como al futuro usuario del programa. Es recomendable usar esta
técnica y, ade- más, realizar comentarios con el símbolo #. Una variante del programa con la salida
formateada y comentarios, sería la que se muestra en la figura 8.

Figura 8. Programa EcuacionCuadratica.py modificado con comentarios y formato

Mas adelante modificaremos este programa para que calcule las raíces reales e imaginarias

(raíces complejas) a través de la evaluación del discriminante .


15
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
En mecánica de suelos, cuando se requieren determinar las volumetrías y gravimetrías de un
suelo experimentado en el laboratorio mediante sus pesos en aire, en aire con parafina y en agua con
parafina de una muestra cúbica inalterada, de la cual se conoce su humedad w y su densidad de
sólidos Gs así como la densidad de la parafina dp, se sigue un procedimiento de cálculo para obtener
los parámetros básicos, que son: la relación de vacíos (es), la porosidad (ns) y el grado de saturación
(Ss). A continuación, se presenta el modelo en Mathcad 14 para resolver este problema; elaborar el
pro- grama en Python; los resultados deberán mostrar las unidades de las variables, ver figura 9.

16
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 9. Relaciones volumétricas y gravimétricas modeladas en Mathcad

El programa se muestra en la figura 10.

Figura 10. Programa Volumetrías y Gravimetrías

17
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

La ejecución del programa se ve en la figura 11.

Figura 11. Ejecución del programa Volumetrías y Gravimetrías

Como se puede ver, en este programa se utiliza la función eval() en lugar de float() y prácti-
camente se obtienen resultados similares. Si no se utilizan estas funciones antes de referenciar a la
variable introduciendo los datos desde el teclado mediante input(), se carga un valor textual a las
variables y no se pueden realizar las operaciones matemáticas.

Como ejercicio, se deberá modificar el programa anterior para que les solicite el lugar de
donde se obtiene la muestra y, además, muestre los resultados de los pesos volumétricos del suelo
en estado natural y en estado seco, los volúmenes de sólidos, agua y aire, con sus respectivas
unidades.

Realizar un programa que determine la humedad de un suelo calculado con el método del
horno de convección eléctrica, en donde se solicita el peso de la cápsula (tara, en grs), el peso de la
cápsula más suelo húmedo (en grs) y el peso de la cápsula más suelo seco (en grs) después de
secado en el horno durante 24 horas a 60°C. La humedad del suelo se calcula con la expresión:

Ejemplo, tomado de un modelo de Mathcad 14, ver figura 12:

Figura 12. Cálculo de la humedad de un suelo

18
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
3.2 Operadores booleanos y estructuras if y else

En un diagrama de flujo, dentro del bloque de procesos, hay ocasiones que se requiere tomar
un camino a partir de una bifurcación, o condición matemática, misma que requiere ser evaluada
mediante operadores lógicos (o booleanos, en honor de Alfred Boole). Esquemáticamente, se vería
representado como se muestra en la figura 13.

Figura 13. Bloque de condición

La evaluación de la condición solo tiene dos posibles respuestas: Si (True) o No (False). El


flujo del programa dependerá del valor booleano. Además, cuando se habla de operaciones lógicas,
existen los operadores de comparación: igual (==), mayor que (>), menor que (<), mayor o igual
que (>=), menor o igual que (<=), no es igual o diferente (!=); estos operadores tienen la misma
jeraquía, se evalúan de izquierda a derecha y son binarios por que requieren de dos valores para
realizar la comparación; existe un operador unitario que es la negación o not().

Si se requiere componer operaciones lógicas entre más de dos operaciones binarias, se


utilizan los operadores and (conjunción) y or (disyunción); estos operadores, y otros
complementarios, exis- ten a nivel de bits, pero no los utilizaremos en nuestra programación.

Si D≥0, tenemos soluciones reales, si no, soluciones complejas de la forma R±Zj, donde j2=-
1; para usar expresiones complejas, se requiere importar la biblioteca cmath antes de usarla en las
expresiones. Para evaluar la condición, se requiere de la instrucción if, cuya sintaxis es:
if condicion:
operaciones1 #si condicion es True
else:
operaciones2 #si condicion es False

En esta estructura, se requiere la identación o sangría para el bloque de operaciones1 debajo


de la instrucción if y de los dos puntos (:) para identificar el bloque y ejecutar operaciones1 si la
condición es True.

La instrucción else: es opcional, pero se recomienda colocar si se quiere controlar mejor el


flujo del programa para ejecutar el bloque de operaciones2; al igual que la instrucción if, se
requieren los dos puntos (:) y la identación (sangría). En algunos casos no será necesario utilizar la
instrucción else:, como veremos en algunos ejemplo más adelante.

En el ejemplo de la solución de la ecuación cuadrática, el valor de la discriminante conduce


a las soluciones reales o complejas: .

Modificaremos el programa EcuacionCuadratica.py usando matemática compleja para que


muestre los resultados con el imaginario j; esta variable reservada sustituye a i2=-1 de la matemática
compleja tradicional, observando en la figura 14 el código fuente y su ejecución.

19
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 14. Programa fuente y ejecución de la fórmula general para ecuaciones cuadráticas

La ecuación de tercer grado a3x3+a2x2+a1x+a0=0 puede resolverse con las ecuaciones dedu-
cidas por Tartaglia y dadas a conocer por Cardano, que se resumen como el método de Tartaglia-
Cardano; la secuencia de operaciones requiere de conocer los coeficientes a0, a1, a2 y a3 como datos
de entrada; los resultados de x1, x2 y x3 requieren de la evaluación y comparación de un conjunto de
expresiones, como se muestra en el documento «Ecuaciones de tercer grado» de Wikilibros. Clic
aquí para acceder a la información.

El programa TartagliaCardano.py , ver figura 15, presenta las soluciones a la ecuación


cúbica efectuando las pruebas recomendadas en el documento. La corrida del programa para las
siguientes ecuaciones se muestra en la figura 16:
a) 54x3-81x2-18x+40=0
b) x3-3x2+3x-1=0
c) (x2-5)(2x+1/3)=0
d) (π+x)(π-x)(3x-π)=0
20
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
e) 4x3-5x2+10x-19=0

Figura 15. Programa para solucionar ecuaciones cúbicas por las fórmulas de Tartaglia-Cardano

21
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 16. Ejecución del programa TartagliaCardano.py

22
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
En el tema de clasificación de suelos y específicamente en los límites de consistencia o de
Atterberg de Mecánica de Suelos, cuando se requiere clasificar un suelo fino, se necesita localizar
una región en la carta de plasticidad de Casagrande (1948) para conocer la naturaleza del suelo a
partir del límite líquido (LL) y el índice plástico (IP). En 1977, Howard definió la línea U
(IP=0.9LL- 8) y ASTM adoptó la nueva carta de plasticidad con la norma ASTM D-2487 (figura 17);
Polidori (2009) redefinió la carta de plasticidad, aunque no la ha adoptado aún ASTM (figura 18).

Figura 17. Carta de plasticidad modificada de Howard

Figura 18. Carta de plasticidad modificada por Polidori

A continuación, se muestra (figura 19) el programa en Python y su ejecución para clasificar


el suelo fino usando Polidori; a partir de la lectura de las variables LL e IP, y calculando las
ecuaciones de las rectas de la línea U (IP_U), línea 0.5C (IP_5C), línea C (IP_C) y la línea
punteada (IC_pun- tos=0.55LL-11) así como LL>50, se determina la clasificación del suelo fino,
mismo que se almacena en la variable de tipo cadena o string referenciada como Suelo.

23
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 19. Programa fuente y ejecución de la carta de Polidori (2009)

24
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
4. CIRCUITOS

4.1 Instrucción for

Cuando en un programa se requiere repetir una serie de operaciones un número determinado


de veces, la instrucción for es la más recomendada para realizar tal acción. Su diagrama de flujo
puede representarse de la siguiente forma:

Figura 20. Bloque de circuito for

Normalmente se recurre a una variable iterativa que lleve el conteo de las repeticiones;
cuando se alcance el último valor de la iteración, se continua con el flujo del programa. Esta
estructura tam- bién recibe el nombre de circuito, bucle o ciclo for.

Hay varias formas de realizar los circuitos, pero la forma más sencilla es utilizar una lista,
que es una variable especial que más adelante utilizaremos, pero que por el momento generaremos
con la función range(). Por ejemplo, la suma de los primeros n términos puede expresarse
matemáticamente

como: ; si utilizamos una variable auxiliar para ir acumulando la suma de


los términos, llamada suma, referenciándole un valor inicial de cero y participando dentro del
circuito, obtendremos un algoritmo para representar dicha sumatoria. Por ejemplo, si n=10, la suma
de 1 a 10 es igual a 55. La variable suma recibe el nombre de acumulador. Si la variable se utiliza
sólo para contar, como usaremos más adelante en la otra estructura repetitiva, recibe el nombre de
contador. El programa y su corrida se muestra en la figura 21.

Figura 21. Programa Suma.py

Puede observarse que la función range() genera una lista de 1 a 10, si se incrementa el
último número en 1; la variable k es la variable iterativa y se sustituye temporalmente por los
valores de la lista (de 1 a 10); el acumulador suma inicia con cero y va acumulando los valores de k.
25
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Como reco- mendación, cualquier sumatoria matemática puede representarse con un acumulador,
un valor final

26
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
incrementado en uno y un circuito que acumule a la expresión a evaluar; en el siguiente ejemplo,
pueden verse los elementos comentados arriba tanto en la expresión abreviada (sumatoria), como en
su desarrollo y la representación en otras variantes, que conducen al mismo resultado, según se ve
en la figura 22. Su programa y corrida se muestran en la figura 23.

Figura 22. Representaciones de la sumatoria

Figura 23. Programa y corrida de Suma.py

Los circuitos for pueden anidarse, es decir, un bucle puede estar dentro de otro u otros
bucles, respetando la ejecución del más interno hacia el más externo. La siguiente expresión
incorpora dos

sumatorias: . Su programa y ejecución se muestra en la figura 11.

Figura 24. Programa y corrida de Suma2.py


27
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
4.2 Instrucción while

A diferencia de for, cuando en un programa se requiere repetir una serie de operaciones


donde se desconoce el número de veces, pero el control del ciclo depende de una condición, la
instrucción while es la más indicada para realizar tal bucle. Su diagrama de flujo puede observarse
en la figura 25.

Figura 25. Bloque de circuito while

Normalmente se recurre a una variable de control que permita valorar la condición, para que
el circuito se realice mientras la condición es verdadera (True). Esta estructura también recibe el
nombre de circuito while, y se debe ser muy cuidadoso en la definición de la condición (o
condiciones) de la variable de control para que se pueda salir del circuito, porque se corre el riesgo
de quedar en un circuito infinito o generar un desbordamiento (inf).

Esta estructura es muy utilizada para repetir procesos o partes de un programa hasta que se
oprima determinada tecla o se establezca cierta condición. Por ejemplo, el programa EcuacionCua-
dratica.py puede modificarse para que se repita hasta que se oprima una tecla diferente de "S", de la
forma que se muestra en la figura 26.

Figura 26. Programa EcuacionCuadraticaWhile.py

En el programa anterior, la variable de control es tecla, es de tipo string y se introduce desde


el teclado. La condición de repetición es tecla=="S" or tecla=="s". Cuando se oprima una tecla
diferente, el circuito termina.

En ciertos problemas de métodos numéricos, se requiere determinar la raíz de una función


no polinómica, y el proceso debe repetirse hasta que se cumpla cierta condición de evaluación de la
función, por ejemplo, que se aproxime a un valor cercano a cero establecido por un número muy
pequeño. El método de la secante permite obtener mediante aproximaciones sucesivas a partir de la
evaluación de la recta secante que intercepta dos puntos sobre la curva, acercándose a la solución
28
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
mediante un proceso iterativo. El pseudo programa en Mathcad 14 mostrado en la figura 27 permite
visualizar el resultado la raíz de la función y(x)=exp(-x)-π, cuya gráfica se muestra ahí mismo.

Figura 27. Pseudo programa Secante.xmcd

El programa en Python y su corrida se muestran en la figura 28.

29
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 28. Programa MetodoSecante.py

Algunos ejemplos del uso de las dos instrucciones repetitivas se muestran en la figura 29.

El primero es para calcular el factorial de un número mediante la expresión:

Figura 29. Programa fuente y corrida del factorial de un número

En este programa puede observarse el uso de la función type() para verificar el tipo de
variable, el uso de f como variable para referenciar el producto de la variable iterativa i, n con un
valor inicial float para servir como variable de control en el segundo circuito while() y la función
eval() para evaluar el tipo de dato que se introduce desde el teclado con la instrucción input().

Así como se dijo que para una sumatoria se requiere un acumulador, para una multiplicatoria
se requiere una variable que registre el producto (multiplicador) en cada vuelta del circuito, como se
observa en el cálculo de la multiplicatoria de 1 a 10, ver figura 30, para su pseudo-programa en
30
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Mathcad 14 y el programa en Python.

Figura 30. Pseudo programa Mathcad y programa fuente de la multiplicatoria de un número

Para calcular las cifras decimales del número pi (π), existe una serie infinita propuesta por
James Gregory y Gottfried Leibniz expresada por la siguiente sumatoria; en este ejemplo se calcula
para un máximo de k = 1e6:

El programa en Python y su corrida se muestran en la figura 31.

31
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 31. Programa fuente y corrida del cálculo de 𝜋 con la fórmula de Gregory-Leibniz

5. ESTRUCTURAS DE DATOS

5.1 Arreglos

En programación, un arreglo (array) es una variable que permite almacenar más de un


número en una posición secuencial referenciado a un solo identificador. La posición puede ser en
una dimen- sión, por lo que el arreglo recibe el nombre de arreglo unidimensional o vector. Si la
posición se refiere a dos dimensiones, fila y columna, el arreglo es bidimensional y se conoce como
matriz. En algunos lenguajes al vector se le conoce como lista y a la matriz como tabla.

La posición dentro del vector o matriz se llama mediante variables enteras, que en la
matemá- tica formal se conocen como subíndices; por ejemplo, Aj es una variable con subíndice
entero j que puede almacenar el número de datos que tome j, comenzando con cero (0). En pseudo
programación, la variable j es una variable de rango, y no forzosamente debe ser entera; pero si se
usa como subíndice de un arreglo, lo deberá ser.

Por ejemplo, si Aj, para j=0,1,2,..,10 va a almacenar los valores 0, 0.25, 0.50,
1.00, ... , 2.50, se representaría matemáticamente como: Aj=0.25*j y en pseudo progra-
mación se escribiría como se observa en el extremo derecho de este párrafo.

Puede verse que A almacena 11 datos numéricos tipo float, y en cada posición j,
el valor depende de la expresión 0.25*j.

Para llamar a un elemento de A; por ejemplo 0.75, vemos que su posición es 3,


por lo tanto, A3=0.75; así, podemos llamar a cualquier elemento de A con su subíndice,
siempre y cuando esté en el rango de 0 a 10.

Cuando el arreglo es bidimensional, por ejemplo, una matriz rectangular de 6 fi-


las, 11 columnas, se identificaría con una variable y se requerirían dos subíndices para
indicar las filas y columnas; por ejemplo Xi,j=i/(j+1)+j/(i+1). En pseudo programación
se requerírian dos variables de rango, por ejemplo, i:=0,..,5 y j:=0,...,10. La representa-
ción gráfica de una matriz, en Mathcad 14, es una superficie de contorno o una curva
tridimensional como se observa en la figura 32.

32
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Un elemento de la matriz se puede llamar mediante los subíndices en el orden fila, columna
separados por una coma; por ejemplo, el elemento X3,5=-0.75.

Para trabajar este tipo de estructura de datos en Python, es necesario revisar las listas (list), tuplas
(tuple), lista de listas (matrix) y diccionarios (dict), así como algunas funciones especiales
apropiadas para el tratamiento de estas variables iterables.

5.2 Listas

Una lista es una colección ordenada de objetos, similar al array dinámico empleados en otros
lenguajes de programación. Puede contener diferentes tipos de objetos, es mutable y Python nos
ofrece una serie de funciones y métodos integrados para realizar diferentes tipos de operaciones.
(Fernández-Montoro, 2012).

La sintaxis de una lista es: identificador=[elemento0, elemento1, ...]; las listas son iterables
y mutables. Los valores de las listas pueden ser accedidos utilizando el valor del índice que ocupan
en la misma.

Algunos métodos más utilizados en el proceso de las listas son:

a) append(): para añadir e insertar un elemento al final de la lista.


b) insert(): inserta un elemento en la posición que indique el subíndice.
c) del(): borra un elemento de la lista indicado por el subíndice.
d) len(): devuelve el número de elementos de la lista.
e) remove(): elimina un elemento de la lista a través de su valor.
f) pop(): elimina un elemento indicado por el índice y devolviendo el elemento.
g) sort(): ordena la lista y quedará modificada.
h) sorted(): ordena la lista pero no la modifica. Puede usarse el argumento reverse para
ordenar de mayor a menor.

En el programa de la figura 33 se observa el uso de las funciones y métodos comentados.

Figura 32. Ejemplo de una matriz en Mathcad y su representación gráfica


33
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 33. Funciones y métodos de listas

El siguiente problema se deberá programar en Python: «Suponga que tenemos las


coordenadas de cinco puntos en el plano x, y. Nos interesa encontrar la distancia entre los dos
puntos más distantes entre sí. Los cinco puntos son: P1(-0.94, -3.22), P2(-4.02, 8.17), P3(7.07, -
9.11), P4(5.49, 8.76),
P5(0.20, 4.45). Determinar la distancia entre los dos puntos más alejados. Asegúrese que ha compa-
rado todas las posibilidades (10 en total).»

34
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 34. Programa y ejecución para determinar la distancia máxima entre coordenadas

Como se observa en el programa de la figura 34, se controlan los subíndices de los vectores
x e y mediante las variables i y j haciendo el recorrido de 0 a la longitud (len()) de x, en el caso de i,
y de i+1 a la longitud de y, en el caso de j. La distancia entre los puntos se calcula con

La función range() crea una lista de 0 a len(x): [0,1,2,3,4,5].

35
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
5.3 Tuplas

Una tupla (tuple) es una colección de objetos de diferentes tipos, usando internamente un
array de objetos que almacena referencias hacia otros objetos. Las tuplas se declaran con paréntesis
(), entre los cuales deben separarse por comas (,) los elementos que van a formar parte de ella. Los
elementos de las tuplas son accesibles a través del índice que ocupan en la misma, igual que en un
array. Este tipo de dato es inmutable, esto significa que no es posible asignar directamente un valor
a través del índice. Es posible anidar tuplas dentro de tuplas. La tupla es iterable, es decir, podemos
recorrer todos sus elemen tos con un ciclo for. Las tuplas se pueden concatenar a través del
operador +; también puede utilizarse el operador * para crear una tupla donde los elementos de la
original se repiten el número de veces que indique el número después del asterisco.

Los principales métodos que incluyen las tuplas son index() y count(); también puede usarse
la función len() sobre la variable referenciada a la tupla.

La sintaxis de una tupla es: identificador=(elemento0, elemento1, ...)

En la figura 35 se muestra el programa donde se observa el uso de las funciones y métodos


comentados:

Figura 35. Funciones y métodos sobre tuplas

36
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
5.4 Matrices

Una matriz (matrix) es un arreglo rectangular de números accedidos mediante sus subíndices
referidos a filas y columnas. En Python, una matriz es una lista de listas (list of list), y el tratamiento
que se debe dar durante su programación es similar al de las listas, solo teniendo cuidado de invocar
correctamente la posición de un número en la matriz a través de los subíndices, usando la notación
siguiente: Matriz[fila][columna]. Matriz es la variable que identifica al arreglo; fila es el subíndice
que indica la posición en las filas y columna el subíndice que posiciona en las columnas. Por
ejemplo, si A es una matriz cuadrada de 5 x 5 (cinco filas y cinco columnas) con los siguientes
valores:

En Python, se crearía dicha matriz de la siguiente forma:

Para llamar al número 65 de la matriz, invocaríamos A[2][2], recordando que todas las listas
empiezan con un número en el subíndice 0, y en el caso de una matriz, en la fila 0 y columna 0. Así,
el número 12 está en A[0][0]; el elemento A[4][0] es 0 y el A[4][4] es 33.

Las matrices son muy utilizadas en ingeniería, y se han desarrollado fuertemente debido a su
programación en la solución de sistemas de ecuaciones lineales mediante la eliminación gaussiana;
esta técnica es generadora de otros métodos y sus aplicaciones en diversas áreas de la ingeniería
civil son notables. El programa está planteado para ingresar los coeficientes de un sistema de N
ecuaciones lineales y puede probarse con el sistema mostrado en la figura 36-a. El programa, que se
muestra en la figura 36-b, encuentra la solución de un sistema de ecuaciones lineales mediante una
matriz au- mentada, aplica eliminación gaussiana y sustitución hacia atrás para encontrar el vector
de soluciones.

37
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 36-a. Modelo en Mathcad para solución de un sistema de ecuaciones lineales

38
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

39
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 36-b. Programa para resolver un sistema de ecuaciones lineales por eliminación gaussiana y sustitu-
ción hacia atrás

En el programa de la figura 36 se importó (from tabulate import tabulate as tab) una


biblioteca externa para mostrar en forma tabulada a la matriz (tabulate), la cual deberá ser
descargada e instalada en la ruta (path) de bibliotecas (library) mediante el comando pip ejecutado
desde la línea de coman- dos, como se observa en la figura 37.

Figura 37. Instalación de la biblioteca externa tabulate desde la línea de comandos

En la ventana Path Browser podemos ver, figura 38, instalada la biblioteca externa tabulate:

Figura 38. Ventana Path Browser

40
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
5.5 Diccionarios

Un diccionario es un dato especial de Python que almacena una serie de valores utilizando
otros como referencia para su acceso y almacenamiento. Cada elemento de un diccionario es un par
clave-valor (key-value) donde el primero debe ser único y será usado para acceder al valor que con-
tiene. A diferencia de las tuplas y las listas, los diccionarios no cuentan con un orden específico,
siendo el intérprete de Python el encargado de decidir el orden del almacenamiento. Sin embargo,
un diccionario es iterable, mutable y representa una colección de objetos que pueden ser de
diferentes tipos (Fernández-Montoro, 2014).

Para declarar un diccionario se utilizan las llaves ({}) entre los que se encuentran los pares
key-value separados por comas. La key de cada elemento aparece separada del correspondiente
value por el carácter dos puntos (:). Alternativamente, podemos hacer uso de la función dict() para
crear un diccionario.

A diferencia de las listas y tuplas, el acceso al valor de un elemento no es por índice sino por
la clave (key). Los métodos principales que nos permiten iterar sobre un diccionario son: items(),
values() y keys(). El primero da acceso tanto a claves como a valores, el segundo se encarga de de-
volver los valores y el último, las claves del diccionario. En la figura 39 se observa el programa que
usa un diccionario para buscar las funciones trigonométricas de un ángulo dado.

Figura 39. Uso de un diccionario para hallar las funciones trigonométricas de un ángulo dado

El siguiente programa, ver figura 40, toma el Zen de Python creado por Tim Peters, lo
muestra en inglés de la biblioteca importada this.py y permite traducir por línea (19 líneas) o en su
totalidad. Con la tecla <F> se termina el programa.

41
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 40. Programa Zen de Python

En el programa de la figura 40 se obsdrva el uso de un diccionario mediante la variable Zen;


para poder leer la línea del diccionario indicada en la variable n introducida desde el teclado
mediante input(), se utiliza una lista generada por comprensión con la función list().

42
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
6. PROCEDIMIENTOS Y ARCHIVOS EXTERNOS

6.1 Procedimientos y funciones

Un procedimiento es un conjunto de instrucciones definidas al inicio de un programa y que


pueden ser llamadas más de una vez durante la corrida del mismo. En la programación estructurada,
los procedimientos son los elementos básicos para desarrollar programas más funcionales. Al ser
lla- madas o invocadas varias veces, minimizan el código, aumentan la legibilidad y fomentan la
reutili- zación de código. A diferencia de otros lenguajes, en Python, un procedimiento no existe
hasta que es invocado. Se usa la palabra reservada def para crear un procedimiento o definir una
función, con la diferencia que la segunda devuelve un valor; en los siguientes dos ejemplos se usan
procedimientos y funciones para entender su programación.

Para calcular los coeficientes binomiales del binomio de Newton (a+b)n se usa la expresión:
nCr=n!/((n-r)!r!)

Así, el desarrollo de (a+b)4 es a4+4a3b+6a2b2+4ab3+b4, donde los coeficientes 1, 4, 6, 4 y 1


se forman de 4C0, 4C1, 4C2, 4C3 y 4C4.

El programa, usando procedimientos y funciones, se presenta en la figura 41.

Figura 41. Coeficientes binomiales de Newton

Se observa la definición de tres procedimientos, de los cuales dos corresponden a funciones:


fact() y CoefBin() ya que regresan los valores de f y coef, respectivamente, y un procedimiento:
New- ton(), que se invoca en el cuerpo del programa para solicitar el exponente (n) y llamar a las
funciones para obtener los factoriales y los coeficientes binomiales. Como ejercicio, modificar el
programa anterior para obtener los coeficientes binomiales y generar el triángulo de Pascal, como
se muestra en la figura 42.

43
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

1,1
1,2,1
1,3,3,1
1,4,6,4,1
1,5,10,10,5,1
....
Figura 42. Triángulo de Pascal

El siguiente programa, ver figura 43-a, realiza el cálculo del límite líquido usando la
ecuación de Lambe, que establece que LL=1/2*(w1*(N1/25)0.121+w2*(N2/25)0.121), donde w1 y w2 son
las hume- dades registradas para 5<=N1<25 y 25<N2<=3; la corrida del programa se muestra en la
figura 43- b.

44
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 43-b. Programa para calcular el límite líquido por el método de Lambe

Una fortaleza del uso de funciones en un programa es que se pueden incluir y usar en otros
programas a manera de bibliotecas importadas externamente y planificadas adecuadamente, como
se observa en la figura 44.

Figura 44. Ejemplo del uso de import


6.2 Archivos secuenciales

Un archivo externo permite almacenar información textual que puede ser llamada con
ciertas funciones para alimentar de datos a un programa, liberando memoria interna mientras el
programa se ejecuta. También se puede guardar información desde la ejecución del programa al
archivo externo.

Son varios los formatos que acepta Python para el proceso de archivos o ficheros de almace-
namiento externo: CSV, XML, JSON, YAML, entre otros. Los archivos de formato CSV (valores
sepa- rados por comas «comma-separated values») son archivos de texto fácilmente generables con
un edi- tor de texto, con MS Office (Word, Excel), FreeOffice o TextMaker, con la condición de
separar con comas los valores a almacenar.

Las operaciones básicas, como apertura, creación, lectura y escritura de datos están incorpo-
radas en la biblioteca estándar. La función open() permite abrir un archivo de texto (extension .txt)
para leer (read), escribir (write), añadir (append) o leer/escribir (read/write), dependiendo del
carácter indicado en su sintaxis:
open("fichero.txt", "r/w/a/+")

También puede referenciarse a una variable de la siguiente manera:


variable=open("fichero.txt", "r/w/a/+")

Después de usar el fichero, siempre deberá cerrarse (close) el mismo.

Los siguientes datos se almacenaron en un archivo de texto externo, ver figura 45, en
formato CSV que corresponde a los coeficientes de momentos para el diseño de losas
45
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
perimetralmente apoya- das para el caso monolítco, como lo indican las normas técnicas
complementarias para el diseño de

46
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
elementos de concreto reforzado (NTC-2017); el nombre del archivo es CoefMom.txt.

Figura 45. Archivo de texto en formato CSV

Se diseñó un programa que controla, mediante la instrucción with, la lectura read() del
archivo de texto CoefMom.txt asignado a un alias como f, y las operaciones necesarias para la
conversión de datos textuales a valores, definido en un procedimiento llamado archivo(), como se
observa en la figura 46.

Figura 46. Programa para lectura de un archivo externo

47
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
A continuación, ver figuras 47 a y b, se muestra un programa para calcular la estimación
puntual georeferenciada a partir de observaciones históricas existentes de una variable de estudio
utilizando el método IDW (Inverse Distance Weight). En este programa se usa un archivo de texto
(DatosSueloTeh.txt) para almacenar las coordenadas X, Y, Z y las variables de estudio, Q y W, para
leer e ir añadiendo datos conforme se van generando nuevas observaciones georeferenciadas. La es-
timación se hace conociendo las coordenadas de un punto para las variables de referencia Q y W.

Figura 47-a. Programa AASHTO

48
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 47-b. Programa IDW

49
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
La corrida del programa presenta inicialmente un menú: 0. Ejecutar IDW, 1. Añadir datos, 2. Salir.
La opción 0 ejecuta el método IDW con los datos almacenados en el archivo de texto, mismos que
son leídos con read(); la opción 1 graba nuevos datos en el archivo de texto usando write() hacia un
archivo abierto con la opción append (a). La opción 2 finaliza el programa, incluso saliendo del in-
térprete mediante la instrucción quit(). La figura 48 muestra la ejecución del programa IDW.

Figura 48. Ejecución del programa IDW

El efecto de la opción 1 se muestra en el archivo de texto de la figura 49.

Figura 49. Archivo de texto con información añadida

50
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
7. INTERFASES GRAFICAS DE USUARIO (GUI) CON EASYGUI

7.1 Instalación de EasyGUI

Una interfase gráfica de usuario (GUI) es un ambiente visual que permite la interacción con
el programa mediante objetos o elementos clásicos del ambiente Windows como cajas de texto,
boto- nes, casillas de verificación, barras de desplazamiento, etc.

En Python se pueden utilizar diferentes modos de programación visual usando bibliotecas


especializadas, como TKinter o EASYGUI; esta última es fácil de programar y de muy fácil uso.

Para instalar EASYGUI se recurre a pip de la siguiente forma desde la barra de comandos:

>pip install EASYGUI

Una vez instalada la biblioteca, se llama desde el programa mediante import.

7.2 Elementos GUI de EASYGUI

EasyGUI permite utilizar fácilmente elementos de interfase gráfica para interactuar con el usuario
de un programa, mediante ventanas con objetos pre-establecidos, ya sea para leer datos de las
variables de entrada así como para mostrar resultados de las variables de salida. Esta biblioteca
externa debe ser instalada previamente en Python, usando pip, de forma que el comando escrito
desde el símbolo del sistema realice la instalación de EasyGUI en la carpeta correspondiente de
bibliotecas (lib). El comando es: pip install easygui.

Una vez instalada, se invoca desde un programa mediante la instrucción import de la siguiente
forma:
import easygui as eg
recomendando asignar un alias (eg) para usarlo como método de llamado de las ventanas. Es
impor- tante señalar que los elementos a mostrar en una ventana de EasyGUI a través de variables,
deberán ser de tipo cadena (texto o string), por lo que todo número que se desee mostrar como
resultado deberá ser convertido mediante str() a cadena; así mismo, la lectura de variables que
involucren datos numéricos, deberán ser convertidos a éstos mediante eval(), pues las variables sólo
reconocen valores de cadena. Veamos ejemplos para el uso de los diferentes elementos de salida de
EasyGUI.

a) msgbox(). Se usa para mostrar los resultados de un proceso mediante una(s) variable(s) de salida
convertidas a texto. Ver figura 50.
Su sintaxis es: eg.msgbox(msg="Texto",title="Titulo",ok_button="OK",image=archivo.gif); el ar-
chivo de imagen .gif o .png deberá estar guardado en la misma carpeta del archivo.py
correspondiente al programa y es opcional.

Figura 50. Resultado de msgbox()

51
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Un ejemplo para mostrar el radio y área de un círculo de 30 u con una imagen .gif se observa en la

52
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
figura 51.

Figura 51. Programa y ejecución de un msgbox()

E:\Desktop\pres\gift1.gif
b) boolbox() / ynbox() / ccbox(): Se usan para mostrar un texto de resultado (ver figura 52) con la
opción de dos botones: Si (1) y No (0) equivalentes a True y False, respectivamente; su sintaxis es
parecida entre ambas:
variable=eg.boolbox(msg="Texto",title="Titulo",choices=("Si","No"),imagen=archivo.gif)
variable=eg.ynbox(msg="Texto",title="Titulo",choices=("Si","No"),imagen=archivo.gif)
variable=eg.ccbox(msg="Texto",title="Titulo",choices=("Si","No"),imagen=archivo.gif)

Figura 52. Resultado de boolbox()

El valor de la variable opcion es 1 si se oprime el botón Si


c) buttonbox(): Se usa para mostrar varios botones para seleccionar una opción al oprimir el que se

53
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
escoja, como se muestra en la figura 53. Su sintaxis es: eg.buttonbox(msg="Texto",title="Ti-
tulo",choices=("Opcion1","Opcion2",...,"OpcionN",image=archivo.gif)

Figura 53. Resultado de buttonbox()

La variable opción tomará el valor textual del botón oprimido, como se ve en la figura 54.

Figura 54. Resultado de oprimir el botón Producto

d) indexbox(): Similar a buttonbox() pero regresa el valor del índice, según el botón oprimido,
empe- zando de cero (0), de acuerdo a la posición de choices=() como se observa en la figura 55.

Figura 55. Resultado de buttonbox()

La variable opcion es igual a 2 si se oprime el botón Producto, según se ve en la figura 56.

Figura 56. Resultado de oprimir el botón Producto

54
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Las ventanas de EasyGUI que se usan para introducir datos son las siguientes:

a) enterbox(): Se usa para referenciar una cadena de texto a una variable; si se introduce un número
en la caja de texto, deberá convertirse en número con eval() para poderse operar matemáticamente.
Ver figura 57. Su sintaxis es:

variable=eg.enterbox(msg="Texto",title="Titulo",default="Valor",strip=True/False,image=ar-
chivo.gif)

Figura 57. Resultado de enterbox()

b) integerbox(): Se usa para ingresar un número entero a través de una caja de texto; pueden
definirse los valores máximo y mínimo. Ver figura 58. Su sintaxis es:
var=eg.integerbox(msg="Texto",title="Titulo",default=valor,lowerbound=min,upper-
bound=max,image=archivo.gif)

55
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 58. Resultado de integerbox()

c) multenterbox(): Se usa para ingresar varios datos a través de múltiples cajas de texto que están
relacionadas a una lista de textos, como se ve en la figura 58. Su sintaxis es:
variables=eg.multenterbox(msg="Texto",title="Titulo",fields=lista,values=valores)

variables es una lista que contiene los valores definidos en values o que se ingresen en las cajas de
texto.

Figura 59. Resultado de multenterbox()

56
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
d) codebox() y textbox(): Se usan para ingresar texto en varias líneas, a manera de editor de texto.
Son prácticas para mostrar el texto que se almacena en un archivo externo de texto (.txt), como se
observa en la figura 60.

Figura 60. Resultado de textbox()

57
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
7.3 Aplicación con GUI

El siguiente segmento de programa (figura 61) utiliza EASYGUI para capturar los datos de
los retenidos de un suelo para el cálculo de la tabla y curva granulométrica. Para generar la ventana
de captura de los datos se utiliza multenterbox(), como se muestra a continuación:

Figura 61. Codificación de multenterbox()

La corrida del programa mostrando la interfase de usuario seleccionada se muestra en la figura


62.

Figura 62. Resultado de multenterbox()

58
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Para generar la ventana de salida de los resultados se utiliza msgbox(), como se observa en la figura
63.

Figura 63. Codificación y resultado de msgbox()

59
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
La curva granulométrica se realiza usando la biblioteca matplotlib y se presenta su código y
su resultado en la figura 64.

Figura 64. Codificación y gráfica granulométrica con matplotlib

60
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
8. APLICACIONES EN INGENIERÍA CIVIL

Aplicación 1. Programa Avión vs. Misil

Suponga que se quiere derribar un avión mediante un proyectil dirigido justamente en el instante en
el que está inclinado, en relación a nuestra posición, como se indica en la figura 65.

Figura 65. Trayectorias del avión y misil

Para derribarlo, es preciso conocer la altura h del avión, su velocidad va y el ángulo a. El ángulo de
tiro está dado por la expresión:

en donde vm es la velocidad del proyectil. Como la función arco coseno no existe cuando el cociente

es mayor que 1, esto significará que el objetivo es demasiado rápido para alcanzarlo. Más
aún, lo alcanzaremos solo si disparamos en el intervalo angular entre 20° y 70°. El instante de inter-
cepción está dado por:

Si te es superior a 10 segundos, ya no podremos alcanzar al avión por falta de combustible en


nuestro proyectil. Escriba un programa que nos indique si debemos, o no, hacer el intento de
disparar el proyectil. En el caso de poder lograrlo deberá imprimir la leyenda “DISPARE CON UN
ANGULO DE:”, así como el valor del ángulo; de lo contrario, deberá imprimir: “NO DISPARE -
IMPOSIBLE ALCANZARLO-“. Suponga que la velocidad del proyectil es de 1800 ft/seg. Corra el
programa para los datos mostrado en la tabla 3; el programa se muestra en la figura 66.

Tabla 3. Datos para el programa Avión vs. Misil


va a h
20 0 10
00 ° 00
60 3 14
0 0 00
°
12 3 50
00 0 00
°
61
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

20 4 35
00 0 00
°
18 4 20
00 5 00
°

62
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 66. Programa y ejecución de Avión vs. Misil

63
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Aplicación 2. Programa SI-NO

La figura 67 muestra, gráficamente, el área acotada por las desigualdades:

y<3
x+y>1
y<2x+1
y>x2

Figura 67. Área acotada

Escriba un programa que pueda leer las coordenadas de un punto y decidir si está dentro del área sombreada.
La respuesta de la computadora deberá ser, simplemente SI o NO. El programa se muestra en la figura 68
para la versión con más código y en la figura 69 con menos código al usar operadores lógicos.

Primera versión:

Figura 68. Programa extendido SINO.py

64
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Segunda versión:

Figura 69. Programa reducido SINO.py

Aplicación 3. Problema trigonométrico

Suponga conocidos los valores de un ángulo y dos lados de un triángulo. Concretamente suponga conocidos
los valores a, b y ϴ de la figura 70, y como incógnita el valor de c. Hay varias alternativas para resolver este
problema: puede no tener solución, tener solución única o bien, tener dos soluciones.

Figura 70. Esquema del problema trigonométrico

Estas alternativas pueden determinarse como siguen:

1. Con el ángulo ϴ y el lado a podemos formar un triángulo rectángulo. Los lados h e y pueden calcularse
mediante las relaciones:

2. Si b es menor que h, no habrá solución.

3. Si b es igual a h, la solución es única, es decir, el triángulo es rectángulo y el tercer lado es igual a y.

4. Si b es mayor que h, x puede calcularse con la relación:

Hay dos posibilidades adicionales:

a) Si x es menor que y, las dos soluciones posibles son: y + x y y-x

b) Si x es mayor que y, hay una sola solución: y+x

Escriba un programa que calcule el tercer lado para los siguientes casos mostrados en la tabla 4. El programa
65
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
se muestra en la figura 71 y su corrida en la figura 72.

Tabla 4. Datos para el programa del problema trigonométrico.


ANGU LA LA TERCER
LO DO DO LADO
ϴ a b
30° 2 0.5 «No hay
solución»
30° 2 1.5 2.85, 0.61
30° 2 3.0 4.56
25° 4 0.85 «No hay
solución»
15° 30 20 47.41, 10.55

Figura 71. Programa para el problema trigonométrico

66
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 72. Ejecución del programa del problema trigonométrico

Aplicación 4. Problema de mínimos cuadrados

Supongamos que se tiene una serie de N observaciones experimentales, que representan las cantidades de
fertilizante utilizado por hectárea, y los rendimientos respectivos en términos de kilos de algodón. Para ejem-
plificar considérese la tabla 5.
Tabla 5. Datos para el problema de mínimos cuadrados
Observaci Fertilizant Rendimient
ones e (kg/Ha) os de algodón
(kg/Ha)
1 1 0.60
0
0
2 2 0.95
0
0
3 3 1.42
0
0
4 1 0.87
7
5
67
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
5 2 1.20
5
0
6 1 0.75
5
0

Simbolicemos con la variable independiente X al monto de fertilizantes empleados por hectárea, y con la va-
riable dependiente Y al rendimiento de algodón por hectárea. Queremos ajustar esas observaciones a un
modelo

68
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
lineal del tipo:

Para llevar a cabo este procedimiento es necesario calcular los elementos siguientes:

1. El promedio de las observaciones de la variable independiente X:

2. El promedio de las observaciones de la variable dependiente Y:

3. La suma de cuadrados corregida:

4. La suma de productos cruzados corregida:

5. El estimador de mínimos cuadrados para b:

69
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
6. La estimación de a:

Para la tabla mostrada, los resultados deben ser a=0.01814 y b=0.00485. El programa y su corrida se
muestran en la figura 73.

Figura 73. Programa y corrida para mínimos cuadrados

En este ejercicio se utilizaron dos listas, Fert y Rend para almacenar los datos en arreglos.

70
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 5. Raíz cuadrada por el método iterativo

Un método para encontrar una raíz cuadrada es la fórmula iterativa:

en la que Si es la estimación de X en la i-ésima iteración. Una alternativa para cerciorarse si hay o no un cam-
bio en la cuarta cifra decimal es escribir la ecuación en la forma:

Cuando

habremos encontrado la solución de acuerdo a nuestro criterio. El programa y su corrida se muestran en la


figura 74.

Figura 74. Programa y corrida para la raíz cuadrada por el método iterativo

71
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 6. Solución de un sistema de ecuaciones lineales por eliminación gaussiana

Un sistema de ecuaciones de la forma:

puede expresarse mediante una ecuación matricial Ax=b, es decir:

para formar una matriz aumentada expresada como:

que se resolverá mediante eliminación gaussiana a partir de:

para convertirla en una matriz triangular de la siguiente forma:

y finalmente aplicar sustitución hacia atrás a partir de la expresión:

72
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
El programa para resolver el problema anterior se muestra en la figura 75.

Figura 75. Programa para solucionar un sistema de ecuaciones lineales con eliminación gaussiana

Al ejecutar este programa, se resuelve el sistema mostrado en la matriz aumentada A, cuya corrida es
mostrada en la figura 76.

Figura 76. Corrida del programa para ecuaciones lineales simultáneas


73
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Para correr para cualquier sistema de ecuaciones, deberán convertirse las líneas de N y A en comentarios (#)
y desactivar las comillas triples desde A=[] hasta A.append(fila).

Aplicación 7. Propiedades geométricas de una sección plana

Para una sección plana cerrada S definida por coordenadas (X, Y), sus propiedades geométricas pueden ser
encontradas con las siguientes expresiones matemáticas:
a) Perímetro:

c) Área:

d) Momentos de área:

e) Coordenadas del centro de gravedad:

f) Momentos de inercia:

g) Radios de giro:

74
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Una sección W tiene las coordenadas y perfil de la figura 77.

Figura 77. Coordenadas y perfil W generado

75
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Las propiedades geométricas calculadas con Mathcad se muestran en la figura 78.

Figura 78. Propiedades geométricas calculadas con Mathcad

Elaborar un programa en Python que determine las propiedades geométricas de una sección plana cerrada
mediante la lectura de las coordenadas de los puntos. El programa se muestra en la figura 79. En la figura 80
se muestran los datos de las coordenadas solicitadas al correr el programa y en la figura 81 se observan las
propiedades geométricas calculadas y el perfil W graficado con matplotlib.

76
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 79. Programa para el cálculo de la propiedades geométricas de una sección plana

77
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 80. Coordenadas solicitadas

78
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 81. Propiedades geométricas calculadas y el perfil W graficado con matplotlib

79
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 8. Menú de opciones para una aplicación

Cuando se requiere crear una sencilla aplicación que resuelva varios problemas relacionados a un tema, es
recomendable colocar un menú de opciones para que el flujo del programa se lleve de acuerdo a la opción
seleccionada. El siguiente programa muestra las opciones para resolver algunos problemas relacionados con
Mecánica de Suelos y los datos obtenidos en los ensayes del laboratorio, por ejemplo, los datos del muestreo,
la humedad natural del suelo, la densidad de sólidos, los parámetros de las volumetrías y gravimetrías de una
muestra inalterada, los límites de consistencia o de Atterberg, la granulometría del suelo, la permeabilidad, la
resistencia al esfuerzo cortante a partir del ensaye de compresión simple inconfinada, ensaye triaxial, la con-
solidación unidimensional de los suelos y un conversor de unidades Latitud-Longitud a UTM.

En este programa se presentan dos maneras de llamar a los programas: mediante procedimientos y funciones
declarados dentro del programa principal y mediante importación (import) de aplicaciones ya existentes
alma- cenadas en archivos de programa con la extensión .py.

Algunas opciones no ejecutan ningún programa, solo muestran un mensaje relacionado a la opción. El pro-
grama se observa en la figura 82.

80
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 82. Programa para un menú de opciones

Cuando se ejecuta el programa, se muestra el menú de opciones para seleccionar la opción que se desee pro-
cesar. Por ejemplo, la primera opción para introducir los datos del sitio de la obra. Una vez capturados los
datos, se regresa al menú de opciones. La ejecución del programa se observa en la figura 83.

81
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 83. Ejecución del programa del menú de opciones

Para obtener la humedad del suelo, se selecciona la opción 2 para ejecutar un procedimiento que solicita los
datos del ensaye en el laboratorio para obtener la cantidad de agua del suelo, como se ve en la figura 84.

Figura 84. Datos y resultado de la opción 2 para calcular la humedad

En la opción 11 se ejecuta un programa para realizar las conversiones de coordenadas geográficas expresadas
en Latitud y Longitud con ángulos sexagesimales a coordenadas UTM (X, Y, Z), utilizando el elipsoide
WSG84.

El programa y su corrida se muestran en las figuras 85y 86, respectivamente, con interfase gráfica creada
82
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
con
EasyGUI.

83
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 85. Programa para convertir Lat-Long a UTM

84
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 86. Corrida del programa para convertir Lat-Long a UTM

85
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 9. Ensaye AASHTO

Se llama compactación al proceso de densificar el suelo mediante la reducción de vacíos de aire mediante la
incorporación de una cantidad óptima de agua.

Proctor comprobó que la incorporación gradual de agua al suelo mejoraba el proceso de compactación al ob-
tener pesos volumétricos húmedos crecientes hasta llegar un punto donde no se lograba el incremento,
debido a la saturación del suelo. Proctor observó que el agua tenía la función de lubricar las partículas para
lograr un mejor acomodo de las mismas y, al mismo tiempo, influir en la reducción de sus vacíos, hasta
llegar a un punto donde se lograba la saturación del suelo, es decir, el llenado de agua en todos los vacíos, lo
que impedía la compresibilidad del material. Al graficar los pesos volumétricos secos contra la humedad,
observó un gráfico casi parabólico en donde su máximo representaba el peso volumétrico seco máximo
(PVSM) en el eje de las ordenadas y la humedad óptima (Wo) en el eje de las abscisas.

Existen dos formas de lograr la compactación de los suelos: a) el modelo dinámico, en el cual la
compactación se logra mediante el desplazamiento de un pisón de masa constante y distancia de
desplazamiento aplicado a un suelo colocado en un molde estándar para aplicar determinado número de
golpes del pisón en un número establecido de capas, y b) el modelo estático, en donde la compactación se
logra mediante la aplicación de una carga estándar de forma muy lenta a un suelo colocado dentro de un
molde estandarizado. En ambos modelos se determinan el PVSM y Wo. Al primer modelo se le conoce como
«compactación Proctor» y al segundo como «compactación Porter». En el primer modelo aparece otro
concepto importante conocido como Energía de Compactación y que se expresa como:
Ec = Ng*Nc*Wp*Hc/Vm
donde Ng es el número de golpes, Nc el número de capas, Wp el peso del pisón, Hc la altura de caídad y Vm el
volumen del molde; las unidades asociadas son kgf-cm/cm3.

En las normas SCT se tienen los ensayes AASHTO T99 y AASHTO T180 para obtener el PVSM y la Wo, en
donde se manejan dos tipos: el estándar (T99) y el modificado (T180); para el primer caso se usa un molde de
10.16 cm de diámetro y 11.64 cm de altura, pisón de 2.49 kg f y desplazamiento de 30.5 cm, 25 golpes en 3
capas. Para el segundo caso se usa un molde de 15.24 cm de diámetro y 11.64 cm de altura, pisón de 4.54 kgf
y desplazamiento de 45.72 cm, 56 golpes y 5 capas. Algunas energías de compactación calculadas para dife-
rentes modalidades de ensayes se muestran en la tabla 6.

Tabla 6. Energía de compactación para distintos datos.


Diám Altura Peso Despla No. No. Volume Energía
etro pisón z. golpes capas n
cm cm kgf cm cm3 kgf-
cm/cm3
10.16 11.64 2.49 30.50 25 3 944 6.034
10.16 11.64 2.49 30.50 30 3 944 7.241
15.24 11.64 4.54 45.72 56 3 2124 17.50
15.24 11.64 4.54 45.72 56 5 2124 27.36
10.16 11.64 2.49 30.50 12 3 944 2.896
15.24 11.64 4.54 45.72 75 5 2144 36.305

Los ensayos AASHTO aplicados para el diseño de pavimentos permiten obtener el valor de soporte
California (CBR).

En el caso del ensaye Porter, también se presentan dos casos: a) el estándar, aplicado a materiales para
control de calidad, y b) el modificado, aplicado a materiales de terracerías para el diseño de pavimentos y
obtención del valor relativo de soporte (VRS) y la expansión (Exp) del material. La aplicación de la carga se
realiza a una velocidad lenta de tal forma que se aplique una carga máxima de 27 Ton durante un tiempo de 5
seg mediante una prensa hidráulica de 30 Ton; se mantiene la carga durante un minuto y se descarga en el
86
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
siguiente minuto. La presión aplicada corresponde a 140.6 kg/cm2.

87
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Para el caso dinámico, se requiere obtener una curva de compactación similar a la de la gráfica de la figura
87.

Figura 87. Curva de compactación para hallar PVSM y humedad óptima

Se recomienda ejecutar el ensaye AASHTO para obtener por lo menos cuatro (4) puntos con sus respectivas
humedades para obtener el peso volumétrico húmedo (PVH) y deducir el peso volumétrico seco (PVS) a
partir de la expresión:
PVSi = PVHi / (1+wi)

Se muestran en la figura 88 los resultados de un ensaye AASHTO T99 para obtener la curva de compactación,
y la deducción del PVSM y Wo generados con Mathcad.

88
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 88. Curva de compactación generada con Mathcad

La corrida del programa en Python es mostrada en la figura 89.

89
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 89. Corrida del programa AASHTO

90
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 90. Curva de compactación generada con matplotlib

En la gráfica de la figura 90, se requiere realizar el ajuste de los puntos a una función parábolica que permita
mostrar su punto máximo, cuyas coordenadas definen al PVSM y a la Wo ajustados. Así mismo, se requieren
trazar las rectas sugeridas por la normativa SCT para ubicar la ordenada máxima y la abscisa de dicho
máximo.

Dicho ajuste puede realizarse con el método de mínimos cuadrados para una función cuadrática que
establece lo mostrado en la figura 91.

91
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 91. Ecuaciones para ajustar a una parábola de mínimos cuadrados

92
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Para los datos de la corrida del programa, el ajuste, modelado en Mathcad, sería de la forma mostrada en la
figura 92.

Figura 92. Ajuste de la parábola de mínimos cuadrados

El programa en Python propuesto es el mostrado en la figura 93.

93
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

94
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

95
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 93. Programa AASHTO

96
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 10. Ensaye de penetración estándar SPT

La prueba de penetración estándar (SPT) podemos resumirla en lo siguiente: “consiste en hincar el penetró-
metro 45 cm con la masa de 64 kg, dejada caer desde 75 cm de altura; durante el hincado se cuenta el
número de golpes que corresponden a cada uno de los tres avances de 15 cm. La resistencia a la penetración
estándar se define como el número de golpes, N , para penetrar los últimos 20 cm (de 15 cm a 45 cm). En la
operación del martinete debe vigilarse que su altura de caída sea constante y que el cable de manila tenga un
máximo de dos vueltas en la cabeza de gato. Una vez terminada una prueba se procede a perforar el tramo
muestreado, hasta alcanzar la profundidad a la que se realizará la siguiente prueba; el diámetro de
perforación más reco- mendable es de 10 cm. Las muestras deben conservarse en frascos o en bolsas
herméticas que mantengan constante el contenido de agua. La información de campo debe recopilarse en un
registro”. El programa se muestra en la figura 94, su corrida en la figura 95 y su gráfico en la figura 96.

97
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

98
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 94. Programa SPT

99
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

10
0
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 95. Corrida del programa AASHTO

Figura 96. Gráfico del esfuerzo cortante no drenado generado con matplotlib

10
1
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 11. Granulometría de los suelos

La granulometría de un suelo puede resumirse de la siguiente forma: “El ensaye granulométrico de un suelo
permite determinar estadísticamente los tamaños de partículas que se presentan en el mismo mediante el
tami- zado o cribado por una sucesión de mallas estandarizadas ASTM; se obtienen la tabla y la curva
granulométrica; la primera presenta los resultados de la granulometría gruesa ensayada en seco en el
laboratorio, así como los resultados de la granulometría fina realizada en vía húmeda para lavar los finos
(partículas menores a 0.075 mm), secar el material retenido y efectuar el tamizado en seco. La granulometría
gruesa se realiza cribando el suelo por las mallas 3 in (75 mm), 2 in (50 mm), 1 1/2 in (37.5 mm), 1 in (25
mm), 3/4 in (19 mm), 3/8 in (9.5 mm) y No. 4 (4.75 mm); la granulometría fina se efectúa tamizando una
fracción del material que pasa la malla no. 4 en las mallas No. 10 (2.00 mm), No. 20 (0.85 mm), No. 40
(0.425 mm), No. 60 (0.20 mm), No. 100 (0.15 mm) y No. 200 (0.075 mm). La curva granulométrica se
realiza graficando el porcentaje que pasa (PQP -%-) en escala aritmética en el eje de las ordenadas contra el
tamaño de la malla (en mm) en escala logarítmica en el eje de las abscisas”. El programa se muestra en la
figura 97, la ventana GUI de captura de datos en la figura 98, los resultados de la tabla granulométrica en una
ventana GUI se observan en la figura 99 y la curva granu- lométrica en la figura 100.

10
2
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 97. Programa para el análisis granulométrico de un suelo

10
3
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 98. Ventana GUI para captura de los datos de entrada

10
4
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 99. Resultados en una ventana GUI del análisis granulométrico

Figura 100. Curva granulométrica


10
5
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 12. VRS vs. CBR

Estos parámetros, que representan la resistencia al esfuerzo cortante confinado del suelo, se obtienen
mediante dos ensayos de compactación estandarizados y se utilizan para verificar la resistencia del material
de las capas del pavimento como control de calidad y para diseñar los espesores de un pavimento a partir de
la resistencia del terreno natural (terracerías).

El primero, VRS o valor relativo de soporte, se obtiene mediante el ensaye estático Porter al compactar a una
muestra de suelo que pase completamente la malla de 25 mm (1 in) mediante presión estática de 127 kg/cm 2
durante 5 minutos y una descarga al siguiente minuto; previamente se propuso una humedad cercana a la
óptima y se acomodó la muestra de suelo en el molde Porter con veinticinco varillazos con la varilla punta
de bala de 5/8 in; lograda la presión de compactación, se lleva el molde a la prensa de 5 Ton para aplicarle
carga a una velocidad de 1.27 mm/min, registrar los tiempos (0, 0.5, 1, 2, 3, 4, 6, 8, 10 min) y sus respectivas
pene-
traciones (0, 0.61, 1.27, 2.54, 3.82, 5.08, 7.62, 10.16, 12.54 mm) para obtener el VRS igual a la carga de
pene- tración de 2.54 mm entre la carga estándar de 1360 kgf.

El segundo, CBR o relación de soporte California, se obtiene mediante el ensaye dinámico AASHTO T180 al
compactar con un pisón de 4.50 kgf, caída de 30.5 cm con 56 golpes repartidos en 5 capas dentro de molde
modificado AASHTO; al variar la humedad y obtener el peso volumétrico seco máximo (PVSM) con su res-
pectiva humedad óptima, se lleva a la prensa hidráulica de 5 Ton y se somete a los tiempos y deformaciones
indicados en la prueba Porter. El CBR se obtiene al tomar el mínimo de las cargas a las penetraciones de
2.54 mm y 5.08 mm, respectivamente, divididas entre las cargas estándar 1360 kgf y 2054 kgf.

En ambos casos, si la curva carga-penetración presentara una doble curvatura, deberá realizarse un ajuste al
tomar la recta que pase por el punto de inflexión y prolongándola al eje X para tomar un nuevo origen y
calcular las respectivas cargas de penetración comentadas en los párrafos anteriores.

Figura 101. Ajuste para el VRS o CBR

El programa Python que permite calcular ambos parámetros se muestra en la figura 102 y la corrida del pro-
grama en la figura 103.

10
6
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 102. Programa VRS vs. CBR

10
7
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 103. Corrida del programa VRS vs. CBR

10
8
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Figura 104. Curva Carga vs. Penetración y resultado del CBR

Usando la opción 2, se obtendrá el VRS de acuerdo a lo comentado anteriormente; la opción 3 mostrará


ambos parámetros calculados y la opción 0 terminará la ejecución del programa.

En el programa se utilizaron subprogramas creado con def y las bibliotecas sys, math y matplotlib. Esta última
es externa y debe existir en las carpetas de Python para poder invocarse.

10
9
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
9. PROBLEMAS PROPUESTOS

1. Cálculo de la raíz cúbica con una fórmula iterativa

La raíz cúbica del número X puede calcularse mediante la fórmula iterativa

Este procedimiento puede iniciarse dando a Si el valor 1. Escriba un programa de computadora para obtener
raíces cúbicas de esta manera. Para propósitos informativos, imprímase el valor de S en cada iteración.
Termine el proceso una vez que la diferencia entre dos iteraciones sucesivas sea menor de 0.01%. La fórmula
es cierta tanto para valores positivos como negativos de X. Su programa debe incluir ambas posibilidades.
Utilícelo para X=235 y X=-91.6

2. Raíz cuadrada con otro método iterativo

Otra manera de formular el método para resolver la raíz cuadrada de un número es el siguiente. Para calcular
la raíz cuadrada de un número B selecciónese cualquier número r1 y con ellos calcúlese h1 tal que

A continuación, encuéntrese el promedio entre r1 y h1 y desígnese con r2:

El siguiente h2 es igual a:

El proceso puede generalizarse mediante las expresiones:

Ambas sucesiones se aproximan a la raíz cuadrada de B. Para detener el proceso, utilizamos el criterio |ri-hi|
<e para un e predeterminado. Utilice el programa para calcular las raíces cuadradas de 4590 y 32323, para
un valor inicial r1=1 y e=0.000001.

110
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
3. Sucesiones

Las sucesiones

convergen al mismo límite llamado «media geométrica-aritmética». Escriba un programa para leer a y b, ve-
rifique si a≤b (de lo contrario, intercambie sus valores), y calcule la secuencia hasta que:

Utilícelo para los valores a=2, b=7 y e=0.00001.

4. Logaritmo de X
La función log10(X) puede representarse, para valores de X en el intervalo 0<X≤2, mediante la siguiente serie
infinita:

Prepare un programa que lea el valor de X, calcule la serie, e imprima el resultado después de 3, 5, 10, 50,
100 y 1000 términos. Además, utilice la función math.log10(X) y compárela con el resultado de la serie.
Corra el programa para el valor X=1.8. Al programar, tome en cuenta que X deberá estar, siempre, dentro del
intervalo mencionado.

5. Interpolación de Lagrange
Se utiliza está técnica para encontrar un valor dentro de un conjunto de datos agrupados en dos listas X e Y
para estimar un valor 𝑌𝑖𝑛𝑡 para un valor dado de 𝑋𝑖𝑛𝑡. La expresión que calcula a 𝑌𝑖𝑛𝑡 es:
𝑛 𝑛 𝑋 −𝑋
𝑖 𝑖𝑛𝑡
𝑌𝑖𝑛𝑡 = ∑ 𝑌𝑖 𝖦 𝑋 − 𝑋
𝑖 𝑗
𝑖=1 𝑗=1
con 𝑖 ≠ 𝑗 para 𝑖, 𝑗 = 1,2, … ,
𝑛

6. Parábola de mínimos cuadrados


Para un conjunto de n datos X e Y, la ecuación 𝑦 = 𝑎0 + 𝑎1𝑥 + 𝑎𝑥𝑥2 se determina hallando los coeficientes
𝑎𝑖, 𝑖 = 0,1,2 mediante la solución del sistema de ecuaciones lineales siguiente; el programa obtenido puede
implementarse en la Aplicación 9. Programa AASHTO.

111
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

class App(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
# create the application

root = Tk()

frm = ttk.Frame(root, padding=10)


frm.grid()
ttk.Label(frm, text="Apps para determinar centros de gravedad e inercia").grid(column=0, row=0)
label.pack()
ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0)
imagen = PhotoImage(file=" E:\Desktop\cglc.gif")
Label(root, image=imagen, bd=0).pack(side="left")

sum1=float(0)
sum2=float(0)
sum3=float(0)
sum4=float(0)
print("Va a realizar un calculo de cg e Inercia de una figura compuesta")
sumando =[]
counter=0
limite= int(input("Ingrese el numero de figuras de la seccion compuesta:="))
while counter < limite:
print("""Indique la forma de la figura en estudio
1. cuadrada/rect
2. triangular
3. Area circular
4. Area parabolica
=""")
forma=int(input("Indique la forma de la figura en estudio="))
if forma == 1 :
geometria = rectcua(forma)
sumando.append(geometria)
counter+=1
elif forma == 2 :
geometria = triang(forma)
sumando.append(geometria)
counter+=1
elif forma == 3 :
geometria = areacircular(forma)
sumando.append(geometria)
counter+=1
elif forma == 4 :
geometria = parabolico(forma)
sumando.append(geometria)
counter+=1
else:
print("No se ingreso ninguna opcion valida")

112
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

ojeda=geometria
print("valores de la lista de datos0",ojeda)
contador = 0
n=limite
while contador < limite:
sum1=sum1+sumando[contador][0]
print("valores de las Areas",sum1)
sum0=sumando[contador][1]
print("valores de las Y",sum0)
sum2=sum2+sumando[contador][2]
sum3=sum3+sumando[contador][3]
sum4=sum4+sumando[contador][4]
contador += 1

print("total A=",sum1)
print("Ultimo valor de Y=",sum0)
print("total Ax=",sum2)
print("total Ay=",sum3)
print("total Io=",sum4)
Xcg=float(sum2/sum1)
Ycg=float(sum3/sum1)

s=0
counter = 0
limite=n
while contador < limite:
sum1=sum1+sumando[contador][0]
sum0=sumando[contador][1]
sum2=sum2+sumando[contador][2]
sum3=sum3+sumando[contador][3]
sum4=sum4+sumando[contador][4]
d = abs(Ycg-sum0)
print("valor de d",d)
d2=d**2
z=sum1*d2
s= s + sum4 + z
counter = counter+1

print("Area",sum1)
print("Xcg",Xcg)
print("Ycg",Ycg)
print("Inercia",s)

listx=[]
listy=[]
print(""" Grafiquemos Xcg y Ycc, para tal fin, se solicitara las coordenadas de los puntos de la
figura
segun el sistema de referencia que ud coloco""")
npc=int(input(" Numero de puntos de la figura compuesta"))
for i in range(npc):
cx=float(input(" coordenada x de la figura compuesta"))
listx.append(cx)
print("x vale", cx)
cy=float(input(" coordenada y de la figura compuesta"))
listy.append(cy)

113
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
print("y vale", cy)

x=listx
aa=max(x)
print("valor max",aa)
y=listy
bb=max(y)
print("valor max",bb)

for i in range(len(x)):
for j in range(len(y)):
plt.plot(x, y, color='red')

plt.hlines(y=Ycg, xmin=0, xmax=aa)


plt.vlines(x=Xcg, ymin=0, ymax=bb)

plt.xlim(0, aa)
plt.ylim(0, bb)

plt.show()

root.mainloop()

import tkinter as tk

# definimos las acciones asociadas a las opciones de los menús


def accion1():
texto.configure(text='Has elegido la opción 1 del menú principal')

def accion2():
texto.configure(text='Has elegido la opción 2 del menú principal')

def acciona():
texto.configure(text='Has elegido la opción a del submenú')

def accionb():
texto.configure(text='Has elegido la opción b del submenú')

# creamos la ventana principal


ventana = tk.Tk()
ventana.title('Ventana principal')
ventana.geometry('800x600')

# creamos una barra de menús y la añadimos a la ventana principal


# cada ventana solo puede tener una barra de menús
barra_menus = tk.Menu(ventana)
ventana.config(menu=barra_menus)

# creamos un menú cuyo contenedor será la barra de menús


menu = tk.Menu(barra_menus, tearoff=False)
114
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

# añadimos opciones al menú indicando su nombre y acción asociado


menu.add_command(label='Opción 1', command=accion1)
menu.add_command(label='Opción 2', command=accion2)

# creamos un submenú
submenu = tk.Menu(menu, tearoff=False)
submenu.add_command(label='Opción A', command=acciona)
submenu.add_command(label='Opción B', command=accionb)

# añadimos un submenú al menú principal


menu.add_cascade(label='Submenú', menu=submenu)

# añadimos una línea separadora y la opción de salir


menu.add_separator()
menu.add_command(label='Salir', command=ventana.destroy)

# finalmente añadimos el menú a la barra de menús


barra_menus.add_cascade(label="Menú", menu=menu)

# añadimos una etiqueta para ver el efecto de los botones del menú
texto = tk.Label(ventana, text='¡Hola, desde Código Pitón!')
texto.place(x=200, y=200)

if __name__ == '__main__':
ventana.mainloop() # ejecutamos la ventana principal

from tkinter import Tk, Label, Button

class VentanaEjemplo:
def __init__(self, master):
self.master = master
master.title("Una simple interfaz gráfica")
self.etiqueta = Label(master, text="Esta es la primera ventana!")
self.etiqueta.pack()
self.botonSaludo = Button(master, text="Saludar", command=self.saludar)
self.botonSaludo.pack()
self.botonCerrar = Button(master, text="Cerrar", command=master.quit)
self.botonCerrar.pack()
def saludar(self):
print("¡Hey!")
root = Tk()
miVentana = VentanaEjemplo(root)
root.mainloop()

https://www.youtube.com/watch?v=StaRKgsxsac

115
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

PROCESO DE LA COMUNICACION
ELEMENTOS CONCEPTOS BARRERAS AXIOMAS COMPONENTES
persona que codifica el   Digital: existe el emisor
EMISOR mensaje y envía la
emisor no
claridad para enviar el mensaje
tiene la interacción
en la comunicación es Analógico: existe el emisor
información  emisor no podrá simétrica
confirmar si el receptor alcanzo con el  la naturaleza
mensaje pretendido , por ejemplo la de una relación depende de
barrera del idioma la puntuación de las
secuencias entre los
comunicantes
La persona a quien se dirige Se presentan dificultades en el  Digital: existe el receptor
RECEPTOR la información, decodifica el receptor para decodificar y entender el
la interacción
en la comunicación es Analógico: existe el emisor
mensaje y retroalimenta al mensaje, por ejemplo, ideas y simétrica o complementaria
emisor, quien se convierte experiencias previas, valores  la naturaleza
en receptor y así personales, falta de atención, atención de una relación depende de
sucesivamente selectiva, cansancio, etc. la puntuación de las
secuencias de
comunicación entre los
comunicantes
Es la información que envía No existen barreras comunicativas No es posible no comunicar, Digital: mensaje claro
MENSAJE o emite el emisor, es el no existe la no conducta Analógico: mensaje no muy
producto físico real de la claro.
codificación Contextual el mensaje digital
y analógico debe entenderse
tomando en cuenta el contexto
Es el medio que se utiliza Transmisión del mensaje: existen La comunicación puede ser Componente digital: está
CANAL para transmitir la problemas en la transmisión del digital o analógica constituido por aquellos
información; verbal, menaje relacionado con la claridad del elementos que tienen un
auditiva, etc. mismo significado claro, para ser
descifrado
Componente analógico%
formado por aquellos
elemento que nos transmiten
Una información indescifrable
Es el proceso permanente de Se presenta dificultades en la Toda comunicación Permite al emisor determinar
RETROALIMENTACION intercambio de la retroalimentación por falta de claridad transmite un contenido y si el receptor ha recibido o no
comunicación entre emisor en la emisión, recepción o en la misma define una relación entre las el mensaje y si esta ha
y receptor transmisión del mensaje personas producido en el receptor la
respuesta pretendida

116
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ

Escribir expresiones matemáticas


Puede utilizar un subconjunto de marcado TeX en cualquier cadena de texto de Matplotlib colocándolo
dentro de un par de signos de dólar ($).

Tenga en cuenta que no necesita tener TeX instalado, ya que Matplotlib incluye su propio analizador
de expresiones TeX, motor de diseño y fuentes. El motor de diseño es una adaptación bastante directa
de los algoritmos de diseño en TeX de Donald Knuth, por lo que la calidad es bastante buena
(Matplotlib también ofrece una usetex opción para aquellos que desean llamar a TeX para generar su
texto; consulte Representación de texto con LaTeX ). .

Cualquier elemento de texto puede utilizar texto matemático. Debe utilizar cadenas sin formato (antes
de las comillas con un 'r') y rodear el texto matemático con signos de dólar ($), como en TeX. El
texto normal y el texto matemático se pueden intercalar dentro de la misma cadena. Mathtext puede
usar DejaVu Sans (predeterminado), DejaVu Serif, las fuentes Computer Modern (de (La)TeX),
fuentes STIX (que están diseñadas para combinarse bien con Times) o una fuente Unicode que usted
proporcione. La fuente mathtext se puede seleccionar mediante rcParams["mathtext.fontset"]
(predeterminado:) 'dejavusans'(consulte Personalización de Matplotlib con hojas de estilo y
rcParams ) .

Aquí hay un ejemplo simple:

# plain text
plt.title('alpha > beta')
produce "alfa > beta".

Mientras que esto:

# math text
plt.title(r'$\alpha > \beta$')
produce " ".

Nota

Mathtext debe colocarse entre un par de signos de dólar ($). Para facilitar la visualización de valores
monetarios, por ejemplo, "$100,00", si hay un solo signo de dólar en toda la cadena, se mostrará
palabra por palabra como un signo de dólar. Este es un pequeño cambio con respecto al TeX normal,
donde el signo de dólar en texto no matemático tendría que tener un carácter de escape (" $ ").

Nota

Si bien la sintaxis dentro del par de signos de dólar ($) pretende ser similar a TeX, el texto exterior
no. En particular, personajes como:
# $ % & ~ _ ^ \ { } \( \) \[ \]

tienen un significado especial fuera del modo matemático en TeX. Por lo tanto, estos caracteres se
comportarán de manera diferente dependiendo de rcParams["text.usetex"]
(predeterminado False:). Consulte el tutorial de usetex para obtener más información.
Subíndices y superíndices
Para crear subíndices y superíndices, utilice los símbolos '_'y '^':

117
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
r'$\alpha_i > \beta_i$'
��>��
Para mostrar correctamente los subíndices o superíndices de varias letras, debe colocarlos entre
llaves {...}:

r'$\alpha^{ic} > \beta_{ic}$'


���>���
Algunos símbolos colocan automáticamente sus subíndices/superíndices debajo y encima del
operador. Por ejemplo, para escribir la suma de desde hasta , podrías hacer:

r'$\sum_{i=0}^\infty x_i$'
∑�=0∞��
Fracciones, binomios y números apilados
Se pueden crear fracciones, binomios y números apilados con los comandos y , respectivamente \
frac{}{}:\binom{}{}\genfrac{}{}{}{}{}{}

r'$\frac{3}{4} \binom{3}{4} \genfrac{}{}{0}{}{3}{4}$'


produce

34(34)34
Las fracciones se pueden anidar arbitrariamente:

r'$\frac{5 - \frac{1}{x}}{4}$'
produce

5−1�4
Tenga en cuenta que se debe tener especial cuidado al colocar paréntesis y corchetes alrededor de las
fracciones. Hacer las cosas de la manera obvia produce corchetes que son demasiado pequeños:

r'$(\frac{5 - \frac{1}{x}}{4})$'
(5−1�4)
La solución es anteponer el corchete \lefte \rightinformar al analizador que esos corchetes abarcan
todo el objeto:

r'$\left(\frac{5 - \frac{1}{x}}{4}\right)$'
(5−1�4)
Radicales
Los radicales se pueden producir con el \sqrt[]{}comando. Por ejemplo:

r'$\sqrt{2}$'
2
Cualquier base se puede proporcionar (opcionalmente) entre corchetes. Tenga en cuenta que la base
debe ser una expresión simple y no puede contener comandos de diseño como fracciones o
subíndices/superíndices:

r'$\sqrt[3]{x}$'
�3
Fuentes
La fuente predeterminada es cursiva para los símbolos matemáticos.

Nota

118
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Este valor predeterminado se puede cambiar usando rcParams["mathtext.default"]
(predeterminado 'it':). Esto es útil, por ejemplo, para usar la misma fuente que el texto normal no
matemático, configurándola en regular.
Para cambiar las fuentes, por ejemplo, para escribir "pecado" en una fuente romana, incluya el texto en
un comando de fuente:

r'$s(t) = \mathcal{A}\mathrm{sin}(2 \omega t)$'


�(�)=�sin(2��)
Más convenientemente, muchos nombres de funciones de uso común que están escritos en fuente
romana tienen atajos. Entonces la expresión anterior podría escribirse de la siguiente manera:

r'$s(t) = \mathcal{A}\sin(2 \omega t)$'


�(�)=�sin⁡(2��)
Aquí, "s" y "t" son variables en fuente cursiva (predeterminada), "sin" está en fuente romana y la
amplitud "A" está en fuente caligráfica. Tenga en cuenta que en el ejemplo anterior la caligrafía Aestá
aplastada en el formato sin. Puedes usar un comando de espaciado para agregar un pequeño espacio en
blanco entre ellos:

r's(t) = \mathcal{A}\/\sin(2 \omega t)'


�(�)=�sin⁡(2��)
Las opciones disponibles con todas las fuentes son:

Dominio Resultado
\mathrm{Roman}
\mathit{Italic}
\mathtt{Typewriter}
\mathcal{CALLIGRAPHY}
Al utilizar las fuentes STIX , también tienes la opción de:

Dominio Resultado
\mathbb{blackboard}
\mathrm{\mathbb{blackboard}}
\mathfrak{Fraktur}
\mathsf{sansserif}
\mathrm{\mathsf{sansserif}}
También hay cinco "conjuntos de fuentes" globales para elegir, que se seleccionan mediante
el mathtext.fontsetparámetro en matplotlibrc .

dejavusans: DejaVu Sans

dejavuserif: DejaVu Serif

cm: Computadora moderna (TeX)

119
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
stix: STIX (diseñado para combinar bien con Times)

stixsans: STIX sans serif

Además, puede utilizar \mathdefault{...}o su alias \mathregular{...}para utilizar la fuente


utilizada para texto normal fuera de mathtext. Este enfoque tiene una serie de limitaciones, en
particular que habrá muchos menos símbolos disponibles, pero puede resultar útil para hacer que las
expresiones matemáticas se combinen bien con otro texto en la trama.

Fuentes
mathtext también proporciona una forma de utilizar fuentes personalizadas para matemáticas. Este
método es bastante complicado de usar y debe considerarse una función experimental únicamente para
usuarios pacientes. Al configurar rcParams["mathtext.fontset"](predeterminado: 'dejavusans')
en custom, puede configurar los siguientes parámetros, que controlan qué archivo de fuente usar para
un conjunto particular de caracteres matemáticos.

Parámetro Corresponde a
mathtext.it \mathit{}o cursiva predeterminada
mathtext.rm \mathrm{}romano (erguido)
mathtext.tt \mathtt{}Máquina de escribir (monoespacial)
mathtext.bf \mathbf{}negrita cursiva
mathtext.cal \mathcal{}caligráfico
mathtext.sf \mathsf{}sans-serif
Cada parámetro debe configurarse en un descriptor de fuente fontconfig (como se define en el capítulo
de fuentes aún por escribir).

Las fuentes utilizadas deben tener una asignación Unicode para poder encontrar caracteres no latinos,
como el griego. Si desea utilizar un símbolo matemático que no está contenido en sus fuentes
personalizadas, puede establecer rcParams["mathtext.fallback"](predeterminado: 'cm')
en 'cm', 'stix'o 'stixsans' lo que hará que el sistema mathtext use caracteres de una fuente
alternativa siempre que no se pueda encontrar un carácter en particular en la fuente personalizada.

Tenga en cuenta que los glifos matemáticos especificados en Unicode han evolucionado con el tiempo
y es posible que muchas fuentes no tengan glifos en el lugar correcto para el texto matemático.

Acentos
Un comando de acento puede preceder a cualquier símbolo para agregar un acento encima. Para
algunos de ellos existen formas largas y cortas.

Dominio Resultado
\acute ao\'a
\bar a
\breve a
\dot ao\.a
\ddot ao\''a
\dddot a
120
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Dominio Resultado
\ddddot a
\grave ao\`a
\hat ao\^a
\tilde ao\~a
\vec a
\overline{abc}
Además, hay dos acentos especiales que se ajustan automáticamente al ancho de los símbolos
siguientes:

Dominio Resultado
\widehat{xyz}
\widetilde{xyz}
Se debe tener cuidado al poner acentos en las i y j minúsculas. Tenga en cuenta que a continuación \
imathse utiliza para evitar el punto adicional sobre la i:

r"$\hat i\ \ \hat \imath$"


�^ �^
Símbolos
También puede utilizar una gran cantidad de símbolos TeX, como en \infty, \leftarrow, .\sum\int

Griego en minúsculas

α\alpha b\beta χ\chi δ\delta ϝ\digamma ε\epsilon


η\eta γ\gamma ι\iota k\kappa λ\lambda µ\mu
v\nu ω\omega ϕ\phi π\pi ψ\psi ρ\rho
σ\sigma τ\tau θ\theta υ\upsilon ε\varepsilon ϰ\varkappa
φ\varphi ϖ\varpi ϱ\varrho ς\varsigma ϑ\vartheta ξ\xi
ζ\zeta
Griego en mayúsculas

Δ\Delta Γ\Gamma Λ\Lambda Ω\Omega Φ\Phi Π\Pi Ψ\Psi Σ\Sigma


Θ\Theta Υ\Upsilon Ξ\Xi ℧\mho ∇\nabla
hebreo

ℵ\aleph ℶ\beth ℸ\daleth ℷ\gimel


Delimitadores

// [[ ⇓\Downarrow ⇑\Uparrow ‖\Vert \\backslash


↓\downarrow ⟨\langle ⌈\lceil ⌊\lfloor ⌞\llcorner ⌟\lrcorner
⟩\rangle ⌉\rceil ⌋\rfloor ⌜\ulcorner ↑\uparrow ⌝\urcorner
|\vert {\{ ‖\| }\} ]] ||
Grandes símbolos

⋂\bigcap ⋃\bigcup ⨀\bigodot ⨁\bigoplus ⨂\bigotimes ⨄\biguplus


⋁\bigvee ⋀\bigwedge ∐\coprod ∫\int ∮\oint ∏\prod
∑\sum
121
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
Nombres de funciones estándar

pr\Pr arccos\arccos arcosin\arcsin arctán\arctan argumento\arg porque\cos


aporrear\cosh cuna\cot coth\coth csc\csc grados\deg det\det
oscuro\dim Exp\exp mcd\gcd hombre\hom inf\inf Ker\ker
LG\lg Lim\lim limar\liminf limpiar\limsup en\ln registro\lo
máximo\max mín.\min segundo\sec pecado\sin sinh\sinh sorber\sup
broncearse\tan tanh\tanh
Símbolos de operación y relación binaria.

≎\Bumpeq ⋒\Cap ⋓\Cup ≑\Doteq


⨝\Join ⋐\Subset ⋑\Supset ⊩\Vdash
⊪\Vvdash ≈\approx ≊\approxeq ∗\ast
≍\asymp ϶\backepsilon ∽\backsim ⋍\backsimeq
⊼\barwedge ∵\because ≬\between ○\bigcirc
▽\bigtriangledown △\bigtriangleup ◀\blacktriangleleft ▶\blacktriangleright
⊥\bot ⋈\bowtie ⊡\boxdot ⊟\boxminus
⊞\boxplus ⊠\boxtimes ∙\bullet ≏\bumpeq
∩\cap ⋅\cdot ∘\circ ≗\circeq
≔\coloneq ≅\cong ∪\cup ⋞\curlyeqprec
⋟\curlyeqsucc ⋎\curlyvee ⋏\curlywedge †\dag
⊣\dashv ‡\ddag ⋄\diamond ÷\div
⋇\divideontimes ≐\doteq ≑\doteqdot ∔\dotplus
⌆\doublebarwedge ≖\eqcirc ≕\eqcolon ≂\eqsim
⪖\eqslantgtr ⪕\eqslantless ≡\equiv ≒\fallingdotseq
⌢\frown ≥\geq ≧\geqq ⩾\geqslant
≫\gg ⋙\ggg ⪺\gnapprox ≩\gneqq
⋧\gnsim ⪆\gtrapprox ⋗\gtrdot ⋛\gtreqless
⪌\gtreqqless ≷\gtrless ≳\gtrsim ∈\in
⊺\intercal ⋋\leftthreetimes ≤\leq ≦\leqq
⩽\leqslant ⪅\lessapprox ⋖\lessdot ⋚\lesseqgtr
⪋\lesseqqgtr ≶\lessgtr ≲\lesssim ≪\ll
⋘\lll ⪹\lnapprox ≨\lneqq ⋦\lnsim
⋉\ltimes ∣\mid ⊧\models ∓\mp
⊯\nVDash ⊮\nVdash ≉\napprox ≇\ncong
≠\ne ≠\neq ≠\neq ≢\nequiv
≱\ngeq ≯\ngtr ∋\ni ≰\nleq
≮\nless ∤\nmid ∉\notin ∦\nparallel
⊀\nprec ≁\nsim ⊄\nsubset ⊈\nsubseteq
⊁\nsucc ⊅\nsupset ⊉\nsupseteq ⋪\ntriangleleft
⋬\ntrianglelefteq ⋫\ntriangleright ⋭\ntrianglerighteq ⊭\nvDash
⊬\nvdash ⊙\odot ⊖\ominus ⊕\oplus
⊘\oslash ⊗\otimes ∥\parallel ⟂\perp
⋔\pitchfork ±\pm ≺\prec ⪷\precapprox
122
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
≼\preccurlyeq ≼\preceq ⪹\precnapprox ⋨\precnsim
≾\precsim ∝\propto ⋌\rightthreetimes ≓\risingdotseq
⋊\rtimes ∼\sim ≃\simeq ∕\slash
⌣\smile ⊓\sqcap ⊔\sqcup ⊏\sqsubset
⊏\sqsubset ⊑\sqsubseteq ⊐\sqsupset ⊐\sqsupset
⊒\sqsupseteq ⋆\star ⊂\subset ⊆\subseteq
⫅\subseteqq ⊊\subsetneq ⫋\subsetneqq ≻\succ
⪸\succapprox ≽\succcurlyeq ≽\succeq ⪺\succnapprox
⋩\succnsim ≿\succsim ⊃\supset ⊇\supseteq
⫆\supseteqq ⊋\supsetneq ⫌\supsetneqq ∴\therefore
×\times ⊤\top ◁\triangleleft ⊴\trianglelefteq
≜\triangleq ▷\triangleright ⊵\trianglerighteq ⊎\uplus
⊨\vDash ∝\varpropto ⊲\vartriangleleft ⊳\vartriangleright
⊢\vdash ∨\vee ⊻\veebar ∧\wedge
≀\wr
Símbolos de flecha

⇓\Downarrow ⇐\Leftarrow ⇔\Leftrightarrow ⇚\Lleftarrow


⟸\Longleftarrow ⟺\Longleftrightarrow ⟹\Longrightarrow ↰\Lsh
⇗\Nearrow ⇖\Nwarrow ⇒\Rightarrow ⇛\Rrightarrow
↱\Rsh ⇘\Searrow ⇙\Swarrow ⇑\Uparrow
⇕\Updownarrow ↺\circlearrowleft ↻\circlearrowright ↶\curvearrowleft
↷\curvearrowright ⤎\dashleftarrow ⤏\dashrightarrow ↓\downarrow
⇊\downdownarrows ⇃\downharpoonleft ⇂\downharpoonright ↩\hookleftarrow
↪\hookrightarrow ⇝\leadsto ←\leftarrow ↢\leftarrowtail
↽\leftharpoondown ↼\leftharpoonup ⇇\leftleftarrows ↔\leftrightarrow
⇆\leftrightarrows ⇋\leftrightharpoons ↭\leftrightsquigarrow ↜\leftsquigarrow
⟵\longleftarrow ⟷\longleftrightarrow ⟼\longmapsto ⟶\longrightarrow
↫\looparrowleft ↬\looparrowright ↦\mapsto ⊸\multimap
⇍\nLeftarrow ⇎\nLeftrightarrow ⇏\nRightarrow ↗\nearrow
↚\nleftarrow ↮\nleftrightarrow ↛\nrightarrow ↖\nwarrow
→\rightarrow ↣\rightarrowtail ⇁\rightharpoondown ⇀\rightharpoonup
⇄\rightleftarrows ⇄\rightleftarrows ⇌\rightleftharpoons ⇌\rightleftharpoons
⇉\rightrightarrows ⇉\rightrightarrows ↝\rightsquigarrow ↘\searrow
↙\swarrow →\to ↞\twoheadleftarrow ↠\twoheadrightarrow
↑\uparrow ↕\updownarrow ↕\updownarrow ↿\upharpoonleft
↾\upharpoonright ⇈\upuparrows
Símbolos varios

ps\$ A\AA Ⅎ\Finv ⅁\Game


ℑ\Im ¶\P ℜ\Re §\S
∠\angle ‵\backprime ★\bigstar ■\blacksquare
▴\blacktriangle ▾\blacktriangledown ⋯\cdots ✓\checkmark
®\circledR Ⓢ\circledS ♣\clubsuit ∁\complement
123
PROGRAMACIÓN PYTHON PARA INGENIEROS
CIVILES ING. EDUARDO LÓPEZ SÁNCHEZ
©\copyright ⋱\ddots ♢\diamondsuit ℓ\ell
∅\emptyset d\eth ∃\exists ♭\flat
∀\forall ħ\hbar ♡\heartsuit ℏ\hslash
∭\iiint ∬\iint i\imath ∞\infty
ȷ\jmath …\ldots ∡\measuredangle ♮\natural
¬\neg ∄\nexists ∰\oiiint ∂\partial
′\prime ♯\sharp ♠\spadesuit ∢\sphericalangle
ß\ss ▿\triangledown ∅\varnothing ▵\vartriangle
⋮\vdots ℘\wp ¥\yen
Si un símbolo en particular no tiene un nombre (como ocurre con muchos de los símbolos más oscuros
de las fuentes STIX), también se pueden utilizar caracteres Unicode:

r'$\u23ce$'
Ejemplo
A continuación se muestra un ejemplo que ilustra muchas de estas características en contexto.

124

También podría gustarte