python:以不同的顺序比较字符串

时间:2015-03-09 14:24:33

标签: python string sympy

我正在使用python 3进行基于差异化和集成的课程作业的数学测验。我发现很难检查用户输入的答案是否正确。 我目前正在使用以下代码。但是,如果用户键入答案但按不同顺序键入,则将其视为不正确。例如,如果答案是x ^ 5 + 6但是我键入6 + x ^ 5,尽管两个答案都是正确的,但它将被视为不正确。如何在将答案保持在字符串状态的同时克服这个问题?

if self.Answer.text() == FDiffAnswer[1]:
    self.score = self.score + 1
else:
    self.score = self.score + 0

2 个答案:

答案 0 :(得分:2)

使用sympy可以按照以下方式完成......

x = symbols('x')
// user_input and original_eq are strings
expr1 = sympify(user_input) // user input
expr2 = sympify(original_eq) // Answer
print expr1==expr2
  

双等号(==)用于测试相等性。但是,这个   完全测试表达式,而不是符号

http://docs.sympy.org/dev/gotchas.html#double-equals-signs

但是对于以下所有情况,这都会返回True:

x**6 + 1 == x**(6) +  1
x**6 + 1 == 1 + x**6
x**3 + 1 == x*x*x +  1 

PS:Sympy(和Python)使用符号^进行XOR操作。因此,如果您希望将其用作电源操作,则需要在调用sympify

之前将其替换为**

答案 1 :(得分:1)

您可以使用几个不同的变量eval()输入字符串并检查输出是否正确:

user_str = 'x**5 + 6'

x = 4

print('Good Job') if eval(user_str) == 1030 else 'Wrong Answer'

然后您可以更改x几次的值并继续检查预期输出以验证用户的答案是否正确评估。

否则,您可以使用split()并检查输出列表中的正确组件:

user_str = 'x^5+6'

l = user_str.split('+')

if 'x^5' in l and '6' in l and len(l) == 2:
    print('Good Job')
else:
    print('Wrong Answer')

当然使用第二种方法,您需要修改split()参数和if()语句的验证,但您应该能够达到所需的检查。您可能还需要检查输出列表的len()以验证答案中没有其他组件。