1、每一本书都有一个ISBN码,ISBN的格式为“x-xxx-xxxxx-x”,它包括9位数字、1位校验码和3位分隔符,最后一位是校验码,例如0-670-82164-4,最后一位数字4就是校验码。用首位数字乘以1加上次位数字乘以2……以此类推,将所得的结果用11求余,所得的余数即为校验码,如果余数为10,则校验码为X。
例如:ISBN码0-670-82162-4,求和方法如下:
0´1+6´2+7´3+0´4+8´5+2´6+1´7+6´8+2´9=158,求余158 mod11=4
要求:使用文件操作,写入若干本书的ISBN码信息到文件里,然后读取文件里的ISBN码,设计函数checkISBN,判断每条ISBN码的校验码是否正确。
def checkISBN(s): n=len(s) i=0 sum=0 c=0 for i in range(0,n-1): if(s[i]!='-'): c+=1 sum=sum+int(s[i])*c if(s[n-1]=='X'): if(sum%11==10): return True else: if(sum%11==int(s[n-1])): return True nameHandle=open('ISBN码','w') n=int(input('input a num:')) for i in range(n): string=input('input a string:') nameHandle.write(string+'\n') nameHandle.close() nameHandle=open('ISBN码','r') for line in nameHandle: c=line[:-1] b=checkISBN(c) if(b): print('校验码正确') else: print('出错了') nameHandle.close() #string='0-670-82162-4' #string1='0-123-41562-4'
2.基于元组,设计集合的操作模块,包括:判断一个集合是否是另一个集合的子集;求两个集合的交、并、差集。对模块里的函数进行测试。
import jihe s=(4,5,6,7) s1=(1,2,3,4,5,6) print(jihe.Union(s,s1)) print(jihe.intersect(s,s1)) print(jihe.setdifference(s,s1)) if(jihe.ISin(s,s1)): print('s是s1的子集') else: print('s不是s1的子集')
def Union(t1,t2): #并集 result=t1 for e in t2: if(e not in t1): result+=(e,) return result def intersect(t1,t2): #交集 result=() for e in t1: if(e in t2): result+=(e,) return result def ISin(t1,t2): #判断一个集合是否是另一个集合的子集 flag=1 for e in t1: if (e not in t2): flag=0 break return flag def setdifference(t1,t2): result = () for e in t1: if (e in t2): result += (e,) re=() for s in t1: if(s not in result): re+=(s,) return re