Skip to content

Instantly share code, notes, and snippets.

@battis
Last active December 17, 2015 10:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save battis/5593006 to your computer and use it in GitHub Desktop.
Save battis/5593006 to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "AP Chem Collaboration"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": "Let's write a function to generate a dictionary of atomic weights...\n\n(Original periodic table data from [Sunjay Varma](http://www.sunjay.ca/periodic_table).)"
},
{
"cell_type": "code",
"collapsed": false,
"input": "def periodicTable():\n periodicTable = dict()\n periodicTable['H'] = 1.0079400000\n periodicTable['He'] = 4.0026020000\n periodicTable['Li'] = 6.9410000000\n periodicTable['Be'] = 9.0121820000\n periodicTable['B'] = 10.8110000000\n periodicTable['C'] = 12.0107000000\n periodicTable['N'] = 14.0067000000\n periodicTable['O'] = 15.9994000000\n periodicTable['F'] = 18.9994000000\n periodicTable['Ne'] = 20.1797000000\n periodicTable['Na'] = 22.9897692800\n periodicTable['Mg'] = 24.3050000000\n periodicTable['Al'] = 26.9815386000\n periodicTable['Si'] = 28.0855000000\n periodicTable['P'] = 30.9737620000\n periodicTable['S'] = 32.0650000000\n periodicTable['Cl'] = 35.4530000000\n periodicTable['Ar'] = 39.9480000000\n periodicTable['K'] = 39.0983000000\n periodicTable['Ca'] = 40.0780000000\n periodicTable['Sc'] = 44.9559120000\n periodicTable['Ti'] = 47.8670000000\n periodicTable['V'] = 50.9415000000\n periodicTable['Cr'] = 51.9961000000\n periodicTable['Mn'] = 54.9380450000\n periodicTable['Fe'] = 55.8450000000\n periodicTable['Co'] = 58.9331950000\n periodicTable['Ni'] = 58.6934000000\n periodicTable['Cu'] = 63.5460000000\n periodicTable['Zn'] = 65.3800000000\n periodicTable['Ga'] = 69.7230000000\n periodicTable['Ge'] = 72.6400000000\n periodicTable['As'] = 74.9216000000\n periodicTable['Se'] = 78.9600000000\n periodicTable['Br'] = 79.9040000000\n periodicTable['Kr'] = 83.7980000000\n periodicTable['Rb'] = 85.4678000000\n periodicTable['Sr'] = 87.6200000000\n periodicTable['Y'] = 88.9058500000\n periodicTable['Zr'] = 91.2240000000\n periodicTable['Nb'] = 92.9063800000\n periodicTable['Mo'] = 95.9600000000\n periodicTable['Tc'] = 98.0000000000\n periodicTable['Ru'] = 101.0700000000\n periodicTable['Rh'] = 102.9055000000\n periodicTable['Pd'] = 106.4200000000\n periodicTable['Ag'] = 107.8682000000\n periodicTable['Cd'] = 112.4110000000\n periodicTable['In'] = 114.8180000000\n periodicTable['Sn'] = 118.7100000000\n periodicTable['Sb'] = 121.7600000000\n periodicTable['Te'] = 127.6000000000\n periodicTable['I'] = 126.9044700000\n periodicTable['Xe'] = 131.2930000000\n periodicTable['Cs'] = 132.9054519000\n periodicTable['Ba'] = 137.3270000000\n periodicTable['La'] = 138.9054700000\n periodicTable['Ce'] = 140.1160000000\n periodicTable['Pr'] = 140.9076500000\n periodicTable['Nd'] = 144.2420000000\n periodicTable['Pm'] = 145.0000000000\n periodicTable['Sm'] = 150.3600000000\n periodicTable['Eu'] = 151.9640000000\n periodicTable['Gd'] = 157.2500000000\n periodicTable['Tb'] = 158.9253500000\n periodicTable['Dy'] = 162.5001000000\n periodicTable['Ho'] = 164.9303200000\n periodicTable['Er'] = 167.2590000000\n periodicTable['Tm'] = 168.9342100000\n periodicTable['Yb'] = 173.0540000000\n periodicTable['Lu'] = 174.9668000000\n periodicTable['Hf'] = 178.4900000000\n periodicTable['Ta'] = 180.9478800000\n periodicTable['W'] = 183.8400000000\n periodicTable['Re'] = 186.2070000000\n periodicTable['Os'] = 190.2300000000\n periodicTable['Ir'] = 192.2170000000\n periodicTable['Pt'] = 192.0840000000\n periodicTable['Au'] = 196.9665690000\n periodicTable['Hg'] = 200.5900000000\n periodicTable['Tl'] = 204.3833000000\n periodicTable['Pb'] = 207.2000000000\n periodicTable['Bi'] = 208.9804010000\n periodicTable['Po'] = 210.0000000000\n periodicTable['At'] = 210.0000000000\n periodicTable['Rn'] = 220.0000000000\n periodicTable['Fr'] = 223.0000000000\n periodicTable['Ra'] = 226.0000000000\n periodicTable['Ac'] = 227.0000000000\n periodicTable['Th'] = 232.0380600000\n periodicTable['Pa'] = 231.0358800000\n periodicTable['U'] = 238.0289100000\n periodicTable['Np'] = 237.0000000000\n periodicTable['Pu'] = 244.0000000000\n periodicTable['Am'] = 243.0000000000\n periodicTable['Cm'] = 247.0000000000\n periodicTable['Bk'] = 247.0000000000\n periodicTable['Cf'] = 251.0000000000\n periodicTable['Es'] = 252.0000000000\n periodicTable['Fm'] = 257.0000000000\n periodicTable['Md'] = 258.0000000000\n periodicTable['No'] = 259.0000000000\n periodicTable['Lr'] = 262.0000000000\n periodicTable['Rf'] = 261.0000000000\n periodicTable['Db'] = 262.0000000000\n periodicTable['Sg'] = 266.0000000000\n periodicTable['Bh'] = 264.0000000000\n periodicTable['Hs'] = 277.0000000000\n periodicTable['Mt'] 268.0000000000\n periodicTable['Ds'] = 271.0000000000\n periodicTable['Rg'] = 272.0000000000\n periodicTable['Uub'] = 285.0000000000\n periodicTable['Uut'] = 284.0000000000\n periodicTable['Uuq'] = 289.0000000000\n periodicTable['Uup'] = 288.0000000000\n periodicTable['Uuh'] = 292.0000000000\n periodicTable['Uuo'] = 294.0000000000\n return periodicTable\n\nd = periodicTable()",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Define our standard structure to hold the chemical equation and some functions to print it out."
},
{
"cell_type": "code",
"collapsed": false,
"input": "def printEquation(equation):\n for side in equation:\n for molecule in side:\n printOperand(molecule)\n if molecule != side[-1]:\n print(' + ', sep = '', end = '')\n if side != equation[-1]:\n print(' --> ', sep = '', end = '')\n print()\n\ndef printOperand(operand):\n if operand['coefficient'] > 1:\n print(operand['coefficient'], '(', sep = '', end = '')\n printMolecule(operand['formula'])\n if operand['coefficient'] > 1:\n print(')', sep = '', end = '')\n\ndef printMolecule(molecule):\n # FIXME why does this print in the wrong order?\n for symbol, subscript in molecule.items():\n if subscript > 1:\n print(symbol, subscript, sep = '_', end = '')\n else:\n print(symbol, sep = '', end = '')\n\npropane = dict() # of coefficient and formula\npropane['coefficient'] = 1\npropane['formula'] = dict()\npropane['formula']['C'] = 3\npropane['formula']['H'] = 8\n\noxygen = dict()\noxygen['coefficient'] = 5\noxygen['formula'] = dict()\noxygen['formula']['O'] = 2\n\nreactants = [propane, oxygen]\n\nwater = dict()\nwater['coefficient'] = 4\nwater['formula'] = dict()\nwater['formula']['H'] = 2\nwater['formula']['O'] = 1\n\ncarbondioxide = dict()\ncarbondioxide['coefficient'] = 3\ncarbondioxide['formula'] = dict()\ncarbondioxide['formula']['C'] = 1\ncarbondioxide['formula']['O'] = 2\n\nproducts = [water, carbondioxide]\n\nequation = [reactants, products]\n\nprintEquation(equation)",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": "If you want to detect upper or lower case letters (or numbers) the following functions might be helpful to you:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "myText = '3NaBrO'\nif myText[0].isdigit():\n print('a digit!')\nif not myText[1].islower():\n print('not a lower case letter!')\nif myText[3].isupper():\n print('an upper case letter!')\n \n# also worth noting that this works:\nmyText = '372H2o'\nif myText[0:3].isdigit(): # myText[0:3] is a way of saying '3 characters from myText, starting at position 0' \u2014 '372' in this case\n print('golly, it works for multi-digit strings too!')",
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": "It may be handy to have a single assignment statement that describes our sample equation in our \"standard\" format (a list of lists of dictionaries of dictionaries!)."
},
{
"cell_type": "code",
"collapsed": false,
"input": "equation = [\n [\n {'coefficient': 1,\n 'formula': {\n 'C': 3,\n 'H': 8\n }},\n {'coefficient': 1,\n 'formula': {\n 'O': 2\n }}\n ],\n [\n {'coefficient': 1,\n 'formula': {\n 'H': 2,\n 'O': 1\n }},\n {'coefficient': 1,\n 'formula': {\n 'C': 1,\n 'O': 2\n }}\n ]\n]",
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment