1003 我要通过 pta 重打

一.题目
在这里插入图片描述
二.题目分析
这道题太坑爹了,首先是对第三个条件理解错误导致写了一堆错的代码,其次是输入例子和输出例子不对应,判断某个数据是否是纯数据也折腾了好久,后来发现是题目理解错了。最后弄完结果代码输出有问题。再者是在自己的编辑器上没问题,输出到pta上测试,测试又失败了。

num=int(input())
for p in range(num):
 text = input("")
 timep,timet,num,nump,numt=0,0,0,-1,-1
 for p in text:
       num+=1
       if p =='p':
        timep+=1
        nump=num
       if p =='t':
        timep+=1
        numt=num
       if p not in ['P','T','A']:
          print('NO')
          break
       if timet >1 or timep>1:
          print('NO')
          break
       if nump>numt and timep>1 and timet>1:
       	  print('NO')
       	  break
 else:
       if text[0]=='P' and text[-1]=='T' and text[1] !=' ' and text!='PT:
                print('YES')
       elif 'PT' in text:
                print('NO')
       else:
           text=text.replace('P'," ")
           text=text.replace('T',' ')
           text=text.split()
           if text[2]==text[0]*len(text[1]):
               print('YES')
           else:
               print('NO')

代码打完了在pta上测试是部分正确,我也找不到bug在哪,就此搁置。
另附他人代码,提供参考


def test(a):
    x = -1
    y = -1
    for i in range(len(a)):#找出P,T的位置
        if (a[i]=='P'):
            x = i
        if (a[i]=='T'):
            y = i
    if (x==-1 or y==-1):#如果找不到P,T则返回0
        return 0
    if (x>y):#P在T的后面,返回0
        return 0
    if (y==x+1):#P,T之间没有字符,返回0
        return 0
    if (x!=0):#字符串不以P开头
        b = a[0:x]
    else:#字符串以P开头
        b = []
    c = a[x+1:y]
    if (y!=len(a)-1):#字符串不以T结尾
        d = a[y+1:len(a)]
    else:#字符串以T结尾
        d = []
    for i in b:#判断各个分段是否是字符A组成
        if (i!='A'):
            return 0
    for i in c:
        if (i!='A'):
            return 0
    for i in d:
        if (i!='A'):
            return 0
    if (d==b*len(c)):#条件判断
        return 1
    else:
        return 0
 
n = input()
for i in range(int(n)):
    s = input()
    if (test(s)==1):
        print('YES')
    else:
        print('NO')

初步观察是PT前后空格问题引出的错误。
本文的重点是re库的用法。
在这里插入图片描述
在这里插入图片描述
这个函数中亮点是re.split()函数的用法以及if re.match()的打法,值得学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值