如何在python中创建一个包含多个主题的简单测验?

时间:2014-11-07 01:45:36

标签: python

我是python的新手并且不太了解但是我认为我可以很好地进行测验并希望它们有点复杂。

如何使程序首先让用户选择测试类型。 (即动物或首都城市),然后给予用户的问题将是关于该主题。我应该为每个主题创建一个包含问题集的函数吗?然后当用户输入他们想要的主题时,代码应该类似于:(大致)

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

这是正确的方法还是有另一种更有效的方法呢?

2 个答案:

答案 0 :(得分:3)

我实现了一个完整的True和False测验示例,每个主题都有多个问题,加上输入和结果汇总的验证,我希望这可以是一个很好的例子

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])))

输出类似于:

/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}

答案 1 :(得分:1)

这应该让你走在正确的轨道上,但是根据你的代码示例判断,阅读Python文档和/或阅读一些教程材料@ {{3} }

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