【发布时间】:2018-08-25 10:09:43
【问题描述】:
我正在学习全神贯注于编程,并被分配了以下任务:
ISBN(国际标准书号)由 10 位数字组成。
z1z2z3z4z5z6z7z8z9z10
最后一个数字 z10 是一个校验位。它是这样制作的:首先,您使用以下公式创建一种交叉求和:
s = 1 * z1 + 2 * z2 + 3 * z3 + 4 * z4 sub> + 5 * z5 + 6 * z6 + 7 * z7 + 8 * z8 + 9 * z9
校验位 z10 是 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 所学到的任何东西,但是这项任务似乎有点困难(这是我正在研究的这本书的早期章节),我被卡住了,没有得到这不是我的想法。
提前感谢您,祝您有美好的一天!
【问题讨论】:
-
“怎么叫”,没错,就是叫除法。
-
我的问题是为什么它会这样工作,我监督的工作是什么,我很清楚它使用了部门,我什至在本文中多次使用了“部门”这个词,但这根本没有帮助。
-
当你看到代码反复重复几行时,你应该尝试用
for循环替换它。 -
看,假设我们有 number = 123(一个十进制的数字 - 以 10 为底),每次你做 number%10 时,你都会得到这个数字的最左边的数字。所以对于 123,123%10 给你 3。另外,number//10 会切断最左边的数字。所以 123//10 等于 12。然后您重复相同的步骤多次以获得所有数字。
-
10 在这里很特别,因为该数字以 10 为底(十进制)。假设如果你有一个二进制数,你会对 2 做同样的事情。为了进一步理解它,想象一下 123 = 1*100 + 2*10 + 3,所以你看到 123 除以 10 的余数是 3,即只不过是 123 的最右边的数字。当你将它除以 10 时,它变成 12 = 1*10+2(即所有数字向右移动 1)。
标签: python python-3.x algorithm check-digit