```python

  1. A dictionary of some common elements and their relative atomic masses

elements = {'H': 1.008, 'He': 4.003, 'Li': 6.941, 'Be': 9.012,

           'B': 10.81, 'C': 12.01, 'N': 14.01, 'O': 16.00, 
           'F': 19.00, 'Ne': 20.18, 'Na': 22.99, 'Mg': 24.31, 
           'Al': 26.98, 'Si': 28.09, 'P': 30.97, 'S': 32.07, 
           'Cl': 35.45, 'K': 39.10, 'Ar': 39.95, 'Ca': 40.08, 
           'Sc': 44.96, 'Ti': 47.87, 'V': 50.94, 'Cr': 52.00, 
           'Mn': 54.94, 'Fe': 55.85, 'Ni': 58.69, 'Co': 58.93, 
           'Cu': 63.55, 'Zn': 65.38, 'Ga': 69.72, 'Ge': 72.63, 
           'As': 74.92, 'Se': 78.96, 'Br': 79.90, 'Kr': 83.80, 
           'Rb': 85.47, 'Sr': 87.62, 'Y': 88.91, 'Zr': 91.22, 
           'Nb': 92.91, 'Mo': 95.94, 'Tc': 98.00, 'Ru': 101.1, 
           'Rh': 102.9, 'Pd': 106.4, 'Ag': 107.9, 'Cd': 112.4, 
           'In': 114.8, 'Sn': 118.7, 'Sb': 121.8, 'I': 126.9, 
           'Te': 127.6, 'Xe': 131.3, 'Cs': 132.9, 'Ba': 137.3, 
           'La': 138.9, 'Ce': 140.1, 'Pr': 140.9, 'Nd': 144.2, 
           'Pm': 145.0, 'Sm': 150.4, 'Eu': 152.0, 'Gd': 157.3, 
           'Tb': 158.9, 'Dy': 162.5, 'Ho': 164.9, 'Er': 167.3, 
           'Tm': 168.9, 'Yb': 173.0, 'Lu': 175.0, 'Hf': 178.5, 
           'Ta': 180.9, 'W': 183.8, 'Re': 186.2, 'Os': 190.2, 
           'Ir': 192.2, 'Pt': 195.1, 'Au': 197.0, 'Hg': 200.6, 
           'Tl': 204.4, 'Pb': 207.2, 'Bi': 208.9, 'Th': 232.0, 
           'Pa': 231.0, 'U': 238.0, 'Np': 237.0, 'Pu': 244.0, 
           'Am': 243.0, 'Cm': 247.0, 'Bk': 247.0, 'Cf': 251.0, 
           'Es': 252.0, 'Fm': 257.0, 'Md': 258.0, 'No': 259.0, 
           'Lr': 262.0, 'Rf': 267.0, 'Db': 270.0, 'Sg': 271.0, 
           'Bh': 270.0, 'Hs': 277.0, 'Mt': 276.0, 'Ds': 281.0, 
           'Rg': 280.0, 'Cn': 285.0, 'Nh': 284.0, 'Fl': 289.0, 
           'Mc': 288.0, 'Lv': 293.0}
  1. A function to calculate the relative molecular mass of a chemical formula

def calculate_rmm(formula):

   # Initialize the result to zero
   result = 0
   # Initialize an empty string to store the current element symbol
   element = ""
   # Initialize an empty string to store the current number of atoms
   number = ""
   # Initialize an empty list to store the stack of parentheses
   stack = []
   # Loop through each character in the formula
   for char in formula:
       # If the character is an uppercase letter
       if char.isupper():
           # If there is a previous element symbol
           if element:
               # If there is a previous number of atoms
               if number:
                   # Convert the number to an integer and multiply it by the relative atomic mass of the element
                   value = int(number) * elements[element]
               else:
                   # Otherwise assume the number is one and multiply it by the relative atomic mass of the element
                   value = elements[element]
               # If there is a stack of parentheses 
               if stack: 
                   # Append the value to the stack 
                   stack.append(value) 
               else: 
                   # Otherwise add it to the result 
                   result += value 
               # Reset the number to an empty string 
               number = "" 
           # Set the current element symbol to the character 
           element = char 
       # If the character is a lowercase letter 
       elif char.islower(): 
           # Append it to the current element symbol 
           element += char  
       elif char.isdigit():  
           number += char  
       elif char == "(":
           if element:  
               if number:  
                   value = int(number) * elements[element]  
               else:  
                   value = elements[element]  
               if stack:  
                   stack.append(value)  
               else:  
                   result += value   
               element = ""   
               number = ""   
           stack.append(char)   
       elif char == ")":
           if element:
               if number:
                   value = int(number) * elements[element]
               else:
                   value = elements[element]
               if stack:
                   stack.append(value)
               else:
                   result += value
           element = ""
           number = ""
           # Pop the values from the stack until reaching a left parenthesis
           temp_result = 0
           while stack and stack[-1] != "(":
               temp_result += stack.pop()
           # Pop the left parenthesis from the stack
           if stack and stack[-1] == "(":
               stack.pop()
           # Check if there is a number after the right parenthesis
           i = formula.index(char) + 1
           if i < len(formula) and formula[i].isdigit():
               # Multiply the temporary result by the number and append it to the stack or add it to the result
               temp_result *= int(formula[i])
               if stack:
                   stack.append(temp_result)
               else:
                   result += temp_result
               # Skip the next character as it is already processed
               continue
           else:
               # Otherwise append the temporary result to the stack or add it to the result as it is
               if stack:
                   stack.append(temp_result)
               else:
                   result += temp_result
   # Check if there is a remaining element and number at the end of the formula and add them to the result        
   if element:  
       if number:  
           value = int(number) * elements[element]  
       else:  
           value = elements[element]  
       result += value   
   return result
  1. Ask for user input and print out the result or error message

def main():

   while True:
       try:  
           formula = input("Enter a chemical formula: ")
           rmm = calculate_rmm(formula)
           print("The relative molecular mass of {} is {:.3f}".format(formula,rmm))
       except KeyError as e:
           print("Unknown element: {}".format(e))
       except ValueError as e:
           print(e)

if __name__ == "__main__":

   main()

```