Post Reply 
Electron Configuration Program?
11-15-2021, 12:36 AM
Post: #1
Electron Configuration Program?
Hello,

I am currently in IB Chemistry learning about electron configurations. Is there a program that returns the electron configuration for an element? For example, if you type in something like "H" it would output 1s1. Any feedback would be appreciated. Thanks!
Find all posts by this user
Quote this message in a reply
11-15-2021, 05:49 AM
Post: #2
RE: Electron Configuration Program?
(11-15-2021 12:36 AM)radcouture004 Wrote:  Hello,

I am currently in IB Chemistry learning about electron configurations. Is there a program that returns the electron configuration for an element? For example, if you type in something like "H" it would output 1s1. Any feedback would be appreciated. Thanks!

There is a python implementation here:
https://github.com/jcard313/Electron-Configuration

It should be possible to get that working on the prime.
Find all posts by this user
Quote this message in a reply
11-15-2021, 08:06 AM (This post was last modified: 11-15-2021 08:48 AM by toml_12953.)
Post: #3
RE: Electron Configuration Program?
(11-15-2021 05:49 AM)Stevetuc Wrote:  
(11-15-2021 12:36 AM)radcouture004 Wrote:  Hello,

I am currently in IB Chemistry learning about electron configurations. Is there a program that returns the electron configuration for an element? For example, if you type in something like "H" it would output 1s1. Any feedback would be appreciated. Thanks!

There is a python implementation here:
https://github.com/jcard313/Electron-Configuration

It should be possible to get that working on the prime.

It's quite possible. MicroPython (Prime's version) doesn't have the capitalize() or isnumeric() attributes but these are easily worked around. Here's my attempt:
Code:
#PYTHON name
# this function ensures the user can input  "atomic number" or "element name" with capital and lower case letters, and
# as many spaces as they wish
def formatInput(textline):
    textline = textline.lower().strip()
    wordlist = textline.split()
    textline = " ".join(wordlist)
    return textline


# this function is for determining the noble gas given the atomic number for use in the condensed electron configuration
def nobleGases(valenceE):
    if valenceE >= 118: return "[Og]"
    if valenceE >= 86: return "[Rn]"
    if valenceE >= 54: return "[Xe]"
    if valenceE >= 36: return "[Kr]"
    if valenceE >= 18: return "[Ar]"
    if valenceE >= 10: return "[Ne]"
    if valenceE >= 2: return "[He]"
    return ""


# this function is for rounding the input down to the lowest noble gas for use in the condensed electron configuration
def atomicRounder(valenceE):
    if valenceE >= 118: return 118
    if valenceE >= 86: return 86
    if valenceE >= 54: return 54
    if valenceE >= 36: return 36
    if valenceE >= 18: return 18
    if valenceE >= 10: return 10
    if valenceE >= 2: return 2


# so that charge is defined later on
global charge
# a lot of long lists with each individual electron, element symbol, and name. There should be a way to condense and
# these lists
electronList = ["1s^1", "1s^2", "2s^1", "2s^2", "2p^1", "2p^2", "2p^3", "2p^4", "2p^5", "2p^6", "3s^1", "3s^2",
                "3p^1", "3p^2", "3p^3", "3p^4", "3p^5", "3p^6", "4s^1", "4s^2", "3d^1", "3d^2", "3d^3", "3d^4",
                "3d^5", "3d^6", "3d^7", "3d^8", "3d^9", "3d^10", "4p^1", "4p^2", "4p^3", "4p^4", "4p^5", "4p^6",
                "5s^1", "5s^2", "4d^1", "4d^2", "4d^3", "4d^4", "4d^5", "4d^6", "4d^7", "4d^8", "4d^9", "4d^10",
                "5p^1", "5p^2", "5p^3", "5p^4", "5p^5", "5p^6", "6s^1", "6s^2", "4f^1", "4f^2", "4f^3", "4f^4",
                "4f^5", "4f^6", "4f^7", "4f^8", "4f^9", "4f^10", "4f^11", "4f^12", "4f^13", "4f^14", "5d^1", "5d^2",
                "5d^3", "5d^4", "5d^5", "5d^6","5d^7", "5d^8", "5d^9", "5d^10", "6p^1", "6p^2", "6p^3", "6p^4", "6p^5",
                "6p^6", "7s^1", "7s^2","5f^1", "5f^2", "5f^3", "5f^4", "5f^5", "5f^6", "5f^7", "5f^8", "5f^9", "5f^10",
                "5f^11", "5f^12", "5f^13", "5f^14", "6d^1", "6d^2", "6d^3", "6d^4", "6d^5", "6d^6", "6d^7", "6d^8",
                "6d^9", "6d^10", "7p^1", "7p^2", "7p^3", "7p^4", "7p^5","7p^6"]
elementsAb = ["H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K",
              "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb",
              "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs",
              "Ba", "La", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf",
              "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg", "Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th",
              "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm", "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", "Hs",
              "Mt", "Ds", "Rg", "Cn", "Nh", "Fl", "Mc", "Lv", "Ts", "Og"]
