请问我的代码输出为什么是no不是yes

代码如下

a='abcba'
n=5
flag=0
for i in range(len(a)+1-n):
    if(a[i:i+n]==a[i+n-len(a)-1:i-len(a):-1]):
        print('YES')
        flag=1
if(flag==0):
    print('NO')

题主,你这样写逻辑不太对喔~
len(a)=5,所以range(len(a)+1-n)即range(1),所以循环中i=0
if(a[i:i+n]==a[i+n-len(a)-1:i-len(a):-1])即if(a[0:5]==a[-1:-5:-1])
此处的a[-1:-5:-1]中的-5,并不包括-5,可以修改为:

a='abcba'
n=5
flag=0
for i in range(len(a)+1-n):
    if(a[i:i+n]==a[i+n-len(a)-1::-1]):
        print('YES')
        flag=1
if(flag==0):
    print('NO')

你这个for循环只执行一次。i=0时,a[i:i+n]abcba,但a[i+n-len(a)-1:i-len(a):-1]abcb,两者不相等,所以不会输出yes。

看下程序的运行过程

a = 'abcba'
n = 5
flag = 0
for i in range(len(a) + 1 - n):
    print(i)#0
    print(i + n - len(a) - 1)#-1
    print(i - len(a))#-5
    print(a[i + n - len(a) - 1:i - len(a):-1])#abcb
    print(a[i:i + n])#abcba
    if (a[i:i + n] == a[i + n - len(a) - 1:i - len(a):-1]):
        print('YES')
        flag = 1
if (flag == 0):
    print('NO')