Python實踐練習:生成隨機的測驗試卷文件


題目

假如你是一位地理老師,班上有 35 名學生,你希望進行美國各州首府的一個小測驗。不妙的是,班里有幾個壞蛋,你無法確信學生不會作弊。你希望隨機調整問題的次序,這樣每份試卷都是獨一無二的,這讓任何人都不能從其他人那里抄襲答案。當然,手工完成這件事又費時又無聊。好在,你懂一些 Python。
下面是程序所做的事:
• 創建 35 份不同的測驗試卷。
• 為每份試卷創建 50 個多重選擇題,次序隨機。
• 為每個問題提供一個正確答案和 3 個隨機的錯誤答案,次序隨機。
• 將測驗試卷寫到 35 個文本文件中。
• 將答案寫到 35 個文本文件中。
這意味着代碼需要做下面的事:
• 將州和它們的首府保存在一個字典中。
• 針對測驗文本文件和答案文本文件,調用 open()、write()和 close()。
• 利用 random.shuffle()隨機調整問題和多重選項的次序。

美國各州首府數據在一個字典中

# The quiz data. Keys are states and values are their capitals.
capitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phoenix',
'Arkansas': 'Little Rock', 'California': 'Sacramento', 'Colorado': 'Denver',
'Connecticut': 'Hartford', 'Delaware': 'Dover', 'Florida': 'Tallahassee',
'Georgia': 'Atlanta', 'Hawaii': 'Honolulu', 'Idaho': 'Boise', 'Illinois':
'Springfield', 'Indiana': 'Indianapolis', 'Iowa': 'Des Moines', 'Kansas':
'Topeka', 'Kentucky': 'Frankfort', 'Louisiana': 'Baton Rouge', 'Maine':
'Augusta', 'Maryland': 'Annapolis', 'Massachusetts': 'Boston', 'Michigan':
'Lansing', 'Minnesota': 'Saint Paul', 'Mississippi': 'Jackson', 'Missouri':
'Jefferson City', 'Montana': 'Helena', 'Nebraska': 'Lincoln', 'Nevada':
'Carson City', 'New Hampshire': 'Concord', 'New Jersey': 'Trenton', 'New 
Mexico': 'Santa Fe', 'New York': 'Albany', 'North Carolina': 'Raleigh',
'North Dakota': 'Bismarck', 'Ohio': 'Columbus', 'Oklahoma': 'Oklahoma City',
'Oregon': 'Salem', 'Pennsylvania': 'Harrisburg', 'Rhode Island': 'Providence',
'South Carolina': 'Columbia', 'South Dakota': 'Pierre', 'Tennessee':
'Nashville', 'Texas': 'Austin', 'Utah': 'Salt Lake City', 'Vermont':
'Montpelier', 'Virginia': 'Richmond', 'Washington': 'Olympia', 'West
Virginia': 'Charleston', 'Wisconsin': 'Madison', 'Wyoming': 'Cheyenne'}

測驗試卷文件,它需要有唯一的文件名,並且有某種標准的標題部分,留出位置,讓學生填寫姓名、日期和班級。
測驗試卷的文件名將是capitalsquiz .txt
capitalsquiz .txt 的答案將保存在一個文本文件中,名為 capitalsquiz_answers .txt

代碼

#! python3
# randomQuizGenerator.py - Creates quizzes with questions and answers in
# random order, along with the answer key.

# The quiz data. Keys are states and values are their capitals.
import random

capitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phoenix',
            'Arkansas': 'Little Rock', 'California': 'Sacramento', 'Colorado':
            'Denver','Connecticut': 'Hartford', 'Delaware': 'Dover', 'Florida':
            'Tallahassee','Georgia': 'Atlanta', 'Hawaii': 'Honolulu', 'Idaho':
            'Boise', 'Illinois': 'Springfield', 'Indiana': 'Indianapolis', 'Iowa':
            'Des Moines', 'Kansas': 'Topeka', 'Kentucky': 'Frankfort', 'Louisiana':
            'Baton Rouge', 'Maine': 'Augusta', 'Maryland': 'Annapolis', 'Massachusetts':
            'Boston', 'Michigan': 'Lansing', 'Minnesota': 'Saint Paul', 'Mississippi':
            'Jackson', 'Missouri': 'Jefferson City', 'Montana': 'Helena', 'Nebraska':
            'Lincoln', 'Nevada': 'Carson City', 'New Hampshire': 'Concord',
            'New Jersey': 'Trenton', 'New Mexico':'Santa Fe', 'New York': 'Albany', 'North Carolina': 'Raleigh',
            'North Dakota': 'Bismarck', 'Ohio': 'Columbus', 'Oklahoma': 'Oklahoma City',
            'Oregon': 'Salem', 'Pennsylvania': 'Harrisburg', 'Rhode Island': 'Providence',
            'South Carolina': 'Columbia', 'South Dakota': 'Pierre', 'Tennessee':
            'Nashville', 'Texas': 'Austin', 'Utah': 'Salt Lake City', 'Vermont':
            'Montpelier', 'Virginia': 'Richmond', 'Washington': 'Olympia', 'West Virginia':
            'Charleston', 'Wisconsin': 'Madison', 'Wyoming': 'Cheyenne'}


for quizNum in range(35):
    # 創建試卷和答案文件
    quizFile = open('capticalsquiz%s.txt' % (quizNum + 1), 'w')
    answerKeyFile = open('capticalsquiz_answers%s.txt' % (quizNum + 1), 'w')

    # 寫標題和開頭
    quizFile.write('Name:\n\nDate:\n\nClass:\n\n')
    quizFile.write(' ' * 20 + 'State Capticals Quiz (From %s)' % (quizNum + 1))
    quizFile.write('\n\n')

    # 打亂capital字典
    states = list(capitals.keys())
    random.shuffle(states)  # 打亂states的順序

    # 循環states,制造50個問題
    for questionNum in range(50):
        correctAnswer = capitals[states[questionNum]]
        wrongAnswers = list(capitals.values())
        del wrongAnswers[wrongAnswers.index(correctAnswer)]  # 刪除列表中的正確答案
        # random.sample()函數使得這種選擇很容易,它的第一個參數是你希望選擇的列表,第二個參數是你希望選擇的值的個數。
        wrongAnswers = random.sample(wrongAnswers, 3)
        answerOption = wrongAnswers + [correctAnswer]
        random.shuffle(answerOption)
        # 在文件中寫入問題
        quizFile.write('%s. What is the capital of %s?\n' % (questionNum + 1,
                        states[questionNum]))
        for i in range(4):
            quizFile.write(' %s. %s\n' % ('ABCD'[i], answerOption[i]))
        quizFile.write('\n')

        # 在答案卷中寫入答案
        answerKeyFile.write('%s. %s\n' % (questionNum + 1, 'ABCD'[
            answerOption.index(correctAnswer)]))

    quizFile.close()
    answerKeyFile.close()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM