quelqu'un peut-il s'il vous plaît expliquer ce qui ne va pas avec ce code?
str1='"xxx"'
print str1
if str1[:1].startswith('"'):
if str1[:-1].endswith('"'):
print "hi"
else:
print "condition fails"
else:
print "bye"
Le résultat obtenu est:
Condition fails
mais je m'attendais à imprimer hi
à la place.
Lorsque vous dites [:-1]
vous supprimez le dernier élément. Au lieu de couper la chaîne, vous pouvez appliquer startswith
et endswith
sur l'objet chaîne lui-même, comme ceci
if str1.startswith('"') and str1.endswith('"'):
Donc tout le programme devient comme ça
>>> str1 = '"xxx"'
>>> if str1.startswith('"') and str1.endswith('"'):
... print "hi"
>>> else:
... print "condition fails"
...
hi
Encore plus simple, avec une expression conditionnelle, comme celle-ci
>>> print("hi" if str1.startswith('"') and str1.endswith('"') else "fails")
hi
Vous devriez soit utiliser
if str1[0] == '"' and str1[-1] == '"'
ou
if str1.startswith('"') and str1.endswith('"')
mais ne coupez pas et vérifiez début/fin avec ensemble, sinon vous couperez ce que vous cherchez ...
Vous testez par rapport à la chaîne moins le dernier caractère:
>>> '"xxx"'[:-1]
'"xxx'
Notez que le dernier caractère, le "
, ne fait pas partie de la sortie de la tranche.
Je pense que tu voulais juste tester contre le dernier caractère; utilisez [-1:]
pour ne découper que le dernier élément.
Cependant, il n'est pas nécessaire de couper ici; utilisez simplement str.startswith()
et str.endswith()
directement.
Lorsque vous définissez une variable de chaîne, elle n'enregistre pas les guillemets, ils font partie de sa définition. vous n'avez donc pas besoin d'utiliser: 1