【PAT_Python解 AC,解决非零返回编码问题】1052 卖个萌

原题链接:PTA | 程序设计类实验辅助教学平台

参考资料:

【非零返回问题解决】PAT 乙级 1052 卖个萌 Python实现_pat萌萌哒python-CSDN博客

1052 卖个萌python3全部通过解决思路_1052 卖个萌 python-CSDN博客

PAT乙级真题1052 || 卖个萌(详解,C/C++示例,测试点分析)_1052 卖个萌-CSDN博客

Python中的异常处理raise介绍_no active exception to reraise-CSDN博客

Python3 bytes和bytearray_python3 bytes 与bytearray-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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新时代先锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值