python答题系统的代码,python基于题库答题器

这篇文章主要介绍了python答题系统的代码,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。

智力问答测试功能介绍

.程序设计的思路:

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

.流程图:

5abb33edd437664ac42706bba87386a9.png

.GUI界面布局:

.题目是标签控件

.4选项是单选按钮控件

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

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

f65aed9d3629ea668dceafc0d030bb70.png

.代码实现:

代码分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()

标签:tkinter,exam,python,text,cursor,values,智力,Answer,问答

来源: https://www.cnblogs.com/dbslinux/p/11523741.html

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值