Python en 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