原题链接:PTA | 程序设计类实验辅助教学平台
参考资料:
【非零返回问题解决】PAT 乙级 1052 卖个萌 Python实现_pat萌萌哒python-CSDN博客
1052 卖个萌python3全部通过解决思路_1052 卖个萌 python-CSDN博客
PAT乙级真题1052 || 卖个萌(详解,C/C++示例,测试点分析)_1052 卖个萌-CSDN博客
Tips:以下Python代码仅个人理解,非最优算法,仅供参考!多学习其他大佬的AC代码!
问题说明:
1、非零返回:无法识别unicode,和平台的编译器有关系,既然不能读入,那么输出也会有限制,直接把data解码成str,最后结果也有问题,最后只能把bytes通过sys.stdin.buffer.write()输出。
题中K和随后K行可以用int装载正常使用~
2、坑点:主要是测试点1和2的部分。注意输入的序号可能有等于0的情况(如测试点1),也有小于0的情况(如测试点2)。
3、优化:应该可以用内置函数emulate,start=1直接对应值,不然每次索引引用都得-1,题目只给出符号在相应集合中的序号(从 1 开始),数字间以空格分隔。
import sys
def fuhaoji(s):
tmp = []
sta = None # 初始化sta为None,以便在找不到b'['时能够检测
for i in range(len(s)):
if s[i] == ord('['):
sta = i + 1 # 更新sta为当前b'[b'之后的位置
elif s[i] == ord(']'): # 确保sta已被定义
tmp.append(s[sta:i])
return tmp
def emo(k, shou, yan, kou):
for i in range(k):
ls = list(map(int, sys.stdin.readline().split()))
try:
if len(ls) != 5:
raise IndexError
for j in ls:
if j <= 0:
raise IndexError
# 减1以匹配Python的索引
s = shou[ls[0]-1] + b'(' + yan[ls[1]-1] + kou[ls[2]-1] + yan[ls[3]-1] + b')'+ shou[ls[4]-1] + b'\n'
except IndexError: # 只捕获索引错误
s = b'Are you kidding me? @\/@\n'
sys.stdout.buffer.write(s)
def main():
shou = fuhaoji(sys.stdin.buffer.readline().strip())
yan = fuhaoji(sys.stdin.buffer.readline().strip())
kou = fuhaoji(sys.stdin.buffer.readline().strip())
k = int(sys.stdin.readline())
emo(k, shou, yan, kou)
main()