- 105.13 KB
- 2022-08-08 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
课程设计报告课程:DYthon题目:ISBN条码级、专业:级专业班学生姓名:提交日期:年月日生成ISBN条码内容提要:本课程设计将生成条形码序列并用turtle画出相应图像。通过本题F1的设\n计,加深对turtle的使用和定义函数的理解,掌握存储调用字典的方法。\n关键词:设计模式,字典,条形码1•概述这个程序用来自动生成一个13位ISBN号,满足检验码规则,并利用Untie画出该条码2•设计的基本概念及原理1.编写字典,字典里都是规则性不可修改的,后面的函数调用字典來进行判断画图2.首先定义ISBN()函数得到13位ISBN号,函数首先导入随机数,创建空列表,并在列表中随机导入12位数,用规则将第一位乘以1,第2位乘以3,第3位乘以1,第四位乘以3,以此类推,直到第12位乘以3,将各位结果和加之后,取总和的末位数字(即除以10后的余数)后再减去10(如果结果为10,取0)得到第十三位数添加到列表末尾。3•得到ISBN号后开始用turtle画图,因为警戒条和12位数字画图不同,所以分别定义两个函数来画线,函数如果code二T,turtle就从x到x+2以2y(或2y+20)为高连续画线,否者就从x移动到x+2不化线4.画线函数定义完后开始定义两个警戒条函数,起始和末尾一个,中间一个,因为警戒条编码是不变的,所以在函数内用coding示警戒条代码,然后调用画警戒条的函数5.因为左右两边数字判别方法不同,所以分别定义left和right两个函数來画12位数字,left函数先根据所得条形码第一位数字判断左边六位数字的奇偶性,如果是奇就调用奇函数字典中对应的代码反z调用偶函数字典中对应的代码,最后调用画线函数,并在对应地方write此时的数字;右边数字无奇偶性直接调用右边数字字典对应代码然后调用画线函数,并在对应地方write此时的数字。6.定义一个总函数drawturtle來调丿IJ以上函数,设turtle的速度为|*»在起始地方write条形码的第一个数字,之后接连调用alertJr(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•源代码曲编写奇偶性字典,左手边奇字符字典,左手边偶字符字典和右手边字典,方便后而调用dicoe={0:[,odd',,odd','odd','odd','odd','odd'],1:['odd','odd','eve'odd','ever?,,even'],\2:['odd','odd','even*,'even','odd','even*],3:['odd*,'odd,,'even','even','even','odd'],\\n4:['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/000110r,1:'0011001',2:'0010011',3:'0111101',\4:'0100011',5:'0110001',6:'0101111',7:'0111011',\8:'0110in',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位TSBN号,满足检验码规则def1SBN0: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:isbnlast=10-isbn_sum%10#通过所给规则计算出第十三位数,并添加在列表末尾isbn_list.append(isbn_last)returnisbn_list##泄义函数1ineation来判断左右于・12位数字对应字符出'O','1',并进行相应划线操作deflineation(code,x,y):〃〃“如果code",turtle就从x到x+2以2y为髙连续画线,否者就从x移动到x+2不化线〃"ifcode*r:\nforxinrange(x,x+2):turtle・goto(x,y)turtle・pendown()turtle.goto(x,-y)x二x+2turtle.penupOelse:turtle.goto(x+2,y)x=x+2returnx曲定义函数lineation.alert來判断警告条中’o',T',并进行相应画图操作deflineation_alert(code,x,y):ifcode*I*:forxinrange(x,x+2):turtle・goto(x,y)turtle,pendown()turtle・goto(x,-y-10)x=x+2turtle.penupOelse:turtle・goto(x+2,y)x=x+2returnx删定义函数alert_lr来画出左右两边的警戒条defalert_lr(x,y):coding="101"forcodeincoding:lineation_alert(code,x,y)x=lineation_alert(code,x,y)returnx##定义函数alert_mid来画中间的警戒条defalertjnid(x,y):coding^01010z,forcodeincoding:1ineation_alert(code,x,y)x=lineation-alert(code,x,y)returnx删圧义函数le“画左手边数字的图defleft(ISBN,x,y):r)=0foriinISBN[1:7]:parity=dic_oe[TSBN[0]][n]#得到字典中对应的奇偶性,然后进行判断并画图ifparity==,odd':coding=dic_left_odd[i]forcodeincoding:\n1ineation(code,x,y)x=lineation(code,x,y)else:coding=dic_left_even[i]forcodeincoding:1ineation(code,x,y)x=lineation(code,x,y)turtle.goto(x-5,-y-20)#在对应条码下写出当前数字,字体大小为15turtle,write(ISBN[n+l]»align=,right*,font二(15))n+=lreturnx荊定义函数画右手边数字的图defright(ISBN,x,y):foriinISBN[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+=lreturnx##定义函数drawturtle来训出完整条形码defdrawturtle(TSBN,x,y):如用来定义条形码的水平位置,y定义条形码的高度〃〃“举例:x=-40,y=50,条形码最左手的第一条线在x=-40处,每条线高度为100〃〃〃turtle・penupOturtle・goto(x-5,-y)turtle・pendown()turtle・speed(lO)turtle,write(ISBN[Oj,align*right',font=(15))turtle・penupOturtle・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)1SBN=ISBN()print(ISBN)drawturtlc(ISBN,-40,50)\n19765011227199turtle・showturtle()turtle.hideturtleO#隐藏箭头tel)]onWin32TypeRcopyrightnr^credits"or"license()99formoreinforrtation.»>■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■RESTART■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■»>Pleaseenterx.ytodeterminethelocationandheightofthebarcode:-40r50(0rlr9r7r6r5r0r2.2r7rlr9r9]5•简要使用说明1.运行代码,提示输入»>Pleaseenterx,ytodeterminethelocationandheightofthebarcode:・40,50X用來定义条形码的水平位置,y定义条形码的高度。2.举例:x二-40,y=50,条形码最左手的第一条线在x二-40处,每条线高度为1003•输入后turtle开始画图得到[0,1,9r7r6r5r0r2r2,7r1,9r9]■\n6.总结\n本次程序设计,是利用随机函数自动生成一个13位ISBN号并利用turtle画出该条码,刚开始吋觉得挺简单的,在看了详细的条码规则后,有奇偶性要判断,0和1要判断,不知道怎么办,然后翻书看能不能找到解决的方法,就找到了字典來解决,把所有规则性不变的都放入字典,然后分别调用字典,进行判断;以前写代码的时候川不好函数分治,所以很少分治,这次看了书的第七章关于函数方面的知识,把以前不懂得都弄懂了,将代码进行了分治;然后就是turtle的write属性要求写出的字体大小与原本的字体大小不同,网I:查阅和关资料没有找到,然后只好根据turtle的提示(argzmovewFalsezalign-1left•,font*('Arial1t8,'normal1))Writetextat;thecurrentturtleposition・实验,最后找到了改变字体大小的方法turtleoWrite(所写内容,font=(8));这次设计过程出现了各种各样的小问题,然后一个一个实验解决,我发现编程是需要细心和耐性的,—•个小问题就可能导致整个程序运行失败,我需要培养自己的耐性,树立科学的态度,把准每个细节。这样才能从每次编程中吸取知识获得进步。参考书目:1.python入门经典成绩评定:指导教师(签字):