2016年9月18日

段考題目進moodle的方法

最近想要把我們科裡歷次的段考試題都匯入moodle裡,反正就是讓學生們當考古題練習練習,不然這些七年級新生對國中考試都陌生得很。

作法是這樣的(最近發現作什麼東西,一定要寫起來,不然好容易忘記)

把doc、odt這些題目檔的文字複製出來以後,先把每題開頭的題號刪掉(用regex  ^\d{1,2}.\s)
(A)(B)(C)(D)用取代的方式換成tab,再把這些貼到google試算表,格式如下:
第一欄是學年度、第二欄是答案、第三欄是有沒有圖片(有的話就是1,沒有就是0),有圖片的之後進moodle要再補,第四欄以後就是題幹和四個選項



整理好之後,再把題目用csv檔格式儲存

接著就是用python把csv檔變成能匯入moodle的gift格式,使用的程式是python 2.x版本的

# -*- coding: utf8 -*-
#year columns[0]
#answer columns[1]
#picture columns[2]
#stem columns[3]
#A columns[4]
#B columns[5]
#C columns[6]
#D columns[7]
#using python 2.x

crs = open("combineTest", "r")
for columns in ( raw.strip().split() for raw in crs ):
print
    #印出單選題題庫分類

if columns[2]=="0":
print "$CATEGORY: "+"生物/段考/A1/"+columns[0]
if columns[2]=="1":
print "$CATEGORY: "+"生物/段考/A1/"+columns[0]+"/圖"
    #列印試題名稱
print
print "::"+columns[3]+"/"+columns[4]+"/"+columns[5]+"/"+columns[6]+"/"+columns[7]+"::"
    #印出題幹
print columns[3]+"{"
if columns[1]=="A":
print "="+columns[4]
else:
print "~"+columns[4]

if columns[1]=="B":
print "="+columns[5]
else:
print "~"+columns[5]

if columns[1]=="C":
print "="+columns[6]
else:
print "~"+columns[6]

if columns[1]=="D":
print "="+columns[7]
else:
print "~"+columns[7]
print "}"
         


===2018.5.22更新
最近改用python3,所以修改程式如下

import csv
with open('bigtest.csv') as f:
    rows = csv.reader(f)
    for row in rows:
     
        #印出單選題題庫分類
        if row[2]=="0":
            print("$CATEGORY: "+"生物/段考/A1/"+row[0])
        if row[2]=="1":
            print("$CATEGORY: "+"生物/段考/A1/"+row[0]+"/圖")
    #列印試題名稱
        print()
        print( "::"+row[3]+"/"+row[4]+"/"+row[5]+"/"+row[6]+"/"+row[7]+"::")
    #印出題幹
        print( row[3]+"{")
     
        if row[1]=="A":
            print( "="+row[4])
        else:
            print( "~"+row[4])

        if row[1]=="B":
            print( "="+row[5])
        else:
            print( "~"+row[5])


        if row[1]=="C":
            print( "="+row[6])
        else:
            print( "~"+row[6])

        if row[1]=="D":
            print( "="+row[7])
        else:
            print( "~"+row[7])
     
        print( "}")
        print()