Подтвердить что ты не робот

Python Проверка строки первого и последнего символов

может кто-нибудь объяснить, что не так с этим кодом?

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

Полученный результат:

Condition fails

но я ожидал, что он напечатает hi вместо этого.

4b9b3361

Ответ 1

Когда вы говорите [:-1], вы удаляете последний элемент. Вместо того, чтобы нарезать строку, вы можете применить startswith и endswith к самому объекту строки, подобному этому

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

Итак, вся программа становится такой

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

Еще проще, с условным выражением, вроде этого

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

Ответ 2

Вы должны либо использовать

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

или

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

но не срезать и проверить startswith/endswith вместе, иначе вы отрезаете то, что ищете.

Ответ 3

Вы тестируете строку минус последний символ:

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

Обратите внимание, что последний символ " не является частью вывода среза.

Я думаю, вы хотели просто протестировать против последнего персонажа; используйте [-1:] для среза только для последнего элемента.

Однако здесь нет необходимости срезать; просто используйте str.startswith() и str.endswith() напрямую.

Ответ 4

Когда вы устанавливаете строковую переменную, она не сохраняет кавычки, они являются частью определения. поэтому вам не нужно использовать: 1