Periodic Table

Interactive Periodic Table Lookup Tool in Python

Guide to Building a Periodic Table Lookup Tool in Python

Hey there, Python beginners! Want to create a cool program that lets you look up details about chemical elements, like Hydrogen or Gold, just by typing their name, symbol, or atomic number? In this post, we’ll walk through a simple Python script that does exactly that. It’s like having your own digital periodic table! We’ll break it down step by step in a way that’s easy to understand, even if you’re new to coding. Let’s dive in!

What Does This Program Do?

This Python program lets you:

  • Enter an element’s name (e.g., “Hydrogen”), symbol (e.g., “H”), or atomic number (e.g., “1”).

  • Get back the element’s full name, symbol, atomic number, and atomic mass.

  • Keep looking up elements until you type “exit” to quit.

It’s interactive, beginner-friendly, and a great way to learn about dictionaries, loops, and error handling in Python. Here’s how it works!

Code

# Full periodic table data
elements_data = {
    1: ("H", "Hydrogen", 1.008), 2: ("He", "Helium", 4.0026), 3: ("Li", "Lithium", 6.94),
    4: ("Be", "Beryllium", 9.0122), 5: ("B", "Boron", 10.81), 6: ("C", "Carbon", 12.011),
    7: ("N", "Nitrogen", 14.007), 8: ("O", "Oxygen", 15.999), 9: ("F", "Fluorine", 18.998),
    10: ("Ne", "Neon", 20.180), 11: ("Na", "Sodium", 22.990), 12: ("Mg", "Magnesium", 24.305),
    13: ("Al", "Aluminium", 26.982), 14: ("Si", "Silicon", 28.085), 15: ("P", "Phosphorus", 30.974),
    16: ("S", "Sulfur", 32.06), 17: ("Cl", "Chlorine", 35.45), 18: ("Ar", "Argon", 39.948),
    19: ("K", "Potassium", 39.098), 20: ("Ca", "Calcium", 40.078), 21: ("Sc", "Scandium", 44.956),
    22: ("Ti", "Titanium", 47.867), 23: ("V", "Vanadium", 50.942), 24: ("Cr", "Chromium", 51.996),
    25: ("Mn", "Manganese", 54.938), 26: ("Fe", "Iron", 55.845), 27: ("Co", "Cobalt", 58.933),
    28: ("Ni", "Nickel", 58.693), 29: ("Cu", "Copper", 63.546), 30: ("Zn", "Zinc", 65.38),
    31: ("Ga", "Gallium", 69.723), 32: ("Ge", "Germanium", 72.63), 33: ("As", "Arsenic", 74.922),
    34: ("Se", "Selenium", 78.971), 35: ("Br", "Bromine", 79.904), 36: ("Kr", "Krypton", 83.798),
    37: ("Rb", "Rubidium", 85.468), 38: ("Sr", "Strontium", 87.62), 39: ("Y", "Yttrium", 88.906),
    40: ("Zr", "Zirconium", 91.224), 41: ("Nb", "Niobium", 92.906), 42: ("Mo", "Molybdenum", 95.95),
    43: ("Tc", "Technetium", 98), 44: ("Ru", "Ruthenium", 101.07), 45: ("Rh", "Rhodium", 102.91),
    46: ("Pd", "Palladium", 106.42), 47: ("Ag", "Silver", 107.87), 48: ("Cd", "Cadmium", 112.41),
    49: ("In", "Indium", 114.82), 50: ("Sn", "Tin", 118.71), 51: ("Sb", "Antimony", 121.76),
    52: ("Te", "Tellurium", 127.60), 53: ("I", "Iodine", 126.90), 54: ("Xe", "Xenon", 131.29),
    55: ("Cs", "Cesium", 132.91), 56: ("Ba", "Barium", 137.33), 57: ("La", "Lanthanum", 138.91),
    58: ("Ce", "Cerium", 140.12), 59: ("Pr", "Praseodymium", 140.91), 60: ("Nd", "Neodymium", 144.24),
    61: ("Pm", "Promethium", 145), 62: ("Sm", "Samarium", 150.36), 63: ("Eu", "Europium", 151.96),
    64: ("Gd", "Gadolinium", 157.25), 65: ("Tb", "Terbium", 158.93), 66: ("Dy", "Dysprosium", 162.50),
    67: ("Ho", "Holmium", 164.93), 68: ("Er", "Erbium", 167.26), 69: ("Tm", "Thulium", 168.93),
    70: ("Yb", "Ytterbium", 173.05), 71: ("Lu", "Lutetium", 174.97), 72: ("Hf", "Hafnium", 178.49),
    73: ("Ta", "Tantalum", 180.95), 74: ("W", "Tungsten", 183.84), 75: ("Re", "Rhenium", 186.21),
    76: ("Os", "Osmium", 190.23), 77: ("Ir", "Iridium", 192.22), 78: ("Pt", "Platinum", 195.08),
    79: ("Au", "Gold", 196.97), 80: ("Hg", "Mercury", 200.59), 81: ("Tl", "Thallium", 204.38),
    82: ("Pb", "Lead", 207.2), 83: ("Bi", "Bismuth", 208.98), 84: ("Po", "Polonium", 209),
    85: ("At", "Astatine", 210), 86: ("Rn", "Radon", 222), 87: ("Fr", "Francium", 223),
    88: ("Ra", "Radium", 226), 89: ("Ac", "Actinium", 227), 90: ("Th", "Thorium", 232.04),
    91: ("Pa", "Protactinium", 231.04), 92: ("U", "Uranium", 238.03), 93: ("Np", "Neptunium", 237),
    94: ("Pu", "Plutonium", 244), 95: ("Am", "Americium", 243), 96: ("Cm", "Curium", 247),
    97: ("Bk", "Berkelium", 247), 98: ("Cf", "Californium", 251), 99: ("Es", "Einsteinium", 252),
    100: ("Fm", "Fermium", 257), 101: ("Md", "Mendelevium", 258), 102: ("No", "Nobelium", 259),
    103: ("Lr", "Lawrencium", 266), 104: ("Rf", "Rutherfordium", 267), 105: ("Db", "Dubnium", 268),
    106: ("Sg", "Seaborgium", 269), 107: ("Bh", "Bohrium", 270), 108: ("Hs", "Hassium", 277),
    109: ("Mt", "Meitnerium", 278), 110: ("Ds", "Darmstadtium", 281), 111: ("Rg", "Roentgenium", 282),
    112: ("Cn", "Copernicium", 285), 113: ("Nh", "Nihonium", 286), 114: ("Fl", "Flerovium", 289),
    115: ("Mc", "Moscovium", 290), 116: ("Lv", "Livermorium", 293), 117: ("Ts", "Tennessine", 294),
    118: ("Og", "Oganesson", 294),
}

