python - Python3校验位算法
问题描述
我正在学习如何专注于编程,并被赋予了以下任务:
ISBN(国际标准书号)由 10 位数字组成。
z 1 z 2 z 3 z 4 z 5 z 6 z 7 z 8 z 9 z 10
最后一位z 10是校验位。它是这样制作的:首先,您使用以下公式创建一种交叉求和:
s = 1 * z 1 + 2 * z 2 + 3 * z 3 + 4 * z 4 + 5 * z 5 + 6 * z 6 + 7 * z 7 + 8 * z 8 + 9 * z 9
校验位 z 10是 s 除以 11 的整数除法的余数。对于余数 10,您写 x 或 X。示例:对于 ISBN 3826604237,您得到校验位 7。
计算:1*3+2*8+3*2+4*6+5*6+6*0+7*4+8*2+9*3 = 150
150 和 11 除的余数是 7。
给出的代码解决方案如下:
# isbn.py
number = int(input("Please enter a 9-digit number: "))
z9 = number % 10
number = number//10
z8 = number % 10
number = number//10
z7 = number % 10
number = number//10
z6 = number % 10
number = number//10
z5 = number % 10
number = number//10
z4 = number % 10
number = number//10
z3 = number % 10
number = number//10
z2 = number % 10
number = number//10
z1 = number
sum = z1+2*z2+3*z3+4*z4+5*z5+6*z6+7*z7+8*z8+9*z9
checkdigit = sum%11
print("\nCheckdigit:", checkdigit)
我的问题很简单:它是如何工作的?为什么我必须一直计算“number // 10”和“number % 10”?这种算法有名字吗,如果有,怎么称呼?
我将不胜感激任何形式的答案,如果这对您来说似乎是最简单的事情并且您觉得我在浪费您的时间,我很抱歉。到目前为止,我几乎了解了迄今为止学习 python 所学到的任何东西,但是这项任务似乎有点困难(这是我正在研究的这本书的早期章节),我被卡住了,没有得到这不是我的想法。
提前感谢您,祝您有美好的一天!
解决方案
该操作x % 10
称为“模数”并返回除以 10 的余数。您在代码中使用它来隔离最右边的数字。
下一个操作x // 10
称为“整数除法”,即仅返回整数的除法(小数部分(如果有)被截断)。十进制数除以 10 对应于右移一位,以便下一位移到最右边的位置。
您重复这两个步骤,直到最后一个数字被隔离。然后你执行乘法,最后取 11 的模(除以 11 的余数)来获得校验位。
这个重复的代码需要循环。想象一下,您必须处理 100 位数字。
推荐阅读
- kubernetes - 添加选择器后,“选择器”与模板“标签”不匹配 - Azure DevOPs
- python - 创建具有顺序名称的多个数据框
- vb.net - Zxing.Net 读取二维码
- c# - IN 和 OUT DTO 有任何命名约定吗?
- html - 在 CSS Grid 中仅显示一行并隐藏其他行
- python-3.x - 将 csv 文件转换为边和节点以创建和绘制 networkx 图
- html - 如何使用 CSS 和 HTML 正确设置列表元素之间的分隔符?
- terraform - 用于私有 DNS 和 vnet 链接的 Azure Terraform
- python - 如何将正则表达式应用于熊猫中的拆分列?
- python - 如何使用 tkinter 在一个窗口中居中两个框架?