1. 程式人生 > >我幫王老師解決了隨機產生試卷的煩惱。

我幫王老師解決了隨機產生試卷的煩惱。

王老師是一個老師,也是我的老師。現在他想考考他的學生對於歷史常識的問題。但是他又想避免學生們相互抄襲。但是他們班有35個學生。如果手動去分配試卷將會是既枯燥,又有巨大工作量的事情。於是王老師找到我了:

提出需求:

1.建立35份不同的試卷。

2.為每份試卷建立30道多重選擇題,次序隨機

3.為每個選擇題建立一個正確的選擇題和三個錯誤的選擇題。

4.將測試試卷寫到35個檔案中。

5.將測試答案也寫到35個試卷裡面。

從以上需求,我們先羅列一下知識點,檔案的系統open() ,write(),random模組中的.shuffle()和sample()函式。shuffle()將用來打亂題目的順序。sample將用來隨機的獲取三個錯誤的答案。

第一步:當然是定好程式設計的框架基調了。

import random 

import os

capitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phenix',

            'Arkansas': 'Little Rock', 'California': 'Sacramento', 'Colorado': 'Denvir',
'Connecticut': 'Hartford', '唐朝': '長安', 'Delaware': 'Dover',
'Georgia': 'Atlanta', 'Hawaii': 'Honolulu', 'Idaho': 'Boise',
'宋朝': '東京開封', 'Kengtucky': 'Frankfort', 'Louisiana': 'Baton Rouge',
'明朝': '北京', '元朝': '大都', 'Iowa': 'Des Moines', 'Massachusetts': 'Boston',
'Michigan': 'Lansing', 'Minnesota': 'Saint Paul', 'Mississippi': 'Jackson',
'Missiouri': 'Jefferson City', 'Montana': 'Helea', 'Nebraska': 'Lincoln',
'Nevada': 'Carson City', 'New Hampshire': 'Concord', 'New Jersey': 'Trenton',
'Mexico': 'Santa Fe', 'New York': 'Albany'}#例子我隨便舉的 你們隨意

 

def domain():

  #首先我們產生的試卷檔案和答案不能隨機擺放吧 顯得太亂 那是女生寢室才該有的樣子

  path='save_folderName'

  if not os.paht.exists(path):#首先判斷路徑是否存在不存在那麼重新建立一個  然後在把工作路徑放到這個新建的路徑裡面

    os.mkdir(path)

  os.chdir(path)

  #generate 35 quiz files for everyone

  for quiznum in range(35):
    #TODO:Create the quiz and answer key files 首先建立儲存檔名啊

    #TODO:Write out the header for the quiz 把題目構建好

    #TODO:Shuffle the order of the states 打亂題目的順序

    #TODO:Loop through all 30 states,making a question for each 按照迴圈順序一份試卷出爐。

然後就到了我貼程式碼的時候了 :

#!python3
#randomQuizGenerators.py --Create quizzs with questions and answers
#in random order,along with the answer key
#31-12-2018 by kingtao
import random
import os

capitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phenix',
'Arkansas': 'Little Rock', 'California': 'Sacramento', 'Colorado': 'Denvir',
'Connecticut': 'Hartford', '唐朝': '長安', 'Delaware': 'Dover',
'Georgia': 'Atlanta', 'Hawaii': 'Honolulu', 'Idaho': 'Boise',
'宋朝': '東京開封', 'Kengtucky': 'Frankfort', 'Louisiana': 'Baton Rouge',
'明朝': '北京', '元朝': '大都', 'Iowa': 'Des Moines', 'Massachusetts': 'Boston',
'Michigan': 'Lansing', 'Minnesota': 'Saint Paul', 'Mississippi': 'Jackson',
'Missiouri': 'Jefferson City', 'Montana': 'Helea', 'Nebraska': 'Lincoln',
'Nevada': 'Carson City', 'New Hampshire': 'Concord', 'New Jersey': 'Trenton',
'Mexico': 'Santa Fe', 'New York': 'Albany'}


def domain():
#work path
path='exams'
if not os.path.exists(path):
os.mkdir(path)
os.chdir(path)
#quiz data .Keys are states and values are their capitals
for quiznum in range(35):
#create quizzs and answers
quizfile=open('quizfile_%s.txt'%(quiznum+1),'w',encoding='utf-8')
answerfile=open('answerfile_%s.txt'%(quiznum+1),'w',encoding='utf-8')

#name date period
quizfile.write('Name:\n\nDate:\n\nPeriod\n\n')
quizfile.write((' '*20)+'State Capitals Quiz(Form %s)'%(quiznum+1))
quizfile.write('\n\n')

#shuffle the order of states
states=list(capitals.keys())
print(type(states))
random.shuffle(states)
#make exercises
for num in range(30):
#create a correct answer and 3 wrong answer
correctAnswer=capitals[states[num]]
wrongAnswer=list(capitals.values())
del wrongAnswer[wrongAnswer.index(correctAnswer)]
wrongAnswer=random.sample(wrongAnswer,3)
answeroptions=wrongAnswer+[correctAnswer]#wrongAnswer.append(correctAnswer)
random.shuffle(answeroptions)

#write the questions and answers
quizfile.write('%s.What is the capital of %s?\n'%(num+1,states[num]))
for i in range(0,3,2):
for j in range(i,i+2):
quizfile.write('%4s.%s'%('ABCD'[j],answeroptions[j]))
quizfile.write('\n')
#correct answers
answerfile.write('%s.'%(num+1)+'ABCD'[answeroptions.index(correctAnswer)]+'\n')
quizfile.close()
answerfile.close()
# break






if __name__=='__main__':
domain()
這個試卷只有選擇題 如果你需要判斷題 問答題 請參考選擇題部分自己分類啊 不難吧 so easy!