# Create lookup dictionaries
symbol_lookup = {v[0].lower(): k for k, v in elements_data.items()}
name_lookup = {v[1].lower(): k for k, v in elements_data.items()}

# Main interactive loop
print("PERIODIC TABLE ATOMIC MASS LOOKUP")
print("You can enter the element's name, symbol, or atomic number.\n")

while True:
    user_input = input("Enter element name/symbol/atomic number (or 'exit' to quit): ").strip().lower()
    
    if user_input == 'exit':
        break

    try:
        if user_input.isdigit():
            atomic_number = int(user_input)
        elif user_input in name_lookup:
            atomic_number = name_lookup[user_input]
        elif user_input in symbol_lookup:
            atomic_number = symbol_lookup[user_input]
        else:
            print("Invalid input. Please try again.\n")
            continue

        symbol, name, mass = elements_data[atomic_number]
        print(f"Element: {name} ({symbol})\nAtomic Number: {atomic_number}\nAtomic Mass: {mass}\n")

    except KeyError:
        print("Element not found in periodic table. Try again.\n")

 

 

How It Works: Step-by-Step Breakdown

Let’s go through the code like we’re building it from scratch. Each step is like a building block, and we’ll explain it in a way that’s super clear for beginners.

Step 1: Storing the Periodic Table

The program starts with a dictionary called elements_data. A dictionary in Python is like a phonebook: it pairs a key (like a person’s name) with a value (their phone number). Here:

  • The keys are atomic numbers (1, 2, 3, …, up to 118).

  • The values are tuples (like small, unchangeable lists) with three pieces of info:

    • The element’s symbol (e.g., “H” for Hydrogen).

    • The element’s name (e.g., “Hydrogen”).

    • The element’s atomic mass (e.g., 1.008 for Hydrogen).

Example:

elements_data = {
    1: ("H", "Hydrogen", 1.008),
    2: ("He", "Helium", 4.0026),
    # ... and so on
}

 

If we ask for elements_data[1], we get (“H”, “Hydrogen”, 1.008).

Think of it like: A big filing cabinet where each drawer (the atomic number) holds a card with the symbol, name, and mass of an element.


Step 2: Making Search Easier with Lookup Dictionaries

To make searching faster, the program creates two more dictionaries:

  • symbol_lookup: Maps element symbols (like “h” or “au”) to their atomic numbers.

  • name_lookup: Maps element names (like “hydrogen” or “gold”) to their atomic numbers.

Code:

symbol_lookup = {v[0].lower(): k for k, v in elements_data.items()}
name_lookup = {v[1].lower(): k for k, v in elements_data.items()}

 

  • v[0] grabs the symbol from the tuple (e.g., “H” from (“H”, “Hydrogen”, 1.008)).

  • v[1] grabs the name (e.g., “Hydrogen”).

  • .lower() makes everything lowercase, so “H” becomes “h” and “Hydrogen” becomes “hydrogen”. This means users can type “H” or “h” and it still works.

  • k is the atomic number (the key from elements_data).

Example:

  • symbol_lookup[“h”] gives 1 (Hydrogen’s atomic number).

  • name_lookup[“hydrogen”] also gives 1.

Think of it like: Creating quick-reference index cards so you can find an element’s atomic number by its symbol or name without flipping through the whole filing cabinet.


Step 3: Welcoming the User

The program prints a friendly message to tell users what they can do:

