已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告课 程: 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,odddic_left_odd=0:0001101,1:0011001,2:0010011,3:0111101, 4:0100011,5:0110001,6:0101111,7:0111011, 8:0110111,9:0001011dic_left_even=0:0100111,1:0110011,2:0011011,3:0100001, 4:0011101,5:0111001,6:0000101,7:0010001, 8:0001001,9:0010111dic_right=0:1110010,1:1100110,2:1100110,3:1000010, 4:1011100,5:1001110,6:1010000,7:1000100, 8:1001000,9:1110100 #定义函数ISBN用来自动生成一个13位ISBN号,满足检验码规则def ISBN(): import random isbn_list= for i in range(12): num=random.randint(0,9) isbn_list.append(num) #随机生成前12位数字 isbn_sum=0 for i in range(12): if i%2=0: isbn_sum+=isbn_listi else: isbn_sum+=isbn_listi*3 if isbn_sum%10=0: isbn_last=0 else: isbn_last=10-isbn_sum%10 #通过所给规则计算出第十三位数,并添加在列表末尾 isbn_list.append(isbn_last) return isbn_list#定义函数lineation来判断左右手12位数字对应字符串0,1,并进行相应划线操作def lineation(code,x,y): 如果code=1,turtle就从x到x+2以2y为高连续画线,否者就从x移动到x+2不化线 if code=1: for x in range(x,x+2): turtle.goto(x,y) turtle.pendown() turtle.goto(x,-y) x=x+2 turtle.penup() else: turtle.goto(x+2,y) x=x+2 return x#定义函数lineation_alert来判断警告条中o,1,并进行相应画图操作def lineation_alert(code,x,y): if code=1: for x in range(x,x+2): turtle.goto(x,y) turtle.pendown() turtle.goto(x,-y-10) x=x+2 turtle.penup() else: turtle.goto(x+2,y) x=x+2 return x#定义函数alert_lr来画出左右两边的警戒条def alert_lr(x,y): coding=101 for code in coding: lineation_alert(code,x,y) x=lineation_alert(code,x,y) return x #定义函数alert_mid来画中间的警戒条def alert_mid(x,y): coding=01010 for code in coding: lineation_alert(code,x,y) x=lineation_alert(code,x,y) return x#定义函数left画左手边数字的图def left(ISBN,x,y): n=0 for i in ISBN1:7: parity=dic_oeISBN0n #得到字典中对应的奇偶性,然后进行判断并画图 if parity=odd: coding=dic_left_oddi for code in coding: lineation(code,x,y) x=lineation(code,x,y) else: coding=dic_left_eveni for code in coding: lineation(code,x,y) x=lineation(code,x,y) turtle.goto(x-5,-y-20) #在对应条码下写出当前数字,字体大小为15 turtle.write(ISBNn+1,align=right,font=(15) n+=1 return x#定义函数画右手边数字的图def right(ISBN,x,y): n=7 for i in ISBN7:13: for code in dic_righti: lineation(code,x,y) x=lineation(code,x,y) turtle.goto(x-5,-y-20) #在对应条码下写出当前数字,字体大小为15 turtle.write(ISBNn,align=right,font=(15) n+=1 return x #定义函数drawturtle来画出完整条形码def drawturtle(ISBN,x,y): #x用来定义条形码的水平位置,y定义条形码的高度 举例:x=-40,y=50,条形码最左手的第一条线在x=-40处,每条线高度为100 turtle.penup() turtle.goto(x-5,-y) turtle.pendown() turtle.speed(10) turtle.write(ISBN0,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)import turtleturtle.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属性要求写出的字体大小与原本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年吉林铁道职业技术学院单招职业倾向性考试必刷测试卷附答案
- 2026年天津职业大学单招职业倾向性考试题库必考题
- 2026年陕西青年职业学院单招职业倾向性考试题库附答案
- 2026年湖南民族职业学院单招职业适应性测试必刷测试卷必考题
- 2026年达州中医药职业学院单招职业适应性考试必刷测试卷及答案1套
- 2026年太原旅游职业学院单招职业倾向性测试必刷测试卷新版
- 2026年漳州科技职业学院单招综合素质考试必刷测试卷及答案1套
- 2026年宣化科技职业学院单招职业倾向性考试题库及答案1套
- 2026年合肥经济技术职业学院单招综合素质考试必刷测试卷附答案
- 2026年商洛职业技术学院单招综合素质考试必刷测试卷附答案
- 2024-2025学年北京十四中七年级(上)期中语文试卷
- 平面设计专业职业规划
- 口腔医院礼仪培训课件
- 2024年商品混凝土运输合同(三篇)
- 管理经济学:理论与案例 第2版 课件全套 毛蕴诗 第1-14章 企业性质与环境、企业目标 -政府与企业
- 股权代持与股权合作协议书范本
- 医院肺功能室进修出科小结
- 智能医疗的法律与伦理问题研究
- 盒马鲜生财政报告分析
- 被执行人生活费申请书范文
- TSM5514G 丰田试验测试标准
评论
0/150
提交评论