1003 我要通过! (20 分) python版答案(全部代码都有注释)

写这个代码我真的费了好大功夫,代码注释写的很详细,功能其实也很完整,具体咋理解题我就不写了,兄弟们自己看看吧。一定要把题读明白!!!!!!!!!

a = eval(input())#a拿来输入字符串个数
c=[]#建一个空列表存字符串
for i in range(a):
    dd=input()
    c.append(dd)#把字符串都存进去
for i in range(a):
    b =c[i]
    stop=False#写一个flag用于如果字符串有除了P A T 以外字符,直接输出停止
    for j in range(len(b)):
        if b[j] !="P" and b[j] !="A" and b[j] !="T":
            print("NO")
            stop=True#这个其实很关键哈,因为要跳出两层循环而并非只是对字符串每一个字符的遍历
            break#break先终止对字符串的变量
    if stop==True:
        continue#再用continue跳出对这个字符串的判断,因为已经要输出no了,直接开始循环下一个,用continue
    b=list(b)#把单个字符串转成列表才能执行下边的函数
    if 'P' not in b or 'A' not in b or 'T' not in b:
        print("NO")
        continue#这点很关键哈,如果字符串里没有p a t 中的某个,就不能执行下标的三条命令,从而就会报错,呜呜呜本来都写好过了好久才发现
    P=[i for i, x in enumerate(b) if x == 'P']#这仨是把字符串中p a t 的下标集合找出来
    A = [i for i, x in enumerate(b) if x == 'A']
    T = [i for i, x in enumerate(b) if x == 'T']
    A1 = b.index('P')
    A2 = b.index('T')
    A3 = b.index('A')#找出下标,其实有点多余哈这三句
    d1=0#d1是p之前a的个数
    d2=0#d2是p t之间a的个数
    d3=0#d3是t之后a的个数
    if len(P)>1 or len(T)>1 or A1>A2  :#P T 个数超过1,直接结束
        print('NO')
        continue
    for i in range(len(A)):###########这个for循环直接把'   P   T  '这样的字符串三个位置的A的个数找到
        if A[i]<A1:
            d1=d1+1
        elif A[i]>A1 and A[i]<A2:
            d2=d2+1
        elif A[i]>A2:
            d3=d3+1
    if (d1==d3 and d2==1) or (d1*d2==d3):#判断条件(d1==d3 and d2==1)是第二个要求,(d1*d2==d3)是第三个要求,这个建议自己理解,理解不透彻解题解不明白的
        print('YES')
    else:
        print('NO')

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值