import itertools #Electron input ess1 = input("Enter number of sigma s1 electrons:" ) esss1 = input("Enter number of sigma* s1 electrons:" ) esp2 = input("Enter number of sigma p2 electrons:" ) epp2 = input("Enter number of pi p2 electrons:" ) epsp2 = input("Enter number of pi* p2 electrons:" ) essp2 = input("Enter number of sigma* p2 electrons:" ) #Electron input to lists #ud fra input laves lister de forskellige orbtialer ss1 = [] sss1 = [] sp2 = [] pp2 = [] psp2 = [] ssp2 = [] if int(ess1) == 1: ss1.append('ss1a') ss1.append('ss1b') if int(esss1) == 1: sss1.append('sss1a') sss1.append('sss1b') if int(esp2) == 1: sp2.append('sp2a') sp2.append('sp2b') if int(epp2) > 0 and int(epp2) < 4: pp2.append('pp2a') pp2.append('pp2b') pp2.append('pp2c') pp2.append('pp2d') if int(epsp2) > 0 and int(epsp2) < 4: psp2.append('psp2a') psp2.append('psp2b') psp2.append('psp2c') psp2.append('psp2d') if int(essp2) == 1: ssp2.append('ssp2a') ssp2.append('ssp2b') #Electron input lists converted to list of possible combinations #Alle orbital listerne samles i en stor liste af lister, ud fra input af elektroner comblist = [] if int(ess1) == 1: comblist.append(ss1) if int(esss1) == 1: comblist.append(sss1) if int(esp2) == 1: comblist.append(sp2) if int(essp2) == 1: comblist.append(ssp2) if int(epp2) == 1: comblist.append(pp2) if int(epp2) == 2: comblist.append(pp2) comblist.append(pp2) if int(epp2) == 3: comblist.append(pp2) comblist.append(pp2) comblist.append(pp2) if int(epsp2) == 1: comblist.append(psp2) if int(epsp2) == 2: comblist.append(psp2) comblist.append(psp2) if int(epsp2) == 3: comblist.append(psp2) comblist.append(psp2) comblist.append(psp2) #Convertion of comlist to output #Listerne i den samlede liste combineres til alle de mulige kombinationer der er for elektron placeringen. results = [] cache = [] for x in itertools.product(*comblist): set_x = set(x) if set_x not in cache and len(set_x) == len(x): results.append(x) cache.append(set_x) #De nye lister med orbitalerne for kombinationerne gemmengåes, og termsymbolet bestemmmes. final = [] for i in range(len(results)): z = [] z.append(results[i]) z = list(itertools.chain(*z)) ms = 0.0 ml = 0.0 gu = 1 for j in range(len(z)): if z[j] is 'ss1a': ms = ms + 0.5 ml = ml + 0 gu = gu * 1 if z[j] is 'ss1b': ms = ms - 0.5 ml = ml + 0 gu = gu * 1 if z[j] is 'sss1a': ms = ms + 0.5 ml = ml + 0 gu = gu * -1 if z[j] is 'sss1b': ms = ms - 0.5 ml = ml + 0 gu = gu * -1 if z[j] is 'sp2a': ms = ms + 0.5 ml = ml + 0 gu = gu * 1 if z[j] is 'sp2b': ms = ms - 0.5 ml = ml + 0 gu = gu * 1 if z[j] is 'pp2a': ms = ms + 0.5 ml = ml + 1 gu = gu * -1 if z[j] is 'pp2b': ms = ms - 0.5 ml = ml + 1 gu = gu * -1 if z[j] is 'pp2c': ms = ms + 0.5 ml = ml - 1 gu = gu * -1 if z[j] is 'pp2d': ms = ms - 0.5 ml = ml - 1 gu = gu * -1 if z[j] is 'psp2a': ms = ms + 0.5 ml = ml + 1 gu = gu * 1 if z[j] is 'psp2b': ms = ms - 0.5 ml = ml + 1 gu = gu * 1 if z[j] is 'psp2c': ms = ms + 0.5 ml = ml - 1 gu = gu * 1 if z[j] is 'psp2d': ms = ms - 0.5 ml = ml - 1 gu = gu * 1 if z[j] is 'ssp2a': ms = ms + 0.5 ml = ml + 0 gu = gu * -1 if z[j] is 'ssp2b': ms = ms - 0.5 ml = ml + 0 gu = gu * -1 NF = [] if ms == 0: NF.append('1') elif ms == 0.5 or ms == -0.5: NF.append('2') elif ms == 1 or ms == -1: NF.append('3') else: NF.append('ERROR') if ml == 0: NF.append('Sigma') elif ml == 1 or ml == -1: NF.append('Pi') elif ml == 2 or ml == -2: NF.append('Delta') else: NF.append('ERROR') if gu == 1: NF.append('g') elif gu == -1: NF.append('u') else: NF.append('ERROR') final.append(NF) print(final) #Other input('Press ENTER to exit')
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question