PAT 乙级中文(Basic Level) Practice
文章平均质量分 79
PAT乙级中文的训练答案,希望能帮助到你,尽快会在一周内更新完毕
XiLong Liu
技术栈 Vue3\Rust\linux图形图像子系统\xwayland-glamor。
展开
-
Python3 PAT (Basic Level) 【乙级】 -1043 输出PATest
原题链接 题目思路: 1.字符串处理,去掉PATest以外字符 2.建立集合,计算所有PATest字符数量 3.按顺序输出字符 import re if __name__ == '__main__': sentence = input() sentence=''.join(re.split(r'[^PATest]', sentence)) set_sentence={'P':0,"A":0,"T":0,'e':0,'s':0,'t':0} for x in sentence:原创 2020-09-09 23:58:50 · 118 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 -1042 字符统计
原题链接 题目思路: 1.将字符串中字母全变为大写 2.提取字符中所有字母 3.将字符串纳入集合set_sentence中,以避免重复检索 4.根据集合开始遍历,利用str.count()查 import re sentence = input() sentence=sentence.upper() sentence=''.join(re.split(r'[^A-Za-z]', sentence))#利用正则表达式,把 set_sentence=set(sentence)#创建集合 max_num=0 re原创 2020-09-09 23:19:19 · 171 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 -1041 考试座位号
原题链接 题目思路 将学生序号做成字典即可 dic[试机号] = {“学号 考试座位号”} n = int(input()) students={} result=[] for i in range(n): id,sj,ks=input().split() students[sj]=id+' '+ks m = int(input()) sj = input().split() for s in sj: p原创 2020-09-08 21:36:54 · 114 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 -1038 统计同成绩学生
原题链接 存在超时,但是利用python函数可以写的非常简洁 n=int(input()) grades = input().split() find_grades = input().split() find_grades=find_grades[1:] result=[] for x in find_grades: result.append(str(grades.count(x))) print(" ".join(result)) ...原创 2020-09-08 01:00:47 · 111 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 -1036 跟奥巴马一起编程
原题链接 这里注意一定不能用round函数进行舍入,涉及银行家算法。 后续算法题要记一下四舍五入的写法。 n,c=input().split() m=int(int(n)*0.5 + 0.5) width='' lenth='' for i in range(int(n)): width+=c lenth=c+width[1:-1].replace(c," ")+c for j in range(m): if j==0原创 2020-09-08 00:47:05 · 99 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 -1032 挖掘机技术哪家强
原题链接 ps:一下三种代码均在最后一个检查点超时,估计也是python特性了,希望有能力的大佬能交流个不超时的方法。 最后 第一种和第二种 分别是对字典的一种排序,有兴趣的可以看一看。 n = int(input()) grade = {} for i in range(n): number, fen = input().split() if number not in grade.keys(): grade[number]原创 2020-09-08 00:03:01 · 190 阅读 · 5 评论 -
Python3 PAT (Basic Level) 【乙级】 -1031 查验身份证
原题链接 题目思路: 主要是规范格式,注意代码段中注释的state参数,会影响第三个测试点。 M =[1,0,'X', 9 ,8, 7, 6, 5, 4 ,3 ,2] #检测值 weight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]#权重 n=int(input()) result=[] #有问题的身份id列表 for i in range(n): check = 0 id = input()原创 2020-09-07 23:06:37 · 164 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 -1029 旧键盘
原题链接 本题因为要求要按发现顺序输出,所以不能使用集合。 a = input() b = input() #全部转换为大写 a = a.upper() b = b.upper() result=[] #判定a中字符b中是否存在 for x in a: if x not in b and x not in result: result.append(x) for i in result: print(i,end='') ...原创 2020-09-07 20:50:10 · 122 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 -1028 人口普查
原题链接 最后一个检查点超时 这里有一个小发现,python可以直接比较日期,真的顶。 n=int(input()) count=0 oldest_name = '' youngest_name = '' oldest_date = '2014/09/06' youngest_date = '1814/09/06' for i in range(n): name,date = input().split() if date原创 2020-09-07 19:41:51 · 110 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 -1023 组个最小数
原题链接 题目思路如代码段的注释所写,本题唯一要注意的是,不能以print(str(i),end=’’)代码中的代替result=result+str(i),必须返回一个对象值,不然会报非零返回。 count = input().split() result='' for i in range(10): count[i]= int(count[i]) if count[0] == 0: #------当0个数为0直接按从小到大顺序输出------ for i in range(1,10)原创 2020-09-07 19:41:31 · 67 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1021 个位数统计
原题链接 count = [0,0,0,0,0,0,0,0,0,0] #预备好0~9计数列表 n=int(input()) for i in str(n): #遍历字符串 并进行计数 count[int(i)]+=1 for i in range(10): if count[i]!=0: print(str(i)+":"+str(count[i]))原创 2020-09-07 19:41:07 · 74 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1018 锤子剪刀布(18)
原题链接 思路, 这里的代码 我用字典做的,个人认为对python初学的朋友,应该是有帮助的,相信大家一路走来用列表都用吐了。美中不足的是最后一个检查点我是超时的,望后续满分同学不吝赐教,非常感谢。 A = {'B':0,'C':0,'J':0} #B胜 、 C胜 、 J胜 B = {'B':0,'C':0,'J':0} def rule(a, b, tie_num): if a==b: tie_num+=1 elif a == 'J' and b== 'C' :原创 2020-09-02 22:56:34 · 129 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1017 A除以B
原题链接 没什么具体要说的 注意Q=A//B 取整除就行了 A, B = input().split() A = int(A) B = int(B) R = A % B Q = A//B print(Q, R)原创 2020-08-25 16:49:18 · 79 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1016 部分A+B
原题链接 做题思路:题目不难,利用count函数,数一数A中有几个Da,然后用循环以字符的形式直接拼接在一起,然后转换成数字就行,注意如果是空字符串,将它设为0即可 A,Da,B,Db=input().split() Pa='' Pb='' for x in range(str(A).count(Da)): Pa+=Da for x in range(str(B).count(Db)): Pb += Db if Pa=='': Pa='0' if Pb=='': Pb='0原创 2020-08-25 16:32:36 · 109 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1011 A+B 和 C
原题链接 n = int(input()) for i in range(n): a,b,c = input().split() a=int(a) b=int(b) c=int(c) if a+b >c: print("Case #"+str(i+1)+": true") else: print("Case #" + str(i + 1) +原创 2020-08-25 10:35:46 · 78 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】题目索引汇总贴(更新中)
最近打算复习和强化自己的Python,本贴会尽量在三天内更新完成。 感谢你的浏览,希望能对你的学习起到帮助。 如果你有疑问或者更好的建议,可以留言讨论,大家共同进步。 标号 标题 1001 害死人不偿命的(3n+1)猜想 (15分) 1002 写出这个数 (20分) 1003 我要通过! (20分) 1004 成绩排名 (20分) 1005 继续(3n+1)猜想 (25分) 1006 换个格式输出整数 (15分) 1007 素数对猜想 (20分) 1008 数组原创 2020-08-25 10:28:08 · 171 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1003 我要通过
原题链接 解题思路: 相信很多朋友和我一样,在读懂题意上就碰了一鼻子灰。我会尽量细则的讲解题意,题意如下。 1.字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;(这个很好理解,不多赘述) 2.任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串; (这则内容实际非常关键,它透露了两个信息,"PAT"是通过的,“aPATb” 中左右两边的字符串a与字符串b中 “A” 字符的数量相等时,是通过的) 3.如果 aPbTc 是通过的,那么原创 2020-08-25 05:24:41 · 203 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1010 一元多项式求导
原题链接 解题思路:首先,我在理解题目上,就遇到了困难。 本题要求输入 一串偶数数列,以表示多项式非零项系数和指数 也就是说 以 a b c d…的数列来表示 a*x^b + c *x^d … 然后输出每一项 导数的系数与指数。 弄清楚了输入,输出,题目本身就不难了,将列表中的数两个两个的处理即可。 注意遇到指数为零的项直接忽略跳过。 再一个需要注意的就是"零多项式"要输出为 “0 0”。 小技巧分享:如果有阅读借鉴过我前面几题做法的朋友们,一定都熟悉我是怎么处理结尾不能有空格。现在我建议大家使原创 2020-08-25 03:07:29 · 168 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1009 说反话
原题链接 通过reversed进行反序遍历就行了,注意调整语句格式,以免不能过。 注意:reversed()返回的是一个迭代器对象。所以不能写成 a=reversed(a)的形式。 这里对上面那句话仍然有疑问的可以百度: “object of type ‘list_reverseiterator’ has no len()”这个报错 sentence = input().split() result = '' for word in reversed(sentence): if result!=""原创 2020-08-25 01:28:13 · 137 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1008 数组元素循环右移问题
原题链接 这一题思路非常简单。核心代码就一句话:num = num[n-m:]+num[:n-m] 即 将 1 2 3 4 | 5 6 中 的56 “加” 到 1234 的前面即可 n,m = input().split() n=int(n) m=int(m) num = list(input().split()) num = num[n-m:]+num[:n-m] for x in range(len(num)): if x != len(num)-1: prin原创 2020-08-25 01:12:38 · 99 阅读 · 2 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1007 素数对猜想
原题链接 import math def tell_prime_number(number): if number > 1: for i in range(2, int(math.sqrt(number)+1)): if (number % i) == 0: return False else: return True num = int(input()) count = 0 f原创 2020-08-25 00:47:24 · 145 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1006 换个格式输出整数
原题链接 注意 print(’ ‘,end=’ ')的使用就行了 以下这个博客写的非常好,大家可以学习一下。 PTA中提交Python3程序的一些套路 num=int(input()) for i in range(int(num/100)): print("B",end='') num=num%100 for i in range(int(num/10)): print("S",end='') num=num%10 for i in range(num): print(i+1,en原创 2020-08-25 00:14:40 · 84 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1005 继续(3n+1)猜想
原题链接 解体思路:这一题非常适合用集合运算来做,设我们一开始输入的数字集合为y,因为通过关键数运算出来的数字所组成的集合x,y-x 即 我们所需要的关键数。 这一题我的各种类型转换,我认为应该是冗余了,希望各位大牛若有更好的解法,务必留言以供学习,非常感谢。 n = int(input()) s = set() num = set(input().split()) for a in num: a = int(a) while a != 1: if a % 2 == 0:原创 2020-08-24 23:59:19 · 481 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1004 成绩排名
原题链接 我这一题存在一定遗憾,方法很暴力很low,每输入一个,就比较一次,记录最高分与最低分。然后直接暴力检索事先准备好的 list表,找到对应分数,然后输出。希望有大牛能写出更优雅的解法,请不吝赐教,非常感谢! num = int(input()) list1 = [] high = 0 low = 100 high_student='' low_student='' for x in range(num) : x = list(input().split()) if int(x[2])原创 2020-08-24 22:55:02 · 136 阅读 · 0 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1002 写出这个数
原题链接 算法题除了了逻辑。处理输入输出也很重要。原题要求最后一个字符串后不能有空格。这里我是做判断处理,算是我个人的一个习惯,有更简洁写法的,请不吝赐教,非常感谢。 a=list(input()) list =['ling','yi','er','san','si','wu','liu','qi','ba','jiu'] sum = 0 sum = int(sum) for x in a: x = int (x) sum = sum + x sum=str(sum) for num in原创 2020-08-24 20:58:36 · 140 阅读 · 1 评论 -
Python3 PAT (Basic Level) 【乙级】 - 1001害死人不偿命的(3n+1)猜想
原题链接 判断奇偶性,根据判断结果分类处理。 a = input() a =int(a) count = 0 while a != 1: if a%2==0: a=a/2 count = count +1 else : a=3*a+1 a=a/2 count = count +1 print(count)原创 2020-08-24 20:54:37 · 123 阅读 · 0 评论