誰でもこのコードの何が問題なのか説明できますか?
str1='"xxx"'
print str1
if str1[:1].startswith('"'):
if str1[:-1].endswith('"'):
print "hi"
else:
print "condition fails"
else:
print "bye"
私が得た出力は次のとおりです。
Condition fails
しかし、代わりにhi
を出力することを期待していました。
[:-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
どちらかを使用する必要があります
if str1[0] == '"' and str1[-1] == '"'
または
if str1.startswith('"') and str1.endswith('"')
ただし、startswith/endswithを一緒にスライスしてチェックすることはできません。そうしないと、探しているものが切り取られます。
あなたは文字列に対してテストしています最後の文字を除く:
>>> '"xxx"'[:-1]
'"xxx'
最後の文字である"
は、スライスの出力の一部ではないことに注意してください。
最後のキャラクターに対してテストしたかっただけだと思う。 [-1:]
を使用して、最後の要素だけをスライスします。
ただし、ここでスライスする必要はありません。 str.startswith()
とstr.endswith()
を直接使用するだけです。
文字列変数を設定すると、その引用符は保存されず、定義の一部になります。だから、使用する必要はありません:1