python做一个考试系统_Python在线考试系统防作弊功能的思路和实现
我自己用Python開發了一套教學管理軟件,具有在線點名、提問、答疑、交作業、自測、在線考試、數據導入導出與匯總、Word試卷生成等多個功能,其中在線考試系統具有防作弊的功能,不少人覺得很神奇,其實思路和代碼都很簡單。主要的原理是關閉文本編輯器并定時清空系統剪切板,不允許復制題目和其他任何內容,也不允許搜索網頁,只能一個題一個題地做,并且每個人都是隨機抽題,題庫里有700多道題,所以相鄰的兩個人同一時間抽到同一題的概率非常小,有效防止了作弊。因為完整的系統代碼比較多,我寫了個Demo,模擬了系統中采用的防作弊功能。下面的代碼運行后,單擊“開始考試”按鈕啟用考試模式的防作弊功能,單擊“結束考試”則禁用防作弊功能。
import os
import time
import tkinter
import threading
import ctypes
import psutil
root = tkinter.Tk()
root.title('防作弊演示--by董付國')
#窗口初始大小和位置
root.geometry('250x80+300+100')
#不允許改變窗口大小
root.resizable(False, False)
jinyong = tkinter.IntVar(root, 0)
def funcJinyong():
while jinyong.get()==1:
#強行關閉主流文本編輯器和網頁瀏覽器
for pid in psutil.pids():
try:
p = psutil.Process(pid)
exeName = os.path.basename(p.exe()).lower()
if exeName in ('notepad.exe', 'winword.exe',
'wps.exe', 'wordpad.exe', 'iexplore.exe',
'chrome.exe', 'qqbrowser.exe',
'360chrome.exe', '360se.exe',
'sogouexplorer.exe', 'firefox.exe',
'opera.exe', 'maxthon.exe',
'netscape.exe', 'baidubrowser.exe',
'2345Explorer.exe'):
p.kill()
except:
pass
#清空系統剪切板
ctypes.windll.user32.OpenClipboard(None)
ctypes.windll.user32.EmptyClipboard()
ctypes.windll.user32.CloseClipboard()
time.sleep(1)
def start():
jinyong.set(1)
t = threading.Thread(target=funcJinyong)
t.start()
buttonStart = tkinter.Button(root, text='開始考試', command=start)
buttonStart.place(x=20, y=10, width=100, height=20)
def stop():
jinyong.set(0)
buttonStop = tkinter.Button(root, text='結束考試', command=stop)
buttonStop.place(x=130, y=10, width=100, height=20)
#模擬用,開啟考試模式以后,所有內容都不再允許復制
entryMessage = tkinter.Entry(root)
entryMessage.place(x=10, y=40, width=230, height=20)
root.mainloop()
因為有的代碼比較長,為了防止用手機查看時排版錯亂,附上代碼截圖。
總結
以上是生活随笔為你收集整理的python做一个考试系统_Python在线考试系统防作弊功能的思路和实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中final关键字、权限修饰符、
- 下一篇: 八邻域轮廓跟踪算法_结合mRMR选择和I