2016-10-15 13 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:db_orientation2はありませんどちらも"Z""E"a変数が定義されていない場合はローカル変数 '' が割り当て

+1

'if'ブロック以外のブロックが実行された場合、' a'は未定義となります –

+0

@MosesKoledoyeこの場合、私の機能にもかかわらず 'if/elif'が実行されないのはなぜですか? – vluos

+1

おそらく値はZでもEでもありません。 –

答えて

1

前に参照しました。

あなたはこのよう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="" 

誰もがバックスラッシュを二回登場している理由を知っている、それだけで1つのバックスラッシュとして理解されることになったにもかかわらず?

関連する問題