Python

TypeError: 'list' object is not callable

# -*- coding: utf-8 -*-
"""
Created on Fri Aug 11 12:11:06 2017

@author: User
"""
import datetime
import random
from questions import Add, Multiply


class Quiz:
    questions = []
    answers = []
    correct = []

    def __init__(self):
        question_types = (Add, Multiply)
        #generate 10 random questions
        for _ in range(5):
            num1 = random.randint(1,50)
            num2 = random.randint(1,50)
            question = random.choice(question_types)(num1,num2)
            #add this questions to self.questions
            self.questions.append(question)


    def take_quiz(self):
        #log the start time
        self.start_time = datetime.datetime.now()
        #ask all the questions
        for question in self.questions:
            self.answers.append(self.ask(question))
        else:
            self.end_time = datetime.datetime.now()
        #log if they got the questions right
        #log the end time 
        #show the summary
        return self.summary()

    def ask(self, question):
        correct = 0
        question_start = datetime.datetime.now()
        #log the start time
        answer = input(question.text + " = ")
        #capture the answer
        #check the answer
        if answer == str(question.answer):
            correct +=1 
        #log the end time
        question_end = datetime.datetime.now()
        #if the answer's right, send back True
        #otherwise False
        #send back the elapsed time too
        return correct, question_end - question_start

    def total_correct(self):
        #return total number of correct answers
        total = 0
        for answer in self.answers:
            if answer[0]:
                total+=1
        return total

    def summary(self):
        #print how many you got right and the total# of questions. 5/10
        print("You've got {} from {} right".format(self.correct(), len(self.questions)))
        #print the total time for quiz: 30 seconds!
        print ("It took you {} seconds total".format(self.end_time - self.start_time).seconds)

Quiz().take_quiz()
#print (smth.questions[0].text)
#print (smth.ques tions[0].answer)
Chris Freeman
Chris Freeman
Treehouse Moderator 58,893 Points

Can provide complete details on the error message. It usually include the line number where the error occurred. Thanks!

After 5 tries, i've an error TypeError: 'list' object is not callable. Please see below:

47 * 2 = 94

22 + 13 = 33

44 * 21 = 4

16 * 11 = 4

43 + 10 = 4
Traceback (most recent call last):

  File "<ipython-input-1-e0dc703efda7>", line 71, in <module>
    Quiz().take_quiz()

  File "<ipython-input-1-e0dc703efda7>", line 38, in take_quiz
    return self.summary()

  File "<ipython-input-1-e0dc703efda7>", line 66, in summary
    print("You've got {} from {} right".format(self.correct(), len(self.questions)))

TypeError: 'list' object is not callable

1 Answer

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 58,893 Points

Remove the parens after self.correct. It is a list and with parens, the code is trying to call the list as a function. But as the error says 'list' object is not callable.

print("You've got {} from {} right".format(self.correct, len(self.questions)))