Python实例——国际标准书号(ISBN)的计算

Python实例—计算ISBN的校验和并返回ISBN号

咳咳,科普一下,ISBN的中文名为国际标准书号,简单来说就是一本书的身份证,经常和条形码在一起使用。
在这里插入图片描述
话不多说,我们直接进入正题:
一、题目要求与分析
  国际标准书号用10为数字唯一标识一本书(哈哈,莫说我骗你噻,自从2007年1月1日起,实行新版ISBN,即在原来的10位数字前加上3位图书产品代码“978”,称为欧洲商品编号,总之就是方便检索的,这段很尴尬,隐了隐了),最右边的数字为校验和,可由其他9位数字计算出来,且d1 + 2d2 + 3d3 + …+ 10d10 必须是11的倍数。校验和必须是介于0到10中的一个数字,用X标识10。例如:020131452的校验和是5,因为对于下边11倍数的公式,5是唯一的介于0到10之间的数:
在这里插入图片描述
要求任意给出前9位数字,需要计算校验和并返回ISBN号。

在这里插入图片描述
好吧,不得不说我在构建这个数学公式上耗费了大半元气。
  题目分析:上边啰嗦了那么多,终归是一个找数字的问题,只是这个数字比较复杂,既满足在0-10之间,又满足和其他数相加是11的倍数。如果这个数找到了,那么什么输出ISBN号通通不在话下,我们将问题简化可以分解成以下三步:
   步骤1: 限定校验和k(就是那个数,我们也专业点儿)的范围为0-10
   步骤2: 计算其他数(就是那个 2d2 + 3d3 + …+ 10d10),这里用number_other表示;
   步骤3: 限定倍数(就是相加是11的倍数那个倍数),这里用mul表示.

注意:我为什么要限定倍数nul 呢?
   这个问题是这道题的核心,这里我不妨谈谈自己的思路,题中提到11的倍数,但又没有说这个倍数具体是多少,所以我只能用一个变量mul来代替,让它从0往后遍历就好了,但是新的问题出现了;这么一直遍历下去也不是办法,毕竟刹不住车不行呀。
  

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值