2015-10-20 34 views
1

我正在編寫一個程序來計算給定分子的質量。我已經將每個元素定義爲一個整數。我需要能夠輸入像NaCl這樣的化學公式,並打印出Na和Cl原子質量的總和。到目前爲止,我已經設置了一些東西,以便我可以鍵入一個化學公式,並將其轉化爲元素列表,所以如果我鍵入NaCl,它會給我['Na','Cl']。下面是代碼:有用戶輸入變量用於後面的公式

import re 
Na = 22.99 
Cl = 35.45 
input = raw_input() 
inputList = (re.findall('[A-Z][^A-Z]*', input)) 

首先,我需要知道如何告訴我輸入我以前定義的變量,而不是字符串的計算機。然後我想讓它將列表中的每個項目分配給它自己的變量。像

e1 = Na 
e2 = Cl 

我的主要問題是什麼,在那一刻我的輸入作爲字符串處理。

+1

看看Python的[辭典](https://docs.python.org/2/tutorial/datastructures.html#dictionaries) – JGreenwell

+0

字典是絕對是你想在這裏使用的。 –

+2

這些是浮動:) – EL3PHANTEN

回答

2

我相信你想要的是一本字典,像這樣:

atomic_wt = {'Na':22.99, 'Cl':35.45} 

以後,當你有你的輸入,你可以在一個循環中訪問它們:

for element in inputList: 
    elem_wt = atomic_wt[element] 
+0

好吧,我喜歡這個,但它返回兩個單獨的數字。我如何獲得它來添加這些數字? – wes1099

+0

在循環之前創建一個變量。然後在循環 - >變量+ = atomic_wt [元素] – EL3PHANTEN

+0

@ EL3PHANTEN我不太清楚你的意思。 – wes1099

1

使用字典,你可以很容易地採取字符串輸入和處理它:

elements = { 'Na': 22.99, 
      'Cl': 35.45 
      } # You can extend this dictionary to include more elements 

print elements.get(raw_input('Enter an element symbol: ', 'invalid')) 
""" 
use the .get method to return a placeholder value, 
representing that the *input* value doesn't exist in the dictionar 
""" 
2

使用sum()map()個函數來從字典加起來適當的值:

>>> elements = {'Na':22.99, 'Cl':35.45} 
>>> result = ['Na', 'Cl'] 
>>> answer = sum(map(elements.get, result)) 
>>> answer 
58.44