简体   繁体   中英

How to create a simple quiz in python with multiple topics?

I'm new to python and don't know much but think I could make quizzes pretty well and want them to be a little complicated.

How do I make it so that the program will first have the user choose the type of test. (ie. animals or capital cities) and then the questions given to the user will be about that topic. Should I create a function with the set of question for each topic? Then when the user inputs the topic they want, the code should look something like: (roughly)

print("Do you want to answer questions on animals or capital cities or math?"
      " Type animal, city or math")
topic = input()
if topic == 'animal':
    def AnimalQuestions(): #this will be written before this code

Is this the correct approach or is there another, more efficient way to do it?

I implemented a full example of True and False quiz with multiple questions in each topic, plus validation of the input and aggregation of results, I hope this can be a good example

animals_questions = 'Animals Questions'
capitals_questions = 'Capitals Questions'
math_questions = 'Math Questions'

questions = [animals_questions, capitals_questions, math_questions]

quiz = {animals_questions: [("All lionesses in a pride", True),
                        ("Another animals question", False),
                        ("Last animals question", False)],

        capitals_questions: [("Cairo is the capital city of Egypt", True),
                         ("Another capitals question", True),
                         ("Last capitals question", False)],

        math_questions: [("20 is log 100 for base 1o", False),
                     ("Another math question", True),
                     ("Last math question", False)]
}

result = {"Correct": 0, "Incorrect": 0}

def get_quiz_choice():
    while True:
        try:
            quiz_number = int(raw_input(
                'Choose the quiz you like\n1 for {}\n2 for {}\n3 for {}\nYour choice:'.format(animals_questions,
                                                                                          capitals_questions,
                                                                                          math_questions)))
        except ValueError:
            print "Not a number, please try again\n"
        else:
            if 0 >= quiz_number or quiz_number > len(quiz):
                print "Invalid value, please try again\n"
            else:
                return quiz_number


def get_answer(question, correct_answer):
    while True:
        try:
            print "Q: {}".format(question)
            answer = int(raw_input("1 for True\n0 for False\nYour answer: "))
        except ValueError:
            print "Not a number, please try again\n"
        else:
            if answer is not 0 and answer is not 1:
                print "Invalid value, please try again\n"
            elif bool(answer) is correct_answer:
                result["Correct"] += 1
                return True
            else:
                result["Incorrect"] += 1
                return False


choice = get_quiz_choice()
quiz_name = questions[choice - 1]
print "\nYou chose the {}\n".format(quiz_name)
quiz_questions = quiz[quiz_name]
for q in (quiz_questions):
    print "Your answer is: {}\n".format(str(get_answer(q[0], q[1])))

The output is something like:

/usr/bin/python /Users/arefaey/workspace/playground/python/Quiz/quiz.py

Choose the quiz you like
1 for Animals Questions
2 for Capitals Questions
3 for Math Questions
Your choice: 2

You chose the Capitals Questions

Q: Cairo is the capital city of Egypt
1 for True
0 for False
Your answer: 1
Your answer is: True

Q: Another capitals question
1 for True
0 for False
Your answer: 1
Your answer is: True

Q: Last capitals question
1 for True
0 for False
Your answer: 1
Your answer is: False

You have finished the quiz with score: {'Incorrect': 1, 'Correct': 2}

This should get you on the right track, however judging by your code example it may pay to have a read through the Python documentation and/or have a go at some of the tutorial material @ http://www.learnpython.org/

def animal_quiz():
    # do something

def city_quiz():
    # do something

def math_quiz():
    # do something

topic = raw_input('Do you want to answer questions on animals or capital cities or math? Type animal, city or math')
if topic == 'animal':
    animal_quiz()
elif topic == 'city':
    city_quiz()
elif topic == 'math':
    math_quiz()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM