Python附加到列表问题

时间:2018-01-04 21:22:42

标签: python list kivy

我的问题是在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.由于某种原因,我的程序仅响应列表和总分的最新问题。这是"遗忘"所有其他数据。

2 个答案:

答案 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()