78

誰かがこのコードの何が問題なのか説明してもらえますか?

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

私が得た出力は次のとおりです。

Condition fails

hiしかし、代わりに印刷することを期待していました。

4

4 に答える 4

119

[:-1]最後の要素を削除していると言うとき。文字列をスライスする代わりに、このように文字列オブジェクト自体にstartswithandを適用できます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
于 2013-11-13T13:06:26.527 に答える
33

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

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

また

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

しかし、スライスしてstartswith/endswithを一緒にチェックしないでください。そうしないと、探しているものを切り取ってしまいます...

于 2013-11-13T13:08:56.660 に答える
16

最後の文字を引いた文字列に対してテストしています:

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

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

最後の文字に対してテストしたかっただけだと思います。[-1:]最後の要素だけをスライスするために使用します。

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

于 2013-11-13T13:06:25.007 に答える
0

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

于 2013-11-13T13:08:06.967 に答える