|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #考试应用
- #从logo - 菜单 - 选项 - 试卷(答题人/试题/答案/分值) - 答题 - 分数/结论 - 证书
- from PIL import Image,ImageDraw,ImageFont
- import sqlite3
- import datetime
- import base64
- def showLogo():
- #局部变量
- fp = open('10.jpg','rb')
- #转换为Image对象
- imagefile = Image.open(fp)
- #修改图片的size
- imgw = int(imagefile.size[0]*0.2)
- imgh = int(imagefile.size[1]*0.1)
- imagefile = imagefile.resize((imgw,imgh))
- codeLib = '''[wertyuiop[]\asdfghjkl;zxcvbnm,.2QWERTYUIOPASDFGHJKLZXCVBNM1234567890-=`~+_<>:"|'''
- codecount = len(codeLib)
- strlogo = ''
- #图片转字符
- for h in range(imagefile.size[1]):
- for w in range(imagefile.size[0]):
- g,r,b = imagefile.getpixel((w,h))
- #计算灰度值
- gray = int(r*0.299 + g*0.589 + b*0.115)
- strlogo += codeLib[int((codecount-1)*gray/256)]
- strlogo+='\n'
- print(strlogo)
- return
- def showMenu():
- print("="*50)
- print(" "*50)
- print(" "*7+"你说你是四川人,来测试一下,我就信你")
- print(" "*10+"author:lll version:test1.1")
- print(" "*50)
- print("="*50)
- while True:
- print("---【A】开始答题")
- print("---【B】查看排名")
- print("---【C】退出")
- selectM = input('>>>')
- if selectM.lower()=="a":
- print("开始答题")
- username = ansUser()
- scTest(8,username)
- elif selectM.lower()=="b":
- hisScorecheck()
- elif selectM.lower()=="c":
- print("退出")
- break
- else:
- print("请按要求输入菜单项")
- #以下为试卷部分
- def QuesList():
- t1 = '''“包谷”是指()\nA农民B小麦C蝗虫D玉米\n'''
- t2 = '''“批噻噻”是形容一个人()\nA舌头长,搬弄是非B一种腌制品C长得强壮D一种交通工具\n'''
- t3 = '''“叮叮猫”是指()\nA猫猫好可怜B蜻蜓C人长得瘦小D螳螂\n'''
- t4 = '''“泡梢”是()
- A骂一个中年妇女体型象泡菜罐B指卖泡菜的少女C夸年轻女孩发育的好,长得水灵D一种泡菜名称\n'''
- t5 = '''“梭椰子”是()
- A给买椰子的人取得绰号B骂一妇女体型象椰子C夸小伙子肌肉发达D骂一女人乱搞男女关系\n'''
- t6 = '''“秋瓣儿”是()
- A说某人厉害B说某人是黑社会打手C骂某人土气、精神涣散D夸某女孩会持家\n'''
- t7 = '''同音听力“风丝麻木”是形容某人()
- A小偷小摸B少男痴情C调皮捣蛋D少女怀春'''
- t8 = '''“豁皮”是()
- A说某人是单眼皮B豆腐皮C鸡皮D骂某人是丑八怪'''
- return [t1,t2,t3,t4,t5,t6,t7,t8]
- #参考答案
- def QuesListRealAns():
- return['d','d','d','d','d','c','d','a']
- #对应分值
- def QuesListRealAnsScore():
- return[10,20,10,20,10,10,10,10]
- #答题人
- def ansUser():
- name = input("请输入你的姓名:")
- return name
- #生成试卷方法
- #tnum:题量
- def scTest(tnum,username):
- #抽题-题量
- #显示答题人
- t1 = 0 #题号/取试题的下标值
- totpoint = 0 #总分值
- if tnum>0 and tnum<=len(QuesList()):
- cti = QuesList()[0:tnum]
- #记录用户答案
- global answer
- answer = []
- while t1<tnum:
- print("{}.".format(t1+1)+cti[t1])
- #答题业务
- totpoint += ansQuesByuser(username,t1)
- t1+=1
- print("") #分隔题
- else:
- print('* 题量超出系统预设题量')
- #处理成绩和评价业务
- scoreAndMsg(username,totpoint)
- cetifsc(username,totpoint)
- #以上为试卷部分
- #答题
- def ansQuesByuser(name,t1):
- tscore = 0
- ans = input("Ans>>")
- answer.append(ans)
-
- if ans.lower() == QuesListRealAns()[t1]:#如果题目答对了
- tscore = QuesListRealAnsScore()[t1]
- return tscore
- def scoreAndMsg(username,score):
- if score>=0 and score<10:
- print("{}的分数是:{},所以你是一位{}".format(username,score,"假四川人"))
- if score>=10 and score<30:
- print("{}的分数是:{},所以你是一位{}".format(username,score,"初入四川人"))
- if score>=30 and score<60:
- print("{}的分数是:{},所以你是一位{}".format(username,score,"落户四川人"))
- if score>=60 and score<80:
- print("{}的分数是:{},所以你是一位{}".format(username,score,"扎根四川人"))
- if score>=80 and score<100:
- print("{}的分数是:{},所以你是一位{}".format(username,score,"落叶四川人"))
- hisScorestore(username,score)
- #保存历史分数
- def hisScorestore(name,score):
- f = open('历史成绩','a+')
- f.write(name+':'+str(score)+'\n')
- f.close()
- con = sqlite3.connect('SClanguageTest.db')
- sql = '''create table userinfo (
- name char(10),
- score int)'''
- sql2 = '''insert into userinfo values(:name,:score)'''
- answerSql = '''create table AnswerData(
- name char(10),
- 第1题 char(2),
- 第2题 char(2),
- 第3题 char(2),
- 第4题 char(2),
- 第5题 char(2),
- 第6题 char(2),
- 第7题 char(2),
- 第8题 char(2))'''
- answerSql1 = '''insert into AnswerData values ('{}','{}','{}','{}','{}','{}','{}','{}','{}') '''.\
- format(name,answer[0],answer[1],answer[2],answer[3],answer[4],answer[5],answer[6],answer[7],)
- #获得游标
- cursor = con.cursor()
- try:
- cursor.execute(answerSql)
- except sqlite3.OperationalError:
- pass
- cursor.execute(answerSql1)
- #用游标执行sql
- #报错检测
- try:
- cursor.execute(sql)
- except sqlite3.OperationalError:
- pass
- cursor.execute(sql2,{"name":name,"score":score})
- con.commit()
- cursor.close()
- con.close()
- #查看历史分数
- def hisScorecheck():
- result=[]
- f = open('历史成绩','r')
- for x in f.readlines():
- result.append(x)
- f.close()
- #print("="*50)
- print("---【A】查看所有历史排名")
- print("---【B】搜索历史成绩")
- selectB = input('>>>')
- if selectB.lower()=='a':
- ranking = sorted(result,key = mylen,reverse = True)
- for x in ranking:
- print(x)
- elif selectB.lower()=='b':
- #记录查找的成绩
- checkscore=[]
- name = input("请输入搜索的id的姓:")
- for x in result:
- if name == x.split(':')[0][0]:
- print(x)
-
- #自定义排序
- def mylen(result):
- return int(result.split(':')[1]) #切片,按分数排序
- #生成证书
- def cetifsc(name,score):
- #获取当前时间
- time = datetime.datetime.now()
- #格式化当前时间
- timeStr = time.strftime('%Y%m%d')
- img_name = '{}_{}.jpg'.format(name,timeStr)
- #证书内容
- text1 = '四川话八级证书'
- text2 = '{}同志:'.format(name)
- text3 = '你在四川话八级测试中获得的成绩是{}分'.format(score)
- img_main = Image.open('bgheng.png')#打开图片
- draw = ImageDraw.Draw(img_main)#添加画板
- font = ImageFont.truetype('C:\Windows\Fonts\FZYTK.TTF',80)#字体设置
- font2 = ImageFont.truetype('C:\Windows\Fonts\msyh.ttc',50)
- #写字
- draw.text([606,229],text1,fill='black',font=font)
- draw.text([320,550],text2,fill = 'black',font = font2)
- draw.text([420,660],text3,fill = 'black',font = font2)
-
- img_main.save(img_name)
- ZSmessStore(img_name)
- #mage.open(img_name).show()
- ZSmessReturn(img_name)
- #证书信息保存
- def ZSmessStore(img_name):
- image = open(img_name,'rb')
- imgText_name = 'data'+img_name
- imgText = open(imgText_name,'wb')
- for x in image:
- imgText.write(x)
- image.close()
- imgText.close()
- with open(imgText_name,'rb') as f:
- res = base64.b64encode(f.read())
- sql = '''insert into image values(:imgText_name,:res)'''
- con = sqlite3.connect('SClanguageTest.db')
- cursor = con.cursor()
- try:
- cursor.execute('create table image(pic_name varchar(20),picture longbolb)')
- except sqlite3.OperationalError:
- pass
- cursor.execute(sql,{"imgText_name":imgText_name,"res":res})
- con.commit()
- cursor.close()
- con.close()
- #证书信息还原
- def ZSmessReturn(img_name):
- imgText_name = 'data'+img_name
- con = sqlite3.connect('SClanguageTest.db')
- cursor = con.cursor()
- sql = 'select * from image where pic_name = :imgText_name'
- cursor.execute(sql,{':imgText_name':imgText_name})
- for picture in cursor.fetchall():
- img = base64.b64decode(picture[0])
- f = open(img_name,'wb')
- f.write(img)
- f.close()
- img = Image.open(img_name).show()
- img.close()
- cursor.close()
- con.close()
-
-
- #程序入口
- showLogo()
- showMenu()
-
复制代码
以上为源代码,不过需要和附件两张图片一起才能跑
问题在- #证书信息保存
- def ZSmessStore(img_name):
- image = open(img_name,'rb')
- imgText_name = 'data'+img_name
- imgText = open(imgText_name,'wb')
- for x in image:
- imgText.write(x)
- image.close()
- imgText.close()
- with open(imgText_name,'rb') as f:
- res = base64.b64encode(f.read())
- sql = '''insert into image values(:imgText_name,:res)'''
- con = sqlite3.connect('SClanguageTest.db')
- cursor = con.cursor()
- try:
- cursor.execute('create table image(pic_name varchar(20),picture longbolb)')
- except sqlite3.OperationalError:
- pass
- cursor.execute(sql,{"imgText_name":imgText_name,"res":res})
- con.commit()
- cursor.close()
- con.close()
复制代码
- sql = '''insert into image values(:imgText_name,:res)'''
- cursor.execute(sql,{"imgText_name":imgText_name,"res":res})
复制代码
这个位置
会报如下错误
- cursor.execute(sql,{':imgText_name':imgText_name})
- sqlite3.ProgrammingError: You did not supply a value for binding 1.
复制代码
蹲一个大佬解决问题 |
-
-
|