刚开始学习一些Python。我正在尝试构建一个简单的算法来进行化学离子重组反应,即:即KBr + NaCl - > KCl + NaBr。
基本上,我要求用户输入两种反应物,如KBr和NaCl,我希望python重新排列这两种,其中第一种反应物的第一部分与第二种反应物的第二部分匹配,如KCl和NaBr。我遇到的一个问题是处理像Potassium或Iodide这样的单字母输入,我不确定如果它是KBr或KI,我将如何分割字符串。我已经尝试在下面的代码中执行此操作,但我得到了奇怪的结果,如KIBr和Mg。
最后,我想知道如何将用户返回到最后一行之后的代码开头?这意味着,当程序输出数据时,如何让它返回循环并再次询问用户?
参考'C'=阳离子,'N'=阴离子。
# Asks user for reactants input.
Alpha = raw_input("Alpha reactant = ")
Beta = raw_input("Beta reactant = ")
# Searches for one-letter elements to prevent mixed output.
if str(['K','H']) in a:
Alpha_C = a[0]
else:
Alpha_C = a[:2]
if str(['F','I']) in a:
Alpha_N = a[-1]
else:
Alpha_N = a[2:]
if str(['K','H']) in b:
Beta_C = b[0]
else:
Beta_C = b[:2]
if str(['F','I']) in b:
Beta_N = b[-1]
else:
Beta_N = b[2:]
# Recombines the reacted ions.
Re_Alpha = Alpha_C + Beta_N
Re_Beta = Alpha_N + Beta_C
# Final statement additions, product response, and return to start.
z = "Your products are the following: "; Q = " , "
print z + Re_Alpha + Q + Re_Beta
答案 0 :(得分:0)
您需要将所有内容放入某种形式的循环中,例如:
while True:
Alpha = raw_input("Alpha reactant = ")
Beta = raw_input("Beta reactant = ")
...
然后你需要突破循环,例如
if Alpha == 'q' or Beta == 'q':
break
这将保持循环(while True
),直到用户为任一输入输入q
。
您发布的参考代码是否正确,因为我看不到任何对Alpha或Beta的引用(仅a
和b
)
Alpha
和Beta
的预期输入和预期输出是什么,因为我不认为您的条件符合您的预期,例如: str(['K', 'H'])
等于"['K', 'H']"
,我怀疑这是用户输入的in
。
答案 1 :(得分:0)
关于第一个问题:考虑使用正则表达式来解析反应物。
import re
regex = re.compile('([A-Z][a-z]?)([A-Z][a-z]?)')
alpha_parts = re.match(regex, Alpha)
beta_parts = re.match(regex, Beta)
if alpha_parts and beta_parts:
Alpha_C, Alpha_N = alpha_parts.groups()[0], alpha_parts.groups()[1]
Beta_C, Beta_N = beta_parts.groups()[0], beta_parts.groups()[1]
else:
# handle invalid input