web-dev-qa-db-fra.com

Python Vérification du premier et du dernier caractère d'une chaîne

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.

58
Chuvi

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
95
thefourtheye

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 ...

25
Roberto

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.

15
Martijn Pieters

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

0
Farhadix