(原题)来占个坑 说一下写了python的感受
待填最近好忙,各种考试,各种实训,想总结一下写了 python 的感受,无奈没有那个空闲,只能往下复习,等到放年假了,正好写完最后的 python 项目,再整体总结一下。 置顶一下,要不,放假又忘记了/
楔子:
虽然还没放假,不过也该写一写了,毕竟作业已经上交了,而且很长时间了……
最后的结课作业专题选了一个本来自己以为能搞好的,现实是搞得一般般的东西(这是我对自己的能力的认识,不包括强大的队友),课题是 Python 语言题库管理与评测。听起来是不是名字很高大上,其实重在评测,自己以为能搞出来个 OJ 系统,结果最后成了半 OJ 半数据库QAQ。
不过结果还是可以的,毕竟熬个几天做出来,真的是累啊,虽然也提不上累,就是每天的加班很闹心,让自己的身体状态一直不好,听说熬夜在一定程度上是拖延症的表现,因为白天没有提高效率,只能晚上加班,于是就变成了这样子了,晚上加班,白天没精神,恶性循环,不过现在的话,还年轻一些(hhhh),没有出现太大的问题,不过是感觉到太疲乏而已。好了,这些都是题外话了。
总结
报告是写完了,不过没找到合适的方法把它保存到网上,等到自己写个博客的假期,再重新迁移一下吧。
这里就总结一下,本次结课作业用到的东西以及自己学到的东西。
以前是很讨厌数据库的,以为某javaLS和安装各种数据库时遇到的种种让人不愉快的东西的原因,我深深的感受到了这个的东西的恶意,于是乎避而远之,一直逃避着,终于还是要硬gang上这个东西,虽然很不情愿,因为那种乱七八糟的阴影还影响着我,不过还是蛮过去这道坎了,初步认识了解了数据库的操作。这次用数据库只是用了sqliet,这是python里面 自带的,所以就省去了我安装的步骤,这次其实就是学了如何对数据库进行增删改查,不过自认为还是认识的比较浅显,还缺好多的东西,不过下学期好像要开一门课程叫做数据库原理,Q Q。
对于基础的数据库用的时候就是:连接数据库,建立数据库,写 sql 语句就可以了。
建立的时候大概就是下面这个样子:
代码语言:javascript复制import sqlite3
cn=sqlite3.connect('title.db')
cur=cn.cursor()
cur.execute('create table problemid(title char(900),'
' problemDescription char(900),input char(900),output char(900),sample char(900),example1 int(1000),answer1 char(1000),example2 int(1000),answer2 char(1000))')
cur.execute('create table people(name char(200),password char(200))')
cur.close()
cn.close()
可以进行操作了:
代码语言:javascript复制cn = sqlite3.connect(dbfile) # 数据库的名字
cur = cn.execute('select * from users where userid=?', (name,)) #这里是查询
user = cur.fetchall() # 返回结果
我记得这里返回的是多个结果(前提是这里有多个结果,我们就返回多个)以元组的形式呈现。
数据库的操作也就是增加删除修改查询,对于不同的需求要写不同的 sql 语句,虽然多种多样,不过原理差不多了。
除去数据库的操作剩下就是 GUI 部分了,原本的计划是写一个基于 Web 页面的,后来就做成了本地运行的系统××。(以现在的我的狭小的知识来看,当时没有选择 Web 是个明智的选择吧,至少时间上没有反应过来,而且在后来的实训中,学习了 Django之后才知道,数据库可以不写 sql 语句,前端和后台怎么联系到一起,实现页面的友好化等等等好多东西)。
真心想吐槽一下,GUI 可能只是适合测试运行用,样式并不是我想象的那么友好,调的时候没有那么美观(这里是小编知识认知的问题),所以自己做出来的虽然可以看,虽然可以实现功能,不过真的不是我想要的。
GUI 里面的布局有很多:
pack布局 使用 pack布局,将向容器中添加组件,第一个添加的组件在最上方,然后是依次向下添加。
grid布局 grid布局又被称作网格布局,是最被推荐使用的布局。程序大多数都是矩形的界面,我们可以很容易把它划分为一个几行几列的网格,然后根据行号和列号,将组件放置于网格之中。使用grid 布局时,需要在里面指定两个参数,分别用row 表示行,column 表示列。需要注意的是 row 和 column 的序号都从0 开始。
place布局。 最简单最灵活的一种布局,使用组件坐标来放置组件的位置。但是不太推荐使用,在不同分辨率下,界面往往有较大差异。
(这些引用不如Markdown好看……真心感觉Mac的更好看)
现在是感觉当时就是乱用一气,能够调出来我们需要的效果就行了。
GUI 里面还有菜单的建立,比如:
代码语言:javascript复制 # 创建系统菜单
menubar = Menu(root) # 创建Menu对象menubar,将作为root窗口子菜单
root.config(menu=menubar) # 将menubar菜单作为root窗口的顶层菜单栏
file = Menu(menubar, tearoff=0) # file将作为menubar菜单的子菜单
file.add_command(label='登录', command=main_login)
file.add_command(label='创建/重置用户数据库', command=check_resetdb)
file.add_separator()
file.add_command(label='显示全部已注册用户', command=check_owner)
file.add_command(label='查找/修改/删除用户信息', command=check_update_owner)
file.add_command(label='添加新用户', command=adduser)
file.add_separator()
file.add_command(label='添加新题', command=addproblem)
file.add_command(label='题目列表', command=problem)
file.add_command(label='查询题号', command=showproblem)
file.add_command(label='删除题目', command=deleteproblem)
file.add_command(label='退出', command=goexit)
menubar.add_cascade(label='系统操作菜单', menu=file) # 菜单file添加为menubar的子菜单
help = Menu(menubar, tearoff=0) # help将作为menubar菜单的子菜单
help.add_command(label='查看日志', command=showlog)
help.add_command(label='关于...', command=showabout)
menubar.add_cascade(label='帮助', menu=help) # 菜单help添加为menubar的子菜单
等等等。。。
写在后面:
相信看到这的您也明白了,为什么开篇会有楔子,那是因为整篇都和一部表现不良好的小说一样。
加油吧。
2019.1.21