python-PTA刷题
这周解决了之前做错的两个题之后PTA上的python就全部刷完啦
3-2 验证身份
题目:
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
Z:0 1 2 3 4 5 6 7 8 9 10M:1 0 X 9 8 7 6 5 4 3 2
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。
思路:之前没有解决这个题 现在重新做 一开始老是答案错误 后来逐个打印纠错才发现权重就是给的那么多数字 不是需要让他们之和等于1 (初中思维吗这是)当初也没想到要是让权重之和等于1的话除以11的余数不都是这个数本身吗…当时没想到 甚至因为想到可能有小数 还细心地发现了sum 应该= 0.0 不过根本就不是小数啦
后来解决了这个问题 但是测试点1会报错 找问题找了半天
就换了种方式写 就正确了:
n = int(input())
id_list = []
weight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
M_list = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
num = 0
for i in range(n):
id_list.append(input())
for i in id_list:
if i[0:17].isdigit():
# 如果前17位全是数字
sum1 = 0
for k in range(17):
sum1 += int(i[k]) * weight[k]
#print(sum1)
z = sum1 % 11
if i[-1] != M_list[z]:
#print(z)
print(i)
num += 1
else:
print(i)
num += 1
if num == 0:
print('All passed')
做出来之后发现也没有那么难嘛( ̄▽ ̄)"
但是还是不知道之前这样写为啥测试点1会是答案错误:
n = int(input())
id_list = []
weight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
# z_list = ['0','1','2','3','4','5','6','7','8','9','10']
M_list = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
num = 0
for i in range(n):
id_list.append(input())
for i in id_list:
for j in i[:17]:
if j.isalpha():
print(i)
num += 1
id_list.remove(i)
for i in id_list:
sum1 = 0.0
for j in range(17):
sum1 += float(int(i[j]) * weight[j])
#print(sum1)
z = int(sum1) % 11
if i[17] != M_list[z]:
#print(z)
print(i)
num += 1
if num == 0:
print('All passed')
4-21 判断上三角矩阵
题目:
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。
之前做错的原因在于找下三角下标的循环部分写错:
(虽然不知道之前做的时候为什么一直找不出来错在哪儿)
for j in range(n-1):
for content in range((j+1) * n, (j+1) * n + j):
改正后:
num_matrix = int(input())
n1 = 0
#矩阵的个数
while True:
n1 += 1
n = int(input())
#矩阵的秩
list1 = list(map(int, input().split()))
while len(list1) < n * n:
list2 = list(map(int, input().split()))
list1.extend(list2)
list2.clear()
num0 = 0
#num0表示下三角中0的数量
for j in range(1,n):
#print(j)
for content in range(j * n, j * n + j):
# 可以找出规律下三角的数下标为(j * n, j * n + j) 如4行矩阵位于下三角的数的下标:4,8,9,12,13,14
#print(content)
if list1[content] != 0:
num0 += 1
if num0 == 0:
print('YES')
else:
print('NO')
list1.clear()
if n1 >= num_matrix:
break