CSE 111: Programação com Funções

S04 - Projeto: Química

Finalidade

Prove que você pode desenvolver um programa Python que cria e usa listas compostas.

Projeto

Não use IA para gerar o código deste programa.

Usar IA para gerar este programa é uma violação da política de IA do curso e pode resultar em nota zero na atividade, reprovação na disciplina ou até remoção do programa.

Se você precisar de ajuda com a atividade ou tiver dúvidas sobre o uso de IA, por favor pergunte ao seu instrutor.

Contexto

Você faz estágio em uma instalação de pesquisa do governo. O laboratório de química solicitou um programa que calculará a massa molar e o número de mols para uma determinada quantidade de um composto químico. Designaram você para criar o programa.

Mas eu não me formei em química!

Muitas vezes você ficará responsável por criar programas dos quais talvez não consiga entender completamente o assunto. Quando isso acontece, use como base os requisitos fornecidos pelo usuário. Para este problema, você pode não saber o que é um mol ou uma massa molar. Não se preocupe. O usuário sabe o que são e pode fornecer as informações necessárias para resolver seu problema.

Requisitos do Usuário

Mariana Cardoso, a química responsável, pediu que você criasse um programa com os seguintes requisitos.

  1. Solicitar uma fórmula química ao usuário.
  2. Solicitar a quantidade do composto em gramas ao usuário (ou seja, massa_da_amostra).
  3. Calcular e exibir a massa molar.
  4. Calcular e exibir o número de mols.

Mariana forneceu as seguintes informações:

Design

Os requisitos foram enviados para Alice Laurent, uma de nossas arquitetas de software. Ela forneceu a seguinte orientação.

Alice desenvolveu a seguinte arquitetura de programa. Use essas informações para criar seu programa. Como programador júnior, você deve usar as funções definidas por Alice, utilizando exatamente os nomes e parâmetros indicados.

Especificações de Função
Nome da Função Tipo de Retorno de Parâmetros Descrição
criar_tabela_periodica Parâmetros: (nenhum) Retorna: Dicionário Retorna um objeto de dicionário com todos os elementos da tabela periódica.
  • Para cada elemento, a chave do dicionário deve ser o símbolo do elemento.
  • O valor contém uma lista em que o primeiro item é o nome do elemento e o segundo é a massa atômica.
calcular_massa_molar Parâmetros: lista_quantidade_simbolos, dic_da_tabela_periodica Retorna: float Calcule e retorne a massa molar total de todos os elementos listados em lista_quantidade_simbolos.
  1. Percorra os itens na lista_quantidade_simbolos utilizando um loop.
    1. Para cada item na lista, use o símbolo do elemento para procurar a massa atômica do elemento no dicionário dic_da_tabela_periodica.
    2. Multiplique a massa atômica do elemento pela quantidade de átomos do elemento (da lista_quantidade_simbolos) e adicione isso à massa total.
  2. Retorne a massa total.
main Parâmetros: (nenhum) Retorna: (nenhum)
  1. Solicita ao usuário uma fórmula química.
  2. Solicita ao usuário o tamanho da amostra em gramas.
  3. Chama criar_tabela_periodica (da biblioteca fornecida) para obter uma lista de elementos na fórmula. (armazena em uma variável).
  4. Chama a função interpretar_formula e armazena o dicionário retornado na variável.
  5. Chama calcular_massa_molar para calcular a massa molar. Passa o dicionário da tabela periódica e a lista de elementos retornados das funções anteriores.
  6. Exibe a massa molar.
  7. Calcula o número de mols na amostra.
  8. Exibe o número de mols.
Outras informações úteis.

Enquanto trabalhava neste projeto, Alice descobriu que outro programador já havia criado uma biblioteca que tem uma função chamada interpretar_formula para outro projeto. Esta função faz exatamente o que você precisa. Você pode usar essa biblioteca em seu programa para economizar tempo. A função está na biblioteca formula.py

Etapa

