#python
#python
Вопрос:
Я пытаюсь создать функцию с интерактивным вводом, чтобы сообщить вам, какова формула ‘SMILES’ для жирной кислоты (химического соединения), но я продолжаю получать эту ошибку:
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: локальная переменная ‘a’, на которую ссылаются перед назначением
Комментарии:
1.
a
будет неопределенным, если неif
будет выполнен ни один из блоков2. @MosesKoledoye В этом случае, почему ‘if / elif’ не выполняется, несмотря на то, что он находится под моей функцией?
3. Предположительно , это значение не равно ни Z , ни E.
Ответ №1:
If db_orientation2
не является ни "Z"
тем, ни "E"
a
другим, переменная не определена.
Вам нужно добавить else
предложение, подобное этому:
if db_orientation2 == "Z":
a = "/C=C\"
elif db_orientation2 == "E":
a = "C=C\"
else:
a = "something else"
Комментарии:
1. Привет, спасибо за предложение, это действительно сработало. Однако теперь мой вывод показывает две обратные косые черты \ в строке вместо одной
2. Прочитайте об экранировании в строках python. Или используйте необработанные строки, такие как
r'//'
Ответ №2:
if db_orientation2 =="Z":
a="/C=C\"
elif db_orientation2=="E":
a="C=C\"
elif db_orientation2=="":
a="/C=C\"
else: a=""
Кто-нибудь знает, почему обратная косая черта появляется дважды, несмотря на то, что она должна пониматься как всего одна обратная косая черта?