一.题目
二.题目分析
这道题太坑爹了,首先是对第三个条件理解错误导致写了一堆错的代码,其次是输入例子和输出例子不对应,判断某个数据是否是纯数据也折腾了好久,后来发现是题目理解错了。最后弄完结果代码输出有问题。再者是在自己的编辑器上没问题,输出到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()的打法,值得学习