我正在使用 python 3 为我的类(class)作业做一个基于微分和集成的数学测验。我发现很难检查用户输入的答案是否正确。我目前正在使用下面的代码。但是,如果用户键入答案但顺序不同,则将其视为不正确。例如,如果答案是 (2,4) 但我输入的是 (4/2,4),尽管两个答案都是正确的,但它会被视为不正确。我试过使用 sympify 但它不起作用。我将如何克服这个问题?
def Question4(self):
QID = 109
conn = mysql.connector.connect(user="root", password = "", host = "")
mycursor = conn.cursor()
#mysql query
query = """
SELECT
QText, QAnswer, Marks
FROM
QuestionInfo.Question
WHERE
QID = %s
"""
mycursor.execute(query, (QID, ))
Question4, Answer4, Mark4 = mycursor.fetchone()
self.Answer4 = str(Answer4)
self.Mark4 = Mark4
self.next_question.clicked.connect(self.HandleQuestion4)
def HandleQuestion4(self):
#for validation
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure this is your final answer?", QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No, QtGui.QMessageBox.Yes)
#get users answer in a sympy state
self.UAnswer4 = self.Answer.text().replace("^", "**")
if reply == QtGui.QMessageBox.Yes:
if sympify(self.UAnswer4) == sympify(self.Answer4):
self.score = self.score + self.Mark4
else:
self.score = self.score + 0
self.Question5()
最佳答案
如果您只需要数字,那么您可以在字符串上使用 S(sympify 的缩写)。否则,您可能需要 parse_expr 和/或其他字符串处理来处理其他语法,例如隐式乘法和求幂的“^”(请参阅 sympy.parsing.sympy_parser):
>>> S('4/2,2')
(2, 2)
关于python:比较等效坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28973373/