知识点:
1.这里的加权求和就是指每一位乘以题目给的对应位置上的数字
在python中,对于int('10')这样的转换而来的直接是整数10,但是在c语言中会转换成ASCII值,所以要特别注意
2.本题中有两种情况是错误的,就是要直接输出
①前十六位不全为数字:这里用到了对字符串的切片(0:-1 0可以取到,-1表示最后一个,不能取到,所以这里只能取出前16位),不过注意字符串是不可变数据类型奥,切片可以(相当于生成一个新的字符串),修改不可以。还用到了isdigit()内置函数判断是否是数字(isalnum()判断是否全是字母,isalpha()判断是否全是数字或字母)
②最后一位与计算出来的结果不符合
正确代码:
N = int(input())
quan_zhong = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
arr = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
flag = 0
for i in range(N):
string = input()
sum1 = 0
if string[0:-1].isdigit():
for j in range(17):
sum1 += int(string[j]) * quan_zhong[j]
z = sum1 % 11
if arr[z] != string[17]:
print(string)
flag = 1
else:
print(string)
flag = 1
if flag == 0:
print("All passed")