elementsFull = ["Hydrogen", "Helium", "Lithium", "Beryllium", "Boron", "Carbon", "Nitrogen", "Oxygen", "Fluorine", "Neon",
                "Sodium", "Magnesium", "Aluminium", "Silicon", "Phosphorous", "Sulfur", "Chloride", "Argon", "Potassium",
                "Calcium", "Scandium", "Titanium", "Vanadium", "Chromium", "Manganese", "Iron", "Cobalt", "Nickle",
                "Copper", "Zinc", "Gallium", "Germanium", "Arsenic", "Selenium", "Bromine", "Krypton", "Rubidium", "Strontium",
                "Yttrium", "Zirconium", "Niobium", "Molybdenum", "Technetium", "Ruthenium", "Rhodium", "Palladium", "Silver",
                "Cadmium", "Indium", "Tin", "Antimony", "Tellurium", "Iodine", "Xenon", "Cesium", "Barium", "Lanthanum",
                "Cerium", "Praseodymium", "Neodymium", "Promethium", "Samarium", "Europium", "Gadolinium", "Terbium",
                "Dysprosium", "Holmium", "Erbium", "Thulium", "Ytterbium", "Lutetium", "Hafnium", "Tantalum", "Tungsten",
                "Rhenium", "Osmium", "Iridium", "Platinum", "Gold", "Mercury", "Thallium", "Lead", "Bismuth", "Polonium",
                "Astatine", "Radon", "Francium", "Radium", "Actinium", "Thorium", "Protactinium", "Uranium", "Neptunium",
                "Plutonium", "Americium", "Curium", "Berkelium", "Californium", "Einsteinium", "Fermium", "Mendelevium",
                "Nobelium", "Lawrencium", "Rutherfordium", "Dubnium", "Seaborgium", "Bohrium", "Hassium", "Meitnerium"]
# defines the atomic number before starting the main function. looping boolean to ensure that while loops loop
atomicNumber = 0
looping = True

# commented out attempts at a dictionary
# elementsDict = [("H", "Hydrogen"),("He", "Helium"), ("Li","Lithium"), ("Be", "Beryllium"), ("B", "Boron"), ("C", "Carbon"),
#                ("N", "Nitrogen"), ("O", "Oxygen"), ("F", "Fluorine"), ("Ne", "Neon"), ("Na", "Sodium"), ("Mg", "Magnesium"),
#                ("Al", "Aluminium"), ("Si", "Silicon"), ("P", "Phosphorous"), ("S", "Sulfur"), ("Cl", "Chloride"), ("Ar", "Argon")]

# actual main body of the code computes the atomic number given the atomic number or element name. this atomic number is
# then used to index the electronList, and the list is printed from 0 to the calculated atomic number. This in short provides
# the electron configuration
while looping:
    choice = formatInput(input("Welcome to the Electron Configuration Calculator!\nAre you entering the atomic number or element name?: "))
    print(choice)
    if choice == "atomic number":
        atomicNumber = int(input("Please input the atomic number of your element: "))
        print(atomicNumber)
# validates that the input is a positive integer value
        while not atomicNumber > 0:
            atomicNumber = int(input("Invalid input. Please enter a positive integer value: "))
            print(atomicNumber)
        break
    elif choice == "element name":
        elementName = input("Please input the name of your element (abbreviated or full): ")
        elementName = elementName[0].upper() + elementName[1:]
        print(elementName)
# validates the input is a valid element name
        while elementName not in elementsAb and elementName not in elementsFull:
            elementName = input("Element name not recognized. Please try again.")
            elementName = elementName[0].upper() + elementName[1:]
            print(elementName)
# checks that elementName is in the lists of elementsAb or elementsFull. If it is, then the index of the element in that list
# is used as the atomicNumber
        try:
            atomicNumber = elementsAb.index(elementName)
        except ValueError:
            atomicNumber = elementsFull.index(elementName)
# you must add 1 to the atomic number as the index starts at 0, but the atomic number starts at 1
        atomicNumber = atomicNumber + 1
        break
    else:
        input("Invalid input. Please type ""atomic number"" or ""element name"". Press any button to continue")

# asks for the charge. currently only works for p and s block elements.
while looping:
    charge = input("Now that you have entered your element, please enter its change. (use + or -, or enter 0 if it has no charge): ")
    print(charge)
    if not charge.lstrip("+-"):
        charge = input("You have entered an invalid charge. Please input a valid charge: ")
        print(charge)
    charge = int(charge)     
    #if not 20 < atomicNumber <= 30 or 38 < atomicNumber < 48 or 88 < atomicNumber < 98:
    #if charge > 0:
    #    if 20 < atomicNumber <= 30:
    #        for i in range(2):
    #            n = 20
    #            electronList.pop(n)
    #            n -= 1
    #            if n == 18: break
    atomicNumber = atomicNumber - charge
    break

# prints the name of the element you have calculated, its electron configuration, and the condensed electron configuration
print("The name of your element is:", elementsFull[atomicNumber + charge - 1])
print("Your full electron configuration is: \n" + ' '.join(map(str, electronList[0:atomicNumber])))
print(("Your condensed electron configuration is: \n" + nobleGases(len(electronList[0:atomicNumber])) + " " +
      ' '.join(map(str, electronList[atomicRounder(atomicNumber):atomicNumber]))).strip())
#end
EXPORT ElectronConf()
BEGIN
  PYTHON(name);
END;

Tom L
Cui bono?
Find all posts by this user
Quote this message in a reply
11-15-2021, 08:44 AM
Post: #4
RE: Electron Configuration Program?
Alternatively, I'm, not sure if that info is available in any of these Periodic Table programs
https://www.hpmuseum.org/forum/search.ph...order=desc
(I know my own version doesn't).

Stephen Lewkowicz (G1CMZ)
https://my.numworks.com/python/steveg1cmz
Visit this user's website Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: