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.