2016-10-15 72 views
-1

我試圖用交互輸入來創建一個函數來告訴你什麼'SMILES'公式是脂肪酸(化合物),但我一直得到這個錯誤:python錯誤:在賦值之前引用的局部變量'a'

def fatty_gen(chain_length, db_position, db_orientation): 
    "Returns the SMILES code of the fatty acid, given its chain length, db position, db orientation" 
    chain_length=input("What is the chain length/number of C?") 
    chain_length2=int(chain_length) 
    db_position = input("On which carbon does the double bond first appear") 
    db_position2=int(db_position) 
    db_orientation= input("What is the orientation of the double bond") 
    db_orientation2=str(db_orientation) 

    if db_orientation2 =="Z": 
     a="/C=C\\" 
    elif db_orientation2=="E": 
     a="\C=C\\" 
    else: a ="" 

    return "C"*((db_position2)-1) + a + "C"*(chain_length2-db_position2-1) 


<ipython-input-2-20b88ae22368> in fatty_gen(chain_length, db_position, db_orientation) 
    13   a="\C=C\\" 
    14 
---> 15  return "C"*((db_position2)-1) + a + "C"*(chain_length2-db_position2-1) 
    16 fatty_gen(1,1,1) 

UnboundLocalError: local variable 'a' referenced before assignment 

UnboundLocalError:本地變量賦值

+1

如果未執行'if'塊,則'a'將會被定義爲 –

+0

@MosesKoledoye在這種情況下,爲什麼'if/elif'不被執行,儘管它在我的函數下? – vluos

+1

大概價值既不是Z也不是E. –

回答

1

如果db_orientation2既不"Z"也不"E"a變量沒有定義之前 'A' 中引用。

您需要添加else條款是這樣的:

if db_orientation2 == "Z": 
    a = "/C=C\\" 
elif db_orientation2 == "E": 
    a = "\C=C\\" 
else: 
    a = "something else" 
+0

嗨,感謝您的建議,確實有效。但是,現在,我的輸出在字符串中顯示了兩個反斜槓\\而不是一個 – vluos

+0

閱讀有關在python字符串中進行轉義的信息。或者使用像'r'\/\/\''這樣的原始字符串 –

0
if db_orientation2 =="Z": 
    a="/C=C\\" 
elif db_orientation2=="E": 
    a="\C=C\\" 
elif db_orientation2=="": 
    a="/C=C\\" 
else: a="" 

任何人都知道爲什麼反斜槓出現兩次,儘管它應該被理解爲只是一個反斜槓?

相關問題