澄清代码及其工作方式+如何返回代码的开头?

时间:2015-04-16 01:58:57

标签: python python-2.7

刚开始学习一些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

2 个答案:

答案 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的引用(仅ab
AlphaBeta的预期输入和预期输出是什么,因为我不认为您的条件符合您的预期,例如: 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