Comece seu projeto escrevendo o esboço do seu programa. Siga estas etapas:

  1. Crie uma pasta para o projeto desta semana e dê a ela o nome que você quiser.
  2. Abra a pasta que você acabou de criar no VSCode.
  3. Crie um arquivo chamado quimica.py.
  4. Crie a função criar_tabela_periodica. Quando concluída, a função retornará um dicionário que contém todos os elementos da tabela periódica. Seu dicionário deve ser parecido com este:
    dic_da_tabela_periodica = {
      # símbolo: [nome, massa_atomica]
      "Ac": ["Actínio", 227],
      "Ag": ["Prata", 107.8682],
      "Al": ["Alumínio", 26.9815386],
      ⋮
      }
    Lista completa de elementos:
    Mariana forneceu esta lista de elementos para você usar.
    Símbolo Nome Massa Atômica
    AcActínio227
    AgPrata107.8682
    AlAlumínio26.9815386
    ArArgônio39.948
    AsArsênio74.9216
    AtAstato210
    AuOuro196.966569
    BBoro10.811
    BaBário137.327
    BeBerílio9.012182
    BiBismuto208.9804
    BrBromo79.904
    CCarbono12.0107
    CaCálcio40.078
    CdCádmio112.411
    CeCério140.116
    ClCloro35.453
    CoCobalto58.933195
    CrCrômio51.9961
    CsCésio132.9054519
    CuCobre63.546
    DyDisprósio162.5
    ErÉrbio167.259
    EuEurópio151.964
    FFlúor18.9984032
    FeFerro55.845
    FrFrâncio223
    GaGálio69.723
    GdGadolínio157.25
    GeGermânio72.64
    HHidrogênio1.00794
    HeHélio4.002602
    HfHáfnio178.49
    HgMercúrio200.59
    HoHólmio164.93032
    IIodo126.90447
    InÍndio114.818
    IrIrídio192.217
    KPotássio39.0983
    KrKriptônio83.798
    LaLantânio138.90547
    LiLítio6.941
    LuLutécio174.9668
    MgMagnésio24.305
    MnManganês54.938045
    MoMolibdênio95.96
    NNitrogênio14.0067
    NaSódio22.98976928
    NbNióbio92.90638
    NdNeodímio144.242
    NeNeônio20.1797
    NiNíquel58.6934
    NpNeptúnio237
    OOxigênio15.9994
    OsÓsmio190.23
    PFósforo30.973762
    PaProtactínio231.03588
    PbChumbo207.2
    PdPaládio106.42
    PmPromécio145
    PoPolônio209
    PrPraseodímio140.90765
    PtPlatina195.084
    PuPlutônio244
    RaRádio226
    RbRubídio85.4678
    ReRênio186.207
    RhRódio102.9055
    RnRadônio222
    RuRutênio101.07
    SEnxofre32.065
    SbAntimônio121.76
    ScEscândio44.955912
    SeSelênio78.96
    SiSilício28.0855
    SmSamário150.36
    SnEstanho118.71
    SrEstrôncio87.62
    TaTântalo180.94788
    TbTérbio158.92535
    TcTecnécio98
    TeTelúrio127.6
    ThTório232.03806
    TiTitânio47.867
    TlTálio204.3833
    TmTúlio168.93421
    UUrânio238.02891
    VVanádio50.9415
    WTungstênio183.84
    XeXenônio131.293
    YÍtrio88.90585
    YbItérbio173.054
    ZnZinco65.38
    ZrZircônio91.224
  5. Adicione a função main. Por enquanto, basta fazer com que a função main chame criar_tabela_periodica e exiba a tabela retornada.
  6. Inclua o seguinte código na parte inferior do seu programa para facilitar os testes.
    if __name__ == "__main__":
      main()

Teste

Verifique se seu programa funciona corretamente seguindo cada etapa deste procedimento de teste:

Baixe o arquivo Python test_etapa_quimica.py e salve-o na mesma pasta onde você salvou seu programa quimica.py. Execute o arquivo test_etapa_quimica.py e verifique se o teste foi aprovado. Se as funções de teste não forem aprovadas, há um erro no seu programa quimica.py. Leia a saída de pytest, corrija o erro e execute o arquivo test_etapa_quimica.py novamente até que todas as funções de teste sejam aprovadas.

============================= test session starts =============================
platform win32 -- Python 3.13.4, pytest-8.4.1, pluggy-1.6.0 --
cachedir: .pytest_cache
rootdir: C:\Users\cse111\week04\quimica
collected 1 item                                                                                                                                                           

test_etapa_quimica.py::test_criar_tabela_periodica [PASSED 100%]

================================ 1 passed in 0.04s ===============================

Envio de Etapa

Na data de entrega ou antes dela, retorne ao Canvas e reporte seu progresso nesta etapa.

Conclusão do Projeto

