Last active
December 17, 2015 10:09
-
-
Save battis/5593006 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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