python实现智力问答测试小程序

智力问答测试功能介绍

.程序设计的思路:

程序使用了一个SQLlite试题库test2.db,其中每个智力问答由题目,4个选项和正确答案组成(question,Answer_A,Answer_B,Answer_C,Answer_D,right_Answer).在测试前,程序从试题库test2.db读取题,存储到values列表中。在测试时顺序从values列表读出题目显示在GUI界面*用户答题。

.流程图:

 python实现智力问答测试小程序

 

 

.GUI界面布局:

.题目是标签控件

.4选项是单选按钮控件

.“下一题”按钮,中有单击事件(实现:切换题目和判断对错,正确加10分,错误不加分,并判断是否做完)

.结果按钮,中单击事件-->实现得分显示,效果图如下:

 python实现智力问答测试小程序

 

 

.代码实现:

代码分4段:数据库----app应用----单击按钮事件----Gui显示布局

1.生成试题库

import sqlite3 # 导入SQLite驱动

# 连接到SQLite数据库,数据库文件是test.db

# 如果文件不存在,会自动在当前目录创建:

conn = sqlite3.connect('test2.db')

cursor = conn.cursor() # 创建一个Cursor游标:

#cursor.execute("delete from exam")

# 执行一条SQL语句,创建exam表:

cursor.execute('CREATE TABLE [exam] ([question] VARCHAR(80)  NULL,[Answer_A] VARCHAR(1)  NULL,[Answer_B] VARCHAR(1)  NULL,[Answer_C] VARCHAR(1)  NULL,[Answer_D] VARCHAR(1)  NULL,[right_Answer] VARCHAR(1)  NULL)')

# 继续执行一条SQL语句,插入一条记录:

cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('哈雷慧星的平均周期为', '54年', '56年', '73年', '83年', 'C')")

cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('夜郎自大中“夜郎”指的是现在哪个地方?', '贵州', '云南', '广西', '福建', 'A')")

cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('在中国历史上是谁发明了麻药', '孙思邈', '华佗', '张仲景', '扁鹊', 'B')")

cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('京剧中花旦是指', '年轻男子', '年轻女子', '年长男子', '年长女子', 'B')")

cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('篮球比赛每队几人?', '4', '5', '6', '7', 'B')")

cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('在天愿作比翼鸟,在地愿为连理枝。讲述的是谁的爱情故事?', '焦钟卿和刘兰芝', '梁山伯与祝英台', '崔莺莺和张生', '杨贵妃和唐明皇', 'D')")

# 通过rowcount获得插入的行数:

print(cursor.rowcount)  #1

# 关闭Cursor:

cursor.close()

# 提交事务:

conn.commit()

# 关闭Connection:

conn.close()

 

2.读取试题信息

conn = sqlite3.connect('test2.db')

cursor = conn.cursor()

# 执行查询语句:

cursor.execute('select * from exam')

# 获得查询结果集:

values = cursor.fetchall()

print(values)

 

print('记录数:',len(values))

for k in range(len(values)):

    print(k,values[k][0])

cursor.close()

conn.close()

 

3.两个单击按钮事件

import tkinter

from tkinter import *

from tkinter.messagebox import *     #messagebox是显示应用程序消息框组件

def callNext(): #下一题按钮

    global k    #k是已做的题目数      

    global score

    useranswer=r.get()

    print (r.get())                     #获取被选中单选按钮变量值

    if useranswer==values[k][5]:

        showinfo("恭喜","恭喜你对了!")     #showinfo是弹出提示

        score+=10

    else:

        showinfo("遗憾","遗憾你错了!")    

    k=k+1

    if k>=len(values):

        showinfo("提示","题目做完了")

        return

    #显示下一题

    timu["text"]=values[k][0]

    radio1["text"]=values[k][1]

    radio2["text"]=values[k][2]

    radio3["text"]=values[k][3]

    radio4["text"]=values[k][4]

    r.set('E')

    

def callResult(): #结果按钮单击事件

showinfo("你的得分",str(score))

 

4.GUI界面布局:

root=tkinter.Tk() #创建窗口对象

root.title('Python智力问答游戏')

root.geometry("500x200")

r=tkinter.StringVar() #创建StringVar对象(可变字符串对象按钮,用来获取用户的选择)

r.set('E') #设置初始值为'E',初始没选中

k=0

score=0

timu=tkinter.Label(root,text=values[k][0])     #题目标签

timu.pack()

f1 = Frame(root) #创建第1个Frame组件

f1.pack()

radio1=tkinter.Radiobutton(f1,variable=r,value='A',text=values[k][1])

radio1.pack()

radio2=tkinter.Radiobutton(f1,variable=r,value='B',text=values[k][2])

radio2.pack()

radio3=tkinter.Radiobutton(f1,variable=r,value='C',text=values[k][3])

radio3.pack()

radio4=tkinter.Radiobutton(f1,variable=r,value='D',text=values[k][4])

radio4.pack()

f2 = Frame(root) #创建第2个Frame组件

f2.pack()

Button(f2,text = '下一题',command=callNext).pack(side = LEFT)

Button(f2,text = '结  果',command=callResult).pack(side = LEFT)

root.mainloop()

 

上一篇:智能指针概念和使用


下一篇:DS 310 Midterm Exam