Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:以不同的顺序比较字符串_Python_String_Sympy - Fatal编程技术网

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

python:以不同的顺序比较字符串,python,string,sympy,Python,String,Sympy,我正在用python 3为我的课程作业做一个数学测验,内容围绕微分和积分。我发现很难检查用户输入的答案是否正确。 我目前正在使用下面的代码。但是,如果用户键入的答案顺序不同,则会被视为不正确。例如,如果答案是x^5+6,但我输入了6+x^5,则尽管两个答案都正确,但仍将被视为不正确。如何在保持答案处于字符串状态的同时克服此问题 if self.Answer.text() == FDiffAnswer[1]: self.score = self.score + 1 else: se

我正在用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()
,以验证答案中没有其他组件。

使用Symphy,可以按如下方式完成此操作

x = symbols('x')
// user_input and original_eq are strings
expr1 = sympify(user_input) // user input
expr2 = sympify(original_eq) // Answer
print expr1==expr2
双等号(=)用于测试相等性。但是, 准确地测试表达式,而不是象征性地测试表达式

但是,对于以下所有情况,该结果都为真:

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

PS:Symphy(和Python)使用符号
^
进行异或操作。因此,如果您想将其用作电源操作,您需要在调用sympify之前将其替换为**

那么x^(5)+6.呢?那么
x*x*x*x+6
,或者
1*x^5+6
,等等呢?也许有一种更简单的方法,但如果我是你,我会倾向于用值替换变量,并将答案的值与正确的值进行比较。在数学中,你能写出正确答案的各种方法的数量令人难以置信,但是只有一个正确的值。它们都会被视为不正确。这项工作是方程有一个系数,但不会乘以未知值。例如,5x**5+1=1+5*x**5@mcsethantwi不。。。这就是sympy的问题所在。。。你需要让sympy理解你的表达方式。。。但是仍然有一个调整,首先解析字符串,如果我们发现像5x这样的东西,用5*x替换它,然后调用sympify函数