python: 以不同的顺序比较字符串
python: comparing strings in a different order
我正在使用 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
您可以 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()
以验证答案没有其他组件。
使用 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
Double equals signs (==) are used to test equality. However, this
tests expressions exactly, not symbolically
http://docs.sympy.org/dev/gotchas.html#double-equals-signs
但是这 returns 对于以下所有情况都是正确的:
x**6 + 1 == x**(6) + 1
x**6 + 1 == 1 + x**6
x**3 + 1 == x*x*x + 1
PS:Sympy(和Python)使用符号^
进行异或运算。所以如果你想让它被用作电源操作你需要在调用之前用**替换它 sympify
我正在使用 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
您可以 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()
以验证答案没有其他组件。
使用 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
Double equals signs (==) are used to test equality. However, this tests expressions exactly, not symbolically
http://docs.sympy.org/dev/gotchas.html#double-equals-signs
但是这 returns 对于以下所有情况都是正确的:
x**6 + 1 == x**(6) + 1
x**6 + 1 == 1 + x**6
x**3 + 1 == x*x*x + 1
PS:Sympy(和Python)使用符号^
进行异或运算。所以如果你想让它被用作电源操作你需要在调用之前用**替换它 sympify