Python en Ingeniería Civil
Requisitos de finalización
Estos ejercicios son para demostrar a los alumnos el uso de Python en la resolución problemas en el ámbito de la Ingeniería Civil
1. Cálculo de un Silo.
Este código de Python hecho por un alumno de Ing. Civil y enviado por el Ing. Javier Duarte, permite calcular datos sobre un silo.
Utiliza la librería : matplotlib
# -*- coding: utf-8 -*-
"""
Created on Thu Aug 27 22:54:33 2020
@author: Maria Belen
"""
#--------------Importar PI----------------------------
import math
PI=math.pi
#--------------Mostrar imagen-------------------------
#La imagen silos.jpg debe estar en el mismo directorio que el script de Python
from PIL import Image
im = Image.open('silos.jpg')
im.show()
print('')
print('CALCULADORA DE VOLUMEN'.center(50,"="))
print('')
#-------------Funcion calcular contenido------------------------
def calculo():
f=((39)**(1/2))/4
while True:
try:
t=float(input('Ingrese el espesor de los bordes del silo en metros entre [0:{:.3f}]: '.format(2-f)))
if t>0 and t<2-f:
break
else:
print('Ingrese un grosor entre [0;{:.3f}]'.format(2-f))
except ValueError:
print('Ingrese un numero. Reintente')
continue
#print('La altura "h" que se hace referencia es la mostrada en la figura')
while True:
try:
h=float(input('Ingrese la altura "h" en metros que puede estar entre [-2,23;5,27]: '))
if h>=-2.23 and h<=5.27:
break
else:
print('Ingrese un numero valido')
continue
except ValueError:
print('Reintente. Ingrese un número')
continue
contenido=input('Ingrese el nombre del contenido del silo: ')
while True:
try:
densidad=float(input('Ingrese la densidad del {} en kg/m3: '.format(contenido)))
if densidad>0:
break
else:
print('Ingrese densidad mayor a cero')
continue
except ValueError:
print('Ingrese un numero. Reintente')
continue
f=((39)**(1/2))/4
if h>=(-2.23) and h<=(-1.73) :
V1=PI*((0.5-t)*(2.23+h-t)**2-((2.23+h-t)**3)/3)
masa1=V1*densidad
print('')
print('Si hay una altura {} m de {}, posee un volumen de {:.3f} m3 con un masa de {:.3f} Kg'.format(h,contenido,V1,masa1))
elif h>(-1.73) and h<=(0) :
r1=0.5-t
h1=-1.73
V1=PI*((0.5-t)*(2.23+h1-t)**2-((2.23+h1-t)**3)/3)
V2=PI*((1.73+h)*r1**2+((75/173)**2)*((1.73+h)**3)/3+(75/173)*r1*(1.73+h)**2)
V12=V1+V2
masa12=V12*densidad
print('')
print('Si hay una altura {} m de {}, posee un volumen de {:.3f} m3 con un masa de {:.3f} Kg'.format(h,contenido,V12,masa12))
elif h>(0) and h<=(3.27+f) :
r1=0.5-t
h1=-1.73
V1=PI*((0.5-t)*(2.23+h1-t)**2-((2.23+h1-t)**3)/3)
h2=0
V2=PI*((1.73+h2)*r1**2+((75/173)**2)*((1.73+h2)**3)/3+(75/173)*r1*(1.73+h2)**2)
V3=(5/4)**2*PI*h-PI*t*h
V123=V1+V2+V3
masa123=V123*densidad
print('')
print('Si hay una altura {} m de {}, posee un volumen de {:.3f} m3 con un masa de {:.3f} Kg'.format(h,contenido,V123,masa123))
elif h>(3.27+f) and h<=(5.27):
r1=0.5-t
h1=-1.73
V1=PI*((0.5-t)*(2.23+h1-t)**2-((2.23+h1-t)**3)/3)
h2=0
V2=PI*((1.73+h2)*r1**2+((75/173)**2)*((1.73+h2)**3)/3+(75/173)*r1*(1.73+h2)**2)
h3=3.27+f
V3=(5/4)**2*PI*h3-PI*t*h3
r4=2-t
V4=(r4**2*PI*(h-3.27-f-t)-(PI/3)*(((h-3.27-t)**3)-(f)**3))
V1234=V1+V2+V3+V4
masa1234=V1234*densidad
print('')
print('Si hay una altura {} m de {}, posee un volumen de {:.3f} m3 con un masa de {:.3f} Kg'.format(h,contenido,V1234,masa1234))
#-----------------Funcion Volumen total--------------
def vol_total():
f=((39)**(1/2))/4
r1=0.5
h1=-1.73
V1=PI*((0.5)*(2.23+h1)**2-((2.23+h1)**3)/3)
h2=0
V2=PI*((1.73+h2)*r1**2+((75/173)**2)*((1.73+h2)**3)/3+(75/173)*r1*(1.73+h2)**2)
h3=3.27+f
V3=(5/4)**2*PI*h3
r4=2
h4=5.27
V4=(r4**2*PI*(h4-3.27-f)-(PI/3)*(((h4-3.27)**3)-(f)**3))
V1234=V1+V2+V3+V4
return V1234
#-----------------Funcion volumen contenido---------------
def vol_contenido(t):
f=((39)**(1/2))/4
r1=0.5-t
h1=-1.73
V1=PI*((0.5-t)*(2.23+h1-t)**2-((2.23+h1-t)**3)/3)
h2=0
V2=PI*((1.73+h2)*r1**2+((75/173)**2)*((1.73+h2)**3)/3+(75/173)*r1*(1.73+h2)**2)
h3=3.27+f
V3=(5/4)**2*PI*h3-PI*t*h3
r4=2-t
h4=5.27
V4=(r4**2*PI*(h4-3.27-f-t)-(PI/3)*(((h4-3.27-t)**3)-(f)**3))
V1234_contenido=V1+V2+V3+V4
return V1234_contenido
#------------------Funcion calcular bordes----------------
def bordes1234():
f=((39)**(1/2))/4
while True:
try:
t=float(input('Ingrese el espesor de los bordes del silo en metros entre [0:{:.3f}]: '.format(2-f)))
if t>0 and t<2-f:
break
else:
print('Ingrese un grosor entre [0;{:.3f}]'.format(2-f))
except ValueError:
print('Ingrese un numero. Reintente')
continue
volumen_total=vol_total()
volumen_contenido=vol_contenido(t)
bordes=volumen_total-volumen_contenido
return bordes
#------------------Programa MENU----------------------------
while True:
print('')
print('MENU'.center(50,"-"))
print('')
print('Elija que desea hacer:\n\n1-Calcular volumen y masa de contenido\n2-Volumen bordes\n3-Volumen total\n4-Salir')
try:
print('')
eleccion=int(input('Su eleccion: '))
if eleccion==1:
calculo()
elif eleccion==2:
bordes1=bordes1234()
while True:
try:
print('')
densidad12=float(input('Ingrese la densidad de los bordes en kg/m3: '))
if densidad12>0:
break
else:
print('Ingrese densidad mayor a cero')
continue
except ValueError:
print('Ingrese un numero. Reintente')
continue
densidad_bordes=bordes1*densidad12
print('')
print('El volumen de bordes es de: {:.4f} m3 y la masa es de {:.3f} kg'.format(bordes1,densidad_bordes))
elif eleccion==3:
print('')
print("El volumen total es {:.3f} m3".format(vol_total()))
elif eleccion==4:
print('')
print('Finalizando programa....')
break
else:
print('Ingrese opcion valida')
continue
except ValueError:
print('Ingrese una opcion. Reintente')
continue