In [ ]:
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 17 13:34:08 2021

@author: Gustavo Eduardo Marcatti
"""
###------------------------------------------------------------------------###
# Utilizando as estruturas básicas do Python
###------------------------------------------------------------------------###
import math
# Função para computar o volume total de um talhão
def func_total(dap, sobr, area_talhao):
    alt = math.exp(3.7004 - 7.6165/dap)
    vol_arv = 0.0000599458 * dap**1.82083 * alt**0.97645
    vol_ha = 1111 * sobr/100 * vol_arv
    vol_talhao = vol_ha * area_talhao
    print("Volume total:", round(vol_talhao, 2), "m³")
    return(vol_talhao)


# Lista de teste
talhao_lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # código do talhão
area_lista = [40, 35, 42, 31, 28, 30, 40, 38, 60, 30] # área do talhão
dap_lista = [19, 25, 26, 23, 25, 27, 25, 26, 24, 18] # dap do talhão
sobr_lista = [90, 89, 93, 94, 92, 97, 99, 91, 85, 94] # sobrevivência no talhão

# aplicar a função sem processo de repetição em loop
vol_talhao1 = func_total(dap_lista[0], sobr_lista[0], area_lista[0]) # talhao 1
vol_talhao2 = func_total(dap_lista[1], sobr_lista[1], area_lista[1]) # talhao 2
vol_talhao3 = func_total(dap_lista[2], sobr_lista[2], area_lista[2]) # talhao 3

# Loop apenas com a impressão na tela
for i in range(len(talhao_lista)):
    print(func_total(dap_lista[i], sobr_lista[i], area_lista[i]) )

# Loop para armazenar os resultados de volume em uma lista
lista_vol = []
for i in range(len(talhao_lista)):
    lista_vol.append(func_total(dap_lista[i], sobr_lista[i], area_lista[i]) )

lista_vol
sum(lista_vol)

###------------------------------------------------------------------------###
# Utilizando a biblioteca pandas
###------------------------------------------------------------------------###
import pandas as pd
import numpy as np

# Lista de teste
talhao_lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # código do talhão
area_lista = [40, 35, 42, 31, 28, 30, 40, 38, 60, 30] # área do talhão
dap_lista = [19, 25, 26, 23, 25, 27, 25, 26, 24, 18] # dap do talhão
sobr_lista = [90, 89, 93, 94, 92, 97, 99, 91, 85, 94] # sobrevivência no talhão
dados = pd.DataFrame(zip(talhao_lista, area_lista, dap_lista, sobr_lista),
                     columns=['talhao', 'area', 'dap', 'sobr'])

# Solução vetorizando cada uma das operações
dados['alt'] = np.exp(3.7004 - 7.6165/dados['dap'])
dados['vol_arv'] = 0.0000599458 * dados['dap']**1.82083 * dados['alt']**0.97645
dados['vol_ha'] = 1111 * dados['sobr']/100 * dados['vol_arv'] 
dados['vol_talhao'] = dados['vol_ha'] * dados['area']

print(dados['vol_talhao'])
print("Volume total: ", dados['vol_talhao'].sum(), "m³")

# Solução utilizando a função apply
dados = pd.DataFrame(zip(talhao_lista, area_lista, dap_lista, sobr_lista),
                     columns=['talhao', 'area', 'dap', 'sobr'])

import math
# Função para computar o volume total de um talhão
def func_total(dap, sobr, area_talhao):
    alt = math.exp(3.7004 - 7.6165/dap)
    vol_arv = 0.0000599458 * dap**1.82083 * alt**0.97645
    vol_ha = 1111 * sobr/100 * vol_arv
    vol_talhao = vol_ha * area_talhao
    #print("Volume total:", round(vol_talhao, 2), "m³")
    return(vol_talhao)

dados['vol_talhao'] = dados.apply(lambda x: func_total(x.dap, x.sobr, x.area), axis=1)

###------------------------------------------------------------------------###
# Utilizando a biblioteca numpy
###------------------------------------------------------------------------###
import numpy as np
talhao_arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
area_arr = np.array([40, 35, 42, 31, 28, 30, 40, 38, 60, 30])
dap_arr = np.array([19, 25, 26, 23, 25, 27, 25, 26, 24, 18])
sobr_arr = np.array([90, 89, 93, 94, 92, 97, 99, 91, 85, 94])

alt_arr = np.exp(3.7004 - 7.6165/dap_arr)
vol_arv = 0.0000599458 * dap_arr**1.82083 * alt_arr**0.97645
vol_ha = 1111 * sobr_arr/100 * vol_arv
vol_talhao = vol_ha * area_arr

print("Volume total: ", vol_talhao.sum(), "m³")