Python 中的 ISSN 计算器
ISSN Calculator in Python
我的任务是创建一个 ISSN 计算器,但我不确定这意味着什么以及如何做。这些是说明:
计算校验位的程序可以在计算机中自动执行,如下所示:
- 取ISSN前七位(校验位为第八位也是最后一位):0 3 1 7 8 4 7
- 取与每个数字相关的权重因子:8 7 6 5 4 3 2
- 将每个数字依次乘以其权重因子:0 21 6 35 32 12 14
- 将这些数字相加:0+21+6+35+32+12+14 = 120
- 将此和除以模数 11:120:11 = 10 余数 10
- 11减去余数:11-10 = 1
- 在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
案例。
我的任务是创建一个 ISSN 计算器,但我不确定这意味着什么以及如何做。这些是说明:
计算校验位的程序可以在计算机中自动执行,如下所示:
- 取ISSN前七位(校验位为第八位也是最后一位):0 3 1 7 8 4 7
- 取与每个数字相关的权重因子:8 7 6 5 4 3 2
- 将每个数字依次乘以其权重因子:0 21 6 35 32 12 14
- 将这些数字相加:0+21+6+35+32+12+14 = 120
- 将此和除以模数 11:120:11 = 10 余数 10
- 11减去余数:11-10 = 1
- 在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
案例。