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:
- Stores all element data in a dictionary.
- Creates quick lookup tables for symbols and names.
- Keeps asking the user for input.
- Checks if the input is a number, symbol, or name.
- Finds the matching element and shows its details.
- Handles errors if the input is wrong.
- 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.