Python Comprobando el primer y último carácter de una cadena

¿Alguien puede explicar qué está mal con este código?

str1='"xxx"' print str1 if str1[:1].startswith('"'): if str1[:-1].endswith('"'): print "hi" else: print "condition fails" else: print "bye" 

La salida que tengo es:

 Condition fails 

pero esperaba que se imprima hi lugar.

Cuando dices [:-1] estás eliminando el último elemento. En lugar de cortar la cadena, puede aplicar el startswith y el endswith con el objeto de la cadena de esta manera

 if str1.startswith('"') and str1.endswith('"'): 

Así que todo el progtwig se vuelve así.

 >>> str1 = '"xxx"' >>> if str1.startswith('"') and str1.endswith('"'): ... print "hi" >>> else: ... print "condition fails" ... hi 

Aún más simple, con una expresión condicional, como esta.

 >>> print("hi" if str1.startswith('"') and str1.endswith('"') else "fails") hi 

Deberías usar

 if str1[0] == '"' and str1[-1] == '"' 

o

 if str1.startswith('"') and str1.endswith('"') 

pero no corte y verifique los comienzos con / terminados juntos, de lo contrario, cortará lo que está buscando …

Estás probando contra la cadena menos el último carácter :

 >>> '"xxx"'[:-1] '"xxx' 

Observe cómo el último carácter, el " , no forma parte de la salida del sector.

Creo que solo querías probar contra el último personaje; use [-1:] para cortar solo el último elemento.

Sin embargo, no hay necesidad de cortar aquí; simplemente use str.startswith() y str.endswith() directamente.

Cuando establece una variable de cadena, no guarda las comillas, son parte de su definición. por lo que no necesita usar: 1