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