python 通过title判断_初识Python——基于SQLite和easygui的简单的知识问答程序

写在前面:

笔者最近学习了python,了解了python的一些用法之后,写了基于SQLite数据库和easygui的知识问答的小程序。程序实现了试题的添加、作答、判断正误、分数统计等简单的业务。个人觉得,此程序逻辑比较简单,适合初学者理解,决定把源码贡献出来,供大家参考学习。

个人领悟:

笔者写的比较多的是c/c++/java等语言的代码,刚入手python,特别不适应它以缩进作为代码作用域的书写风格。不过,写多了,也就适应了。python的强大在于它在模块中封装了很多易用的内置方法,这种函数式编程对于代码实现来说比较便利,使得代码简洁易懂,比较适合初学者入门编程。但是就我个人而言,还是觉得c/c++/Java的代码更具有编程的灵魂,更有助于开发者理解编程的原理。当然了,语言只是工具,各有优劣,没必要争个高低。只要便于我们开发程序,就是最好的语言。

对于SQLite,它属于轻量级的关系数据库,一定意义上类似于文档,比较方便创建和访问数据库。easygui这个图像界面模块(总结的easygui开发文档供参考:Mr.Hachi:Python 模块EasyGui详细介绍(转载)),在我使用的过程中发现了里面还是有些bug,比如点击关闭按钮没有起到关闭程序的作用,点击取消,不能返回上一级界面。当然,它比较易用,方便开发,但是也存在不便于开发者设计界面,也就是界面过于死板,只适合一些比较常见界面的程序开发。如果有方法可以解决以上我的问题或者我的思路存在问题,欢迎留言,指正!

源码如下:

# -*- coding: utf-8 -*-
import easygui as g
import sys
# 导入SQLite驱动
import sqlite3,os
# 连接到SQLite数据库
# 数据库文件是testQueLib.db
# 如果文件不存在,那么会自动在当前目录创建一个数据库文件:
# 执行一条SQL语句,创建testQueLib表:

#第一次执行代码,需要放开此处代码,用于创建数据库
#conn = sqlite3.connect('testQueLib.db')
#cursor = conn.cursor()
#cursor.execute('create table testQueLibs(id integer PRIMARY KEY autoincrement, title varchar(100), A varchar(100), B varchar(100), C varchar(100), D varchar(100),crrectAnswer varchar(100))')
#cursor.close()
# 提交事务:
#conn.commit()
#关闭Connection:
#conn.close()
                    
msg ="欢迎使用知识问答小程序"
title = "知识问答小程序"
choices = ["答题", "进入后台"]
choice = g.buttonbox(msg, title, choices)  
qId = 1 #用于通过id查询数据
score = 0 #统计分数
option = [] #用于存放试题选项
if str(choice) == "答题":  
    while True:
        conn = sqlite3.connect('testQueLib.db')
        cursor = conn.cursor()
        cursor.execute('select * from testQueLibs where id= %d'%(qId))
        values = cursor.fetchall()
        cursor.close()
        conn.commit()
        conn.close()
        if values == []:  #数据库返回值为空列表,答题结束
            g.msgbox("恭喜你,您已经回答完题库中的所有(共%d)道题。您共答对 %d 道题!"%(qId - 1,score))
            break
        value = values[0] #values返回的是一个列表,列表里的元素是一个元组,此处获取元组数据
        for i in range(len(value)): #一共7个字段
            if i == 1:
                queTest = value[i] #获取试题
            if i > 1 and i < 6:
                option.append(value[i]) #获取选项
            if i == 6:
                answer = value[i] #获取正确答案
        choice=g.choicebox(msg=queTest,title='答题',choices=option) 
        if str(choice) == answer: #判断选择的答案是否正确
            score += 1 #回答正确加一分
            g.msgbox("Well down")
        else:
            g.msgbox("The correct Answer is '%s'"%(answer))
        qId += 1 #id加一,用于访问下一条数据
        option.clear() #每次回答完毕试题,清空选项列表
        
if str(choice) == "进入后台":
    msg ="请选择功能:"
    title = "知识问答小程序"
    ciocFun = ["添加题目"]
    choice=g.buttonbox(msg,title,ciocFun)
    if str(choice) == "添加题目":
        while True:
            msg = "欢迎使用知识问答小程序"
            title = "添加题目"
            fieldTitle = ["*试题","*A","*B","*C","*D","*正确答案"]
            fieldValues = []
            fieldValues = g.multenterbox(msg,title,fieldTitle)
            while True:
                if fieldValues == None :
                     break
                errmsg = ""
                for i in range(len(fieldTitle)):
                     option = fieldTitle[i].strip()
                     if fieldValues[i].strip() == "" and option[0] == "*":
                         errmsg += ("【%s】为必填项   " %fieldTitle[i])
                if errmsg == "":
                     break
                fieldValues = g.multenterbox(errmsg,title,fieldNames,fieldValues)
            conn = sqlite3.connect('testQueLib.db')
            cursor = conn.cursor()
            cursor.execute('insert into testQueLibs (title,A,B,C,D,crrectAnswer) values ('%s','%s', '%s','%s', '%s', '%s')'%(fieldValues[0],fieldValues[1],fieldValues[2],fieldValues[3],fieldValues[4],fieldValues[5]))
            # 通过rowcount获得插入的行数:
            if cursor.rowcount == 1:
                g.msgbox("添加试题成功!") 
            else:
                g.msgbox("添加试题失败!")
            cursor.close()
            conn.commit()
            conn.close()

程序效果图:

9875dfb191342c2b4e1a15e8237b5969.png

4413247c6e5a2099ba170801e7a0d0e3.png

0dcff95024daf4d6c3e9fda3ded70740.png

2bddb675c9c554f08144b740e875c1ad.png

248b8d2de6b26f1b34603392ceb7434b.png

7d6a34f8ebb45e9d378ce1717e94e16e.png

a1f7bfd30f764cd12c34bb6a9976730a.png

5f589ef1114b6ad119ad60afd1bff433.png

61e8c615fa0be6dc4fb19fe8ccb917fd.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值