我的问题是在Python中附加一个列表。我正在用Python和kivy制作一个程序,给学生一个数学测试。学生被问到一系列随机数学问题,然后我的目标是在完成50个数学问题后给他们一个最终成绩。但是,我无法将答案添加到正确答案列表和错误答案中。他们可能会得到一个例如" 2 + 2"的问题。他们的回答可能是4,我想将字符串4添加到名为self.correct_answers的空列表中。如果他们的答案是5,我想将其添加到名为self.incorrect_answers的列表中。我使用append方法将答案添加到列表中,但是当问到下一个问题时,它会删除我之前的列表。因此,如果我问他们一系列问题,列表将只包含最新答案。它不会包含前9个答案。
以下是我的一段代码:
def __init__(self, **kwargs):
super(Easy_Level_Addition, self).__init__(**kwargs)
def rand_numbers(self, min_num=0, max_num=10):
"""Generate a minimum/maximum number threshold for the 'easy' level.
These numbers will fall between 0 and 10.
"""
self.max_num = max_num
self.min_num = min_num
self.operation = None
self.num_1 = None
self.num_2 = None
self.QUESTION = "{} {} {}"#This is how the question will be formatted
def get_random_question(self):#Number 1 and 2 will be a random integer between 1 and 10
self.rand_numbers()
self.num_1 = random.randint(self.min_num, self.max_num)
self.num_2 = random.randint(self.min_num, self.max_num)
self.operation = "+"
self.q_s = self.QUESTION.format(self.num_1, self.operation, self.num_2)
self.answer = str(self.num_1 + self.num_2)
self.ids.questions_easy.text = str(self.q_s)
#self.ids.answers.text = str(self.answer)
self.ids.answers.text = ""
self.ids.result_easy.text = ""
def user_answers(self):
#Pass the prior function
def __init__(self, **kwargs):
super(self.answer, self).__init__(**kwargs)
self.correct_answers = []
self.incorrect_answers = []
self.questions_count = []
score = 0
if str(self.ids.answers.text) == str(self.answer):
self.correct_answers.append(str(self.answer))
self.questions_count.append(str(self.answer))
self.ids.result_easy.text = "Correct!"
elif str(self.ids.answers.text) != str(self.answer):
self.incorrect_answers.append(str(self.answer))
score -= int(1)
self.ids.result_easy.text = "Wrong!"
self.questions_count.append(str(self.answer))
正如您所看到的,当我提示用户回答时,我想根据答案是否正确将答案存储在其中一个列表中。出于某种原因,只有最近的答案显示在列表中,并且append方法不会在列表中存储一系列答案。
我在添加总分时遇到了问题。正如你在上面的代码中看到的那样,我设置得分= 0,然后在用户输入正确答案时尝试添加+1,然后在用户输入错误答案时尝试-1。然而,在kivy中,得分并没有增加到跑步总数。例如,如果我得到10个正确的答案,则分数将仅显示1.它不会显示10.由于某种原因,我的程序仅响应列表和总分的最新问题。这是"遗忘"所有其他数据。
答案 0 :(得分:2)
每次拨打df2_to_merge = df2[[col for col in df2.columns if col not in df1.columns]]
时,您都会为每种答案类型重新创建新列表。尝试从user_answers()
:
user_answers
并将它们放入self.correct_answers = []
self.incorrect_answers = []
self.questions_count = []
:
__init__
答案 1 :(得分:1)
范围!信息不存储在函数中。您可以将其转换为类(以及您的函数到该类的方法中),以便在类仍然存活时保持数据存活。
class MathTest:
def __init__(self, **kwargs):
# init any variables you need to store here
# then use the methods to get or change them.
def rand_numbers(self, min_num=0, max_num=10):
# rand_numbers code
def get_random_question(self):
# get_random_questions code
def user_answers(self):
# user_answers code
然后在课堂上进行测试。
test = MathTest()
test.rand_numbers()