Python Überprüfen des ersten und letzten Zeichens einer Zeichenfolge

74

Kann jemand bitte erklären, was mit diesem Code falsch ist?

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

Die Ausgabe, die ich bekam, ist:

Condition fails

aber ich habe erwartet, dass es histattdessen gedruckt wird.

Chuvi
quelle

Antworten:

114

Wenn Sie sagen, dass [:-1]Sie das letzte Element entfernen. Statt die Zeichenfolge des Schneidens, können Sie sich bewerben startswithund endswithauf dem String - Objekt selbst wie folgt

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

So wird das ganze Programm so

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

Noch einfacher, mit einem bedingten Ausdruck wie diesem

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

Sie sollten entweder verwenden

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

oder

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

aber nicht in Scheiben schneiden und Start mit / Ende mit prüfen, sonst schneiden Sie ab, wonach Sie suchen ...

Roberto
quelle
1
Sie verwenden versehentlich = anstelle von ==.
Cody Piersall
16

Sie testen gegen die Zeichenfolge abzüglich des letzten Zeichens :

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

Beachten Sie, dass das letzte Zeichen, das ", nicht Teil der Ausgabe des Slice ist.

Ich denke, Sie wollten nur gegen den letzten Charakter testen. Verwenden Sie [-1:]diese Option, um nur das letzte Element zu schneiden.

Es besteht jedoch keine Notwendigkeit, hier zu schneiden; einfach benutzen str.startswith()und str.endswith()direkt.

Martijn Pieters
quelle
0

Wenn Sie eine Zeichenfolgenvariable festlegen, werden keine Anführungszeichen gespeichert, sondern sie sind Teil ihrer Definition. Sie müssen also nicht Folgendes verwenden: 1

Farhadix
quelle