第四次上机作业

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
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值