print("PERIODIC TABLE ATOMIC MASS LOOKUP")
print("You can enter the element's name, symbol, or atomic number.\n")

 

This is like a sign saying, “Hey, type an element’s name, symbol, or number, and I’ll tell you about it!”


Step 4: The Main Loop

The program uses a while True loop to keep asking for input until the user wants to stop:

while True:
    user_input = input("Enter element name/symbol/atomic number (or 'exit' to quit): ").strip().lower()

 

  • input(…) asks the user to type something and stores it in user_input.

  • .strip() removes extra spaces (e.g., ” H ” becomes “H”).

  • .lower() makes the input lowercase (e.g., “HYDROGEN” becomes “hydrogen”).

Think of it like: A helpful assistant who keeps asking, “What element do you want to know about?” until you’re done.


Step 5: Checking for Exit

The program checks if the user wants to quit:

if user_input == 'exit':
    break

 

  • If the user types “exit”, the break command stops the loop, and the program ends.

  • Think of it like: Telling the assistant, “I’m done,” and they close the book.


Step 6: Figuring Out What the User Typed

Now the program checks what the user entered (a number, name, or symbol):

try:
    if user_input.isdigit():
        atomic_number = int(user_input)
    elif user_input in name_lookup:
        atomic_number = name_lookup[user_input]
    elif user_input in symbol_lookup:
        atomic_number = symbol_lookup[user_input]
    else:
        print("Invalid input. Please try again.\n")
        continue

 

  • Is it a number? user_input.isdigit() checks if the input is all numbers (like “1” or “79”). If so, it converts it to an integer with int(user_input) to use as the atomic number.

  • Is it a name? If it’s not a number, it checks if the input is in name_lookup (e.g., “hydrogen”). If it is, it gets the atomic number.

  • Is it a symbol? If it’s not a name, it checks symbol_lookup (e.g., “au”). If it matches, it gets the atomic number.

  • Is it invalid? If none of these work (e.g., “xyz”), it prints “Invalid input” and uses continue to go back and ask again.

Think of it like: The assistant checking if you gave a page number, a book title, or an author’s name. If you say “pizza,” they say, “Nope, try again!”


Step 7: Showing the Element’s Info

Once the program has the atomic number, it grabs and displays the element’s details:

symbol, name, mass = elements_data[atomic_number]
print(f"Element: {name} ({symbol})\nAtomic Number: {atomic_number}\nAtomic Mass: {mass}\n")

 

  • elements_data[atomic_number] gets the tuple (e.g., (“H”, “Hydrogen”, 1.008) for atomic number 1).

  • symbol, name, mass = … splits the tuple into three variables.

  • The print statement shows the info in a neat format, like:

 

Output:

Element: Hydrogen (H)
Atomic Number: 1
Atomic Mass: 1.008

 

Step 8: Handling Mistakes

The try-except block catches errors if the atomic number doesn’t exist:

except KeyError:
    print("Element not found in periodic table. Try again.\n")

 

  • If the user enters a number like 119 (which isn’t in the dictionary), Python raises a KeyError. The except block catches this and says, “Element not found.”

Think of it like: The assistant saying, “Sorry, that’s not in our records,” if you ask for something that doesn’t exist.

What Happens When You Run It?

Here’s an example of using the program:

PERIODIC TABLE ATOMIC MASS LOOKUP
You can enter the element’s name, symbol, or atomic number.

Enter element name/symbol/atomic number (or ‘exit’ to quit): Hydrogen
Element: Hydrogen (H)
Atomic Number: 1
Atomic Mass: 1.008

Enter element name/symbol/atomic number (or ‘exit’ to quit): Au
Element: Gold (Au)
Atomic Number: 79
Atomic Mass: 196.97

Enter element name/symbol/atomic number (or ‘exit’ to quit): 8
Element: Oxygen (O)
Atomic Number: 8
Atomic Mass: 15.999

Enter element name/symbol/atomic number (or ‘exit’ to quit): xyz
Invalid input. Please try again.

Enter element name/symbol/atomic number (or ‘exit’ to quit): exit

 

How It All Comes Together

The program:

  1. Stores all element data in a dictionary.
  2. Creates quick lookup tables for symbols and names.
  3. Keeps asking the user for input.
  4. Checks if the input is a number, symbol, or name.
  5. Finds the matching element and shows its details.
  6. Handles errors if the input is wrong.
  7. Stops when the user types “exit”.

Why This Code Is Great for Beginners

  • Simple Logic: It uses basic Python concepts like dictionaries, loops, and conditionals.
  • Real-World Use: It’s a practical tool for looking up real scientific data.
  • Error Handling: It shows how to handle mistakes without crashing.
  • Interactive: It’s fun to use because it responds to user input.

 

By Jitendra Singh

A complete solution for the students of class 9 to 12 having subject Information Technology (402), Computer Science (083). Explore our website for all the useful content as Topic wise notes, Solved QNA, MCQs, Projects and Quiz related to the latest syllabus.

Copywrite © 2020-2025, CBSE Python,
All Rights Reserved
error: Content is protected !!