Conclua seu projeto terminando o código para as funções calcular_massa_molar e main. Certifique-se de que seu código atenda aos requisitos especificados acima.

  1. Baixe o arquivo Python formula.py e salve-o na mesma pasta onde você salvou seu programa quimica.py. O arquivo formula.py inclui uma classe FormulaError e uma função chamada interpretar_formula. Ambos estão completos e funcionam corretamente, então você não deve alterá-los.
  2. Abra o arquivo formula.py no VS Code e leia a string entre aspas triplas no topo da função interpretar_formula. Segundo essa string, a função interpretar_formula converte uma fórmula química para uma molécula, como "C13H16N2O2" (melatonina), em uma lista de compostos, como [["C", 13], ["H", 16], ["N", 2], ["O", 2]]. Esta lista de compostos é conhecida como lista_quantidade_simbolos porque contém os símbolos dos elementos químicos e a quantidade de átomos de cada elemento que aparecem em uma fórmula química.
  3. Copie e cole a seguinte instrução de importação no seu programa quimica.py, na parte superior do programa. Esta instrução importará a função interpretar_formula do arquivo formula.py para o seu programa quimica.py, assim você poderá chamar a função interpretar_formula no programa.
    from formula import interpretar_formula
  4. Complete a função calcular_massa_molar de acordo com as especificações do programa.
    Exemplo de Cálculo:

    Este exemplo pode ajudar você a escrever seu código. Considere uma amostra de glicose (C6H12O6) com uma massa de 12.37 gramas. Para usar uma calculadora de massa molar, um químico insere:

    • C6H12O6
    • 12.37

    A calculadora calcula a massa molar da glicose fazendo o seguinte:

    1. Somar o número de átomos de cada elemento na fórmula da glicose:
      6 átomos de carbono
      12 átomos de hidrogênio
      6 átomos de oxigênio
    2. Encontrar a massa atômica de cada elemento:
      Símbolo Nome Massa Atômica
      C Carbono 12.0107
      H Hidrogênio 1.00794
      O Oxigênio 15.9994
    3. Multiplicar o número de átomos pela massa atômica:
      6 × 12.0107 = 72.0642
      12 × 1.00794 = 12.09528
      6 × 15.9994 = 95.9964
    4. Somar os resultados das multiplicações para obter a massa molar da glicose:
      72.0642 + 12.09528 + 95.9964 = 180.15588 gramas/mol

    Em seguida, a calculadora divide a massa da amostra de glicose pela massa molar de glicose, o que resulta no número de mols na amostra:

    12.37 gramas
    180.15588 gramas/mol
    = 0.06866 mols

    A calculadora exibe dois resultados para o químico:

    • a massa molar da glicose: 180.15588 gramas/mol
    • o número de mols na amostra: 0.06866 mols
    Dica: Não se esqueça das variáveis do índice.Lembre-se de que, ao trabalhar com listas compostas, é útil criar variáveis que contenham os valores de índice dos seus dados. Por exemplo, se eu tivesse uma lista com listas que descrevessem pessoas e suas cores favoritas:
    pessoas=[['James','vermelho'],['Julia','azul'],['Ricardo','amarelo']]
    O código a seguir exibirá o nome e a cor favorita de cada pessoa.
    for pessoa in pessoas:
      print(f"A cor favorita de {pessoa[0]} é {pessoa[1]}")
    Se usar variáveis bem nomeadas para armazenar os índices da lista, o código será muito mais fácil de entender.
    INDICE_NOMES=0
    INDICE_CORES=1
    for pessoa in pessoas:
      print(f"A cor favorita de {pessoa[INDICE_NOMES]} é {pessoa[INDICE_CORES]}")
  5. Complete a função main. Remova o código da etapa e conclua a função main de acordo com as especificações do programa.
Desafios Adicionais

Se o seu programa atender aos requisitos para esta atividade, conforme descrito acima, você receberá 93% dos pontos possíveis. Para ganhar os 7% de pontos restantes, você precisará adicionar um ou mais recursos ao seu programa. Use sua criatividade. Adicione um comentário no topo do seu código que explique a(s) melhoria(s).

Documente suas melhorias:

Se você escolher adicionar recursos ao seu código, coloque um comentário no topo do seu arquivo descrevendo o que você fez para melhorar seu programa.

Teste

Verifique se seu programa funciona corretamente seguindo cada etapa deste procedimento de teste:

  1. Baixe o arquivo Python test_quimica.py e salve-o na mesma pasta onde você salvou seu programa quimica.py. Execute o arquivo test_quimica.py e certifique-se de que todas as três funções de teste sejam aprovadas. Se alguma das funções de teste não for aprovada, há um erro no seu programa quimica.py. Leia a saída de pytest, corrija o erro e execute o arquivo test_quimica.py novamente até que todas as funções de teste sejam aprovadas.
    > python test_quimica_2.py
    ==================== test session starts ======================
    platform win32--Python 3.8.6, pytest-6.1.2. py-1.9.0. pluggy
    rootdir: C:\Users\cse111\week04
    collected 3 itens
    test_quimica_2.py::test_criar_tabela_periodica PASSED  [33%]
    test_quimica_2.py::test_interpretar_formula PASSED        [ 66%]
    test_quimica_2.py::test_calcular_massa_molar PASSED   [100%]
    ===================== 3 passed in 0.17s ======================
  2. Execute seu programa quimica.py finalizado. Insira a entrada mostrada abaixo e certifique-se de que seu programa exiba a saída mostrada abaixo.
    > python quimica.py
    Insira a fórmula molecular da amostra: C6H6
    Insira a massa em gramas da amostra: 25.04
    78.11184 gramas/mol
    0.32057 mols

Envio do Projeto

Volte ao Canvas e envie seu arquivo quimica.py para que seu programa seja avaliado.

Não tire zero!

Se o seu programa contiver um erro que o impeça de ser executado até o fim, a tarefa receberá nota zero e você precisará corrigir e reenviar o código. Em outras palavras, evite enviar um programa que não funciona. Em vez disso, peça ajuda para entender o erro e corrigi-lo antes do envio.

Links Úteis:

  1. Voltar para: Visão Geral da Semana | Página Inicial