Ir para conteúdo
Fórum Script Brasil
  • 0

Boa noite Estou tentando fazer um programa para calcular a massa molar de elementos estou tendo


Mário Rubens

Pergunta

Boa noite Estou tentando fazer um programa para calcular a massa molar de elementos estou tendo dificuldades ao obter o resultado quando o elemento e composto exemplo H2O OU H2O2. ALGUÉM PODERIA ME AJUDAR?  

 
import tkinter as tk
from tkinter import messagebox
 
def calcular_massa_molar(composto):
    massas = {
        'H': 1.008,
        'He': 4.0026,
        'Li': 6.94,
        'Be': 9.0122,
        'B': 10.81,
        'C': 12.011,
        'N': 14.007,
        'O': 15.999,
        'F': 18.998,
        'Ne': 20.180,
        'Na': 22.990,
        'Mg': 24.305,
        'Al': 26.982,
        'Si': 28.085,
        'P': 30.974,
        'S': 32.06,
        'Cl': 35.45,
        'Ar': 39.948,
        'K': 39.098,
        'Ca': 40.078,
    }
 
    massa_total = 0.0
    i = 0
    quantidade=0.0
    masssaresult=0.0
   
    while i < len(composto):
       
       
             
        elemento = composto[i]
       
        if elemento.isdecimal():
           
            quantidade = float(elemento)*quantidade
            print(quantidade,"Q")
           
   
        if elemento.isalpha():
            masssaresult=massas.get(elemento,i)
           
            print(masssaresult, "2")
            massa_total = masssaresult
   
 
               
           
            #quantidade = int(composto[i + 1])
            #i += 1
       
            #quantidade = 1
         
       # massa_total += massas.get(elemento, 0) * quantidade
        if quantidade == 0:
            print("total:", massa_total)
        else:
            massa_total  = masssaresult*quantidade  
       
            print("total1:", massa_total)
       
        i += 1
   
    return massa_total
 
def calcular():
    composto = entrada_composto.get()
    if not composto:
        messagebox.showerror("Erro", "Por favor, insira um composto químico.")
        return
 
    try:
        massa_molar = calcular_massa_molar(composto)
        print(massa_molar)
        resultado_var.set(f"A massa molar de {composto} é {massa_molar:.2f} g/mol.")
    except KeyError:
        messagebox.showerror("Erro", "Composto contém elementos desconhecidos.")
    except Exception as e:
        messagebox.showerror("Erro", f"Ocorreu um erro: {e}")
 
background_color = "#2C3E50"
foreground_color = "#ECF0F1"
button_color = "#1ABC9C"
entry_color = "#34495E"
font_style = ("Arial", 12)
font_bold = ("Arial", 12, "bold")
 
janela = tk.Tk()
janela.title("Calculadora Estequiométrica Avançada")
janela.geometry("400x250")
janela.config(bg=background_color)
 
frame_top = tk.Frame(janela, bg=background_color)
frame_top.pack(pady=20)
 
titulo = tk.Label(frame_top, text="Calculadora Estequiométrica", font=("Arial", 16, "bold"), bg=background_color, fg=foreground_color)
titulo.pack()
 
instrucao = tk.Label(frame_top, text="Digite o composto químico (ex: H2O)", font=font_style, bg=background_color, fg=foreground_color)
instrucao.pack()
 
frame_middle = tk.Frame(janela, bg=background_color)
frame_middle.pack(pady=10)
 
entrada_composto = tk.Entry(frame_middle, width=25, font=font_style, bg=entry_color, fg=foreground_color, justify="center")
entrada_composto.grid(row=0, column=0, padx=10)
 
botao_calcular = tk.Button(frame_middle, text="Calcular", font=font_bold, bg=button_color, fg=foreground_color, command=calcular)
botao_calcular.grid(row=0, column=1)
 
frame_bottom = tk.Frame(janela, bg=background_color)
frame_bottom.pack(pady=20)
 
resultado_var = tk.StringVar()
resultado_label = tk.Label(frame_bottom, textvariable=resultado_var, font=font_style, bg=background_color, fg=foreground_color)
resultado_label.pack()
 
janela.mainloop()



 
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

acho difícil do jeito q você esta fazendo, filtrando e já calculando, acho melhor assim:

reorganizei a tabela de massas, a lógica é ter o elementos com símbolos com mais de uma letra a frente para serem testados primeiro

então fiz uma filtragem transformando o composto para uma lista

e só depois fiz os cálculos

massas = {
    'He': 4.0026,
    'Li': 6.94,
    'Be': 9.0122,
    'Ne': 20.180,
    'Na': 22.990,
    'Mg': 24.305,
    'Al': 26.982,
    'Si': 28.085,
    'Cl': 35.45,
    'Ar': 39.948,
    'Ca': 40.078,
    'H': 1.008,
    'B': 10.81,
    'C': 12.011,
    'N': 14.007,
    'O': 15.999,
    'F': 18.998,
    'P': 30.974,
    'S': 32.06,
    'K': 39.098,
}

composto = 'H2O'
#composto = 'H2O2'
lista = []

while composto:
    if composto[0].isdecimal():
        elemento = lista[-1]
        for i in range(int(composto[0])-1):
            lista.append(elemento)

        composto = composto[1:]

    else:
        for elemento in massas:
            if composto.startswith(elemento):
                lista.append(elemento)
                composto = composto.removeprefix(elemento)
                break

massa_resultado = 0
for i in lista:
    massa_resultado += massas[i]

print(lista)
print(massa_resultado)

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652,1k
×
×
  • Criar Novo...