内容提要: 国际标准书号(International Standard Book Number,ISBN)每一本公开发行的书,在封底都有一个10位或13位的编号ISBN。ISBN的最后一位数字称为计算机校验码,相当于奇偶校验位。书店的计算机仅通过查看ISBN的校验码便能判断是否犯了错误,避免买错书。13位ISBN的校验码算法如下: 将第一位乘以1,第2位乘以3,第3位乘以1,第四位乘以3,以此类推,直到第12位乘以3,将各位结果相加之后,取总和的末位数字(即除以10后的余数)后再减去10(如果结果为10,取0)即可。 例如: ISBN-978-897283571-4 (9×1)+(7×3)+(8×1)+(8×3)+(9×1)+(7×3)+ (2×1)+(8×3)+(3×1)+(5×3)+(7×1)+(1×3)=146 146 ÷ 10= 14 (余6) 10 - 6 = 4 请编写一个条码分析和生成程序,具有以下功能: 1)利用随机函数自动生成一个13位ISBN号,满足检验码规则 2)利用turtle画出该条码,条码编码规则如下图: |
成绩评定: 指导教师(签字):
年 月 日 |
具体内容: 1引言 本课程设计利用随机函数自动生成一个13位ISBN号,满足检验码规则,再利用turtle画出该条码。 2总体设计方案或程序设计思想
3 代码 import turtle #ISBN import random def ISBN(): isbn_list=[] for i in range(12): n=random.randint(0,9) isbn_list.append(n)#随机生成十二位 s=0 for i in range(len(isbn_list)): if i%2==0: s+=int(isbn_list[i])*1 else: s+=int(isbn_list[i])*3 if s%10==0: a=0 else: a=10-(s%10)#按规则计算出第十三位 isbn_list.append(a) return isbn_list #定义奇偶性 dict_eo={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"]} #左边奇字符字典 dict_leftodd={0:"0001101",1:"0011001",2:"0010011",3:"0111101",4:"0100011",\ 5:"0110001",6:"0101111",7:"0111011",8:"0110111",9:"0001011"} #左边偶字符字典 dict_lefteven={0:"0100111",1:"0110011",2:"0011011",3:"0100001",4:"0011101",\ 5:"0111001",6:"0000101",7:"0010001",8:"0001001",9:"0010111"} #右边偶字符字典 dict_righteven={0:"1110010",1:"1100110",2:"1101100",3:"1000010",4:"1011100",\ 5:"1001110",6:"1010000",7:"1000100",8:"1001000",9:"1110100"} #定义画线 def line_draw(code,x,y): 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() elif code!="1": turtle.goto(x+2,y) x=x+2 return x #定义警戒线 def 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 #定义左右俩边警戒线 def alert_lr(x,y): n="101" for code in n: alert(code,x,y) x=alert(code,x,y) return x #定义中间的警戒线 def alert_m(x,y): n="01010" for code in n: alert(code,x,y) x=alert(code,x,y) return x #定义左半边 def left(ISBN,x,y): k=0 for i in ISBN[1:7]: judge=dict_eo[ISBN[0]][k] if judge=="odd": for code in dict_leftodd[i]: line_draw(code,x,y) x=line_draw(code,x,y) else: for code in dict_lefteven[i]: line_draw(code,x,y) x=line_draw(code,x,y) #对应条码下写对应数字 turtle.goto(x-5,-y-20) turtle.write(ISBN[k+1],align="right",font=(14)) k+=1 return x #定义右半边 def right(ISBN,x,y): k=7 for i in ISBN[7:13]: for code in dict_righteven[i]: line_draw(code,x,y) x=line_draw(code,x,y) #对应条码下写对应数字 turtle.goto(x-5,-y-20) turtle.write(ISBN[k],align="right",font=(14)) k+=1 return x #画图 def draw_p(ISBN,x,y): turtle.penup() turtle.goto(x-5,-y) turtle.pendown turtle.speed(40) turtle.write(ISBN[0],align="right",font=(14)) turtle.penup() turtle.goto(-x,y) x=alert_lr(x,y) x=left(ISBN,x,y) x=alert_m(x,y) x=right(ISBN,x,y) x=alert_lr(x,y) turtle.pensize(2) ISBN=ISBN() print(ISBN) draw_p(ISBN,-40,50) turtle.showturtle() 4 测试、调试、运行结果截图 利用Python Turtle Graphics画图: 5 总结
|
Python大作业条形码
![](https://img-home.csdnimg.cn/images/20240611030827.png)