Python 中的 ISSN 计算器

ISSN Calculator in Python

我的任务是创建一个 ISSN 计算器,但我不确定这意味着什么以及如何做。这些是说明:

计算校验位的程序可以在计算机中自动执行,如下所示:

  1. 取ISSN前七位(校验位为第八位也是最后一位):0 3 1 7 8 4 7
  2. 取与每个数字相关的权重因子:8 7 6 5 4 3 2
  3. 将每个数字依次乘以其权重因子:0 21 6 35 32 12 14
  4. 将这些数字相加:0+21+6+35+32+12+14 = 120
  5. 将此和除以模数 11:120:11 = 10 余数 10
  6. 11减去余数:11-10 = 1
  7. 在ISSN基数的最右边(低位)位置加上余数,即校验位:0317-8471

如果余数为10,则将校验位替换为大写X。 如果没有余数,则在校验位位置补零。

这是我当前的代码:

num = input("Enter a 7-digit ISSN number: ")
weight = 10 
total = 0 
arr = [8, 7, 6, 5, 4, 3, 2] 
index = 0 
while index < 7: 
    print(arr[index])
    index += 1
    totalNum = int(num[index]) * arr[index]
print(totalNum) 
totalNum = totalNum % 11 
totalnum2 = totalNum - 11 
num = [num , totalnum2] 
print(num)

我得到输出和错误:

8
7
6
5
4
3
2
Traceback (most recent call last):
  File "so.py", line 10, in <module>
    totalNum = int(num[index]) * arr[index]
IndexError: string index out of range

我的错误是什么?

直接问题

您在使用前增加 index 值;这意味着在最后一次迭代中,它对于最终操作来说太大了 1。切换循环的底部两行:

index = 0 
while index < 7: 
    print(arr[index])
    totalNum = int(num[index]) * arr[index]
    index += 1

更好的是,这应该是一个 for 循环,而不是 while:

for index in range(7):
    print(arr[index])
    totalNum = int(num[index]) * arr[index]

Python会更好地守护你的价值

修复后:

8
7
6
5
4
3
2
14
['0317847', -8]

现在,您的问题包括

  • 您只保留 totalNum 中最后的加权金额。您需要为整个组计算 运行 总和。
  • 最后的减法倒过来了。

我想你可以从这里解决问题。 请记住,您仍然需要处理 X 案例。