Mário Rubens Postado Outubro 15 Denunciar Share Postado Outubro 15 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() Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ArteEN Postado Outubro 15 Denunciar Share Postado Outubro 15 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) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Mário Rubens
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?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
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.