Python-ISBN条形码设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

课程设计报告课程:python题目:ISBN条码级、专业:级专业班学生姓名:提交日期:年月日生成ISBN条码内容提要:本课程设计将生成条形码序列并用turtle画出相应图像。通过本题目的设计,加深对turtle的使用和定义函数的理解,掌握存储调用字典的方法。关键词:设计模式,字典,条形码1.概述这个程序用来自动生成一个13位ISBN号,满足检验码规则,并利用turtle画出该条码2.设计的基本概念及原理1.编写字典,字典里都是规则性不可修改的,后面的函数调用字典来进行判断画图2.首先定义ISBN()函数得到13位ISBN号,函数首先导入随机数,创建空列表,并在列表中随机导入12位数,用规则将第一位乘以1,第2位乘以3,第3位乘以1,第四位乘以3,以此类推,直到第12位乘以3,将各位结果相加之后,取总和的末位数字(即除以10后的余数)后再减去10(如果结果为10,取0)得到第十三位数添加到列表末尾。3.得到ISBN号后开始用turtle画图,因为警戒条和12位数字画图不同,所以分别定义两个函数来画线,函数如果code=‘1’,turtle就从x到x+2以2y(或2y+20)为高连续画线,否者就从x移动到x+2不化线4.画线函数定义完后开始定义两个警戒条函数,起始和末尾一个,中间一个,因为警戒条编码是不变的,所以在函数内用coding表示警戒条代码,然后调用画警戒条的函数5.因为左右两边数字判别方法不同,所以分别定义left和right两个函数来画12位数字,left函数先根据所得条形码第一位数字判断左边六位数字的奇偶性,如果是奇就调用奇函数字典中对应的代码反之调用偶函数字典中对应的代码,最后调用画线函数,并在对应地方write此时的数字;右边数字无奇偶性直接调用右边数字字典对应代码然后调用画线函数,并在对应地方write此时的数字。6.定义一个总函数drawturtle来调用以上函数,设turtle的速度为十,在起始地方write条形码的第一个数字,之后接连调用alert_lr(x,y),left(ISBN,x,y),alert_mid(x,y),right(ISBN,x,y),alert_lr(x,y)函数7.最后调用函数ISBN()得到条形码并存储在列表ISBN中,然后打印出,调用drawturtle函数画出图形。3.设计方案先写出四个规则字典——得到13位条形码——定义函数实现分治——调用函数完成画图4.源代码##编写奇偶性字典,左手边奇字符字典,左手边偶字符字典和右手边字典,方便后面调用dic_oe={0:['odd','odd','odd','odd','odd','odd'],1:['odd','odd','even','odd','even','even'],\2:['odd','odd','even','even','odd','even'],3:['odd','odd','even','even','even','odd'],\4:['odd','even','odd','odd','even','even'],5:['odd','even','even','odd','odd','even'],\6:['odd','even','even','even','odd','odd'],7:['odd','even','odd','even','odd','even'],\8:['odd','even','odd','even','even','odd'],9:['odd','even','even','odd','even','odd']}dic_left_odd={0:'0001101',1:'0011001',2:'0010011',3:'0111101',\4:'0100011',5:'0110001',6:'0101111',7:'0111011',\8:'0110111',9:'0001011'}dic_left_even={0:'0100111',1:'0110011',2:'0011011',3:'0100001',\4:'0011101',5:'0111001',6:'0000101',7:'0010001',\8:'0001001',9:'0010111'}dic_right={0:'1110010',1:'1100110',2:'1100110',3:'1000010',\4:'1011100',5:'1001110',6:'1010000',7:'1000100',\8:'1001000',9:'1110100'}##定义函数ISBN用来自动生成一个13位ISBN号,满足检验码规则defISBN():importrandomisbn_list=[]foriinrange(12):num=random.randint(0,9)isbn_list.append(num)#随机生成前12位数字isbn_sum=0foriinrange(12):ifi%2==0:isbn_sum+=isbn_list[i]else:isbn_sum+=isbn_list[i]*3ifisbn_sum%10==0:isbn_last=0else:isbn_last=10-isbn_sum%10#通过所给规则计算出第十三位数,并添加在列表末尾isbn_list.append(isbn_last)returnisbn_list##定义函数lineation来判断左右手12位数字对应字符串‘0’,‘1’,并进行相应划线操作deflineation(code,x,y):如果code=1,turtle就从x到x+2以2y为高连续画线,否者就从x移动到x+2不化线ifcode=='1':forxinrange(x,x+2):turtle.goto(x,y)turtle.pendown()turtle.goto(x,-y)x=x+2turtle.penup()else:turtle.goto(x+2,y)x=x+2returnx##定义函数lineation_alert来判断警告条中'o','1',并进行相应画图操作deflineation_alert(code,x,y):ifcode=='1':forxinrange(x,x+2):turtle.goto(x,y)turtle.pendown()turtle.goto(x,-y-10)x=x+2turtle.penup()else:turtle.goto(x+2,y)x=x+2returnx##定义函数alert_lr来画出左右两边的警戒条defalert_lr(x,y):coding=101forcodeincoding:lineation_alert(code,x,y)x=lineation_alert(code,x,y)returnx##定义函数alert_mid来画中间的警戒条defalert_mid(x,y):coding=01010forcodeincoding:lineation_alert(code,x,y)x=lineation_alert(code,x,y)returnx##定义函数left画左手边数字的图defleft(ISBN,x,y):n=0foriinISBN[1:7]:parity=dic_oe[ISBN[0]][n]#得到字典中对应的奇偶性,然后进行判断并画图ifparity=='odd':coding=dic_left_odd[i]forcodeincoding:lineation(code,x,y)x=lineation(code,x,y)else:coding=dic_left_even[i]forcodeincoding:lineation(code,x,y)x=lineation(code,x,y)turtle.goto(x-5,-y-20)#在对应条码下写出当前数字,字体大小为15turtle.write(ISBN[n+1],align='right',font=(15))n+=1returnx##定义函数画右手边数字的图defright(ISBN,x,y):n=7foriinISBN[7:13]:forcodeindic_right[i]:lineation(code,x,y)x=lineation(code,x,y)turtle.goto(x-5,-y-20)#在对应条码下写出当前数字,字体大小为15turtle.write(ISBN[n],align='right',font=(15))n+=1returnx##定义函数drawturtle来画出完整条形码defdrawturtle(ISBN,x,y):#x用来定义条形码的水平位置,y定义条形码的高度举例:x=-40,y=50,条形码最左手的第一条线在x=-40处,每条线高度为100turtle.penup()turtle.goto(x-5,-y)turtle.pendown()turtle.speed(10)turtle.write(ISBN[0],align='right',font=(15))turtle.penup()turtle.goto(-x,y)x=alert_lr(x,y)#调用相应函数并得到返回值x=left(ISBN,x,y)x=alert_mid(x,y)x=right(ISBN,x,y)x=alert_lr(x,y)importturtleturtle.pensize(2)ISBN=ISBN()print(ISBN)drawturtle(ISBN,-40,50)turtle.showturtle()turtle.hideturtle()#隐藏箭头5.简要使用说明1.运行代码,提示输入x用来定义条形码的水平位置,y定义条形码的高度。2.举例:x=-40,y=50,条形码最左手的第一条线在x=-40处,每条线高度为1003.输入后turtle开始画图得到6.总结本次程序设计,是利用随机函数自动生成一个13位ISBN号并利用turtle画出该条码,刚开始时觉得挺简单的,在看了详细的条码规则后,有奇偶性要判断,0和1要判断,不知道怎么办,然后翻书看能不能找到解决的方法,就找到了字典来解决,把所有规则性不变的都放入字典,然后分别调用字典,进行判断;以前写代码的时候用不好函数分治,所以很少分治,这次看了书的第七章关于函数方面的知识,把以前不懂得都弄懂了,将代码进行了分治;然后就是turtle的write属性要求写出的字体大小与原本的字体大小不同,网上查阅相关资料没有找到,然后只好根据turtle的提示实验,最后找到了改变字体大小的方法turtle。Write(所写内容,font=(8));这次设计过程出现了各种各样的小问题,然后一个一个实验解决,我发现编程是需要细心和耐性的,一个小问题就可能导致整个程序运行失败,我需要培养自己的耐性,树立科学的态度,把准每个细节。这样才能从每次编程中吸取知识获得进步。参考书目:1.python入门经典成绩评定:指导教师(签字):年月日

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功