加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 10:43:04 所属栏目:Python 来源:网络整理
导读:智力问答测试功能介绍 . 程序设计的思路: 程序使用了一个SQLlite 试题库 test2.db ,其中每个智力问答由题目, 4 个选项和正确答案组成 (question,Answer_A,Answer_B,Answer_C,Answer_D,right_Answer). 在测试前,程序从试题库 test2.db 读取题,存储到 val

智力问答测试功能介绍

.程序设计的思路:

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

.流程图:

?

?

?

.GUI界面布局:

.题目是标签控件

.4选项是单选按钮控件

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

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

?

?

?

.代码实现:

代码分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,right_Answer) values (‘哈雷慧星的平均周期为‘,‘54‘,‘56‘,‘73‘,‘83‘,‘C‘)")

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

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

cursor.execute("insert into exam (question,right_Answer) values (‘京剧中花旦是指‘,‘年轻男子‘,‘年轻女子‘,‘年长男子‘,‘年长女子‘,right_Answer) values (‘篮球比赛每队几人?‘,‘4‘,‘5‘,‘6‘,‘7‘,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) #创建第1Frame组件

f1.pack()

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

radio1.pack()

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

radio2.pack()

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

radio3.pack()

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

radio4.pack()

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

f2.pack()

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

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

root.mainloop()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读