web-dev-qa-db-ja.com

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を出力することを期待していました。

54
Chuvi

[:-1]と言うときは、最後の要素を取り除きます。文字列をスライスする代わりに、startswithendswithをこのように文字列オブジェクト自体に適用できます

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

どちらかを使用する必要があります

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

または

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

ただし、startswith/endswithを一緒にスライスしてチェックすることはできません。そうしないと、探しているものが切り取られます。

22
Roberto

あなたは文字列に対してテストしています最後の文字を除く

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

最後の文字である"は、スライスの出力の一部ではないことに注意してください。

最後のキャラクターに対してテストしたかっただけだと思う​​。 [-1:]を使用して、最後の要素だけをスライスします。

ただし、ここでスライスする必要はありません。 str.startswith()str.endswith()を直接使用するだけです。

15
Martijn Pieters

文字列変数を設定すると、その引用符は保存されず、定義の一部になります。だから、使用する必要はありません:1

0
Farhadix