gpt4 book ai didi

python - 试图制作程序来格式化化学方程式

转载 作者:行者123 更新时间:2023-12-04 07:45:25 25 4
gpt4 key购买 nike

给定类似 Na(Cl2)3Al(AlCl2)4 的输入我正在尝试制作一个没有任何库的程序来执行此操作,而我制作的代码不起作用,我无法弄清楚原因。
有人可以告诉我我哪里出错了(或帮我解决)?示例输入的输出应类似于 NaCl6AlAl4Cl8其中括号也被删除。提前感谢您的帮助。


def format(equation):
equation_list = list(equation)
formated = ''


for i in range(len(equation_list)):
if equation_list[i] == '(':
opening = i
if equation_list[i] == ')':
closing = i


for i in range(opening+1,closing):
if equation_list[i].isdigit():
equation_list[i] = str(int(equation_list[i])*mult)

if equation_list[i].upper():
if equation_list[i+1].isupper():
equation_list[i+1] = str(mult)
elif equation_list[i+1].isdigit():
equation_list[i+1] = str(int(equation_list[i+1])*mult)
else:
if equation_list[i+2].isupper():
equation_list[i+2] = str(mult)
elif equation_list[i+2].isdigit():
equation_list[i+2] = str(int(equation_list[i+2])*mult)
else:
if equation[i+3].isdigit():
equation_list[i+3] = str(int(equation_list[i+3])*mult)
else:
equation[i+3] = str(mult)



for i in equation_list:
formated+=i


return formated
print(format('Na(Cl2)3Al(AlCl2)4'))

最佳答案

pointed duplicate没有投票回答,我想根据正则表达式提出一个。我很确定它不匹配所有情况,但至少你的

import re

EQ_PATTERN = re.compile(r"([A-Z][a-z]+\d*|\((?:[A-Z][a-z]+\d*)+\)\d*)")
BLOCK_PATTERN = re.compile(r"\(((?:[A-Z][a-z]+\d*)+)\)(\d*)")
ELEMENT_PATTERN = re.compile(r"([A-Z][a-z]+)(\d*)")

def format_element(element: str, amount: str, factor: int):
return f"{element}{int(amount or '1') * factor}"

def format_block(block: str):
if '(' not in block:
return block
inside, factor = BLOCK_PATTERN.findall(block)[0]
return "".join(format_element(element, amount, int(factor))
for element, amount in ELEMENT_PATTERN.findall(inside))

def format_equation(eq: str):
return "".join(map(format_block, EQ_PATTERN.findall(eq)))
通过一些测试
for eq in ('(Al3Cl2Ag6Au)4', 'Na(Cl2)3Al(AlCl2)4', 'Na2(Cl2)3Al(Al3Cl2)4'):
print(f"{eq:20s} ==> {format_equation(eq)}")

(Al3Cl2Ag6Au)4 ==> Al12Cl8Ag24Au4
Na(Cl2)3Al(AlCl2)4 ==> NaCl6AlAl4Cl8
Na2(Cl2)3Al(Al3Cl2)4 ==> Na2Cl6AlAl12Cl8

关于python - 试图制作程序来格式化化学方程式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67220920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com