¿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