-1

ツイートのハッシュタグを強調表示するプログラムを作成しようとしています。ツイートに新しい行が含まれているとプログラムは失敗しますが、それが 1 行だけであればプログラムは機能します。データに改行があると失敗するのはなぜですか? エラーが発生しますindex out of range

def highlight(data):
    for word in data.split(" "):
        if word[0] == "#":
            print "<FONT COLOR=\"brown\">" + word + "</FONT>",
        else:
            print word,

highlight("""hello world this
    is a #test that i am #writing.""")
4

4 に答える 4

2

このコードは動作します:

def highlight(data):
    for word in data.split():
        if word[0] == "#":
            print "<FONT COLOR=\"brown\">" + word + "</FONT>",
        else:
            print word,

highlight("""hello world this
    is a #test that i am #writing.""")

これにより、テキストが改行と空白で分割されます。

于 2013-10-28T01:22:53.410 に答える
1

改行はsをdata.split(" ")含むようにするため''です。あなたはその最初の要素を取得しようとしています。

In [4]: ''[0]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-4-6f70a0cbdc74> in <module>()
----> 1 [][0]

IndexError: list index out of range

In [6]: a = """
   ...: hello world this
   ...:     is a #test that i am #writing."""

In [7]: a.split(' ')
Out[7]:
['\nhello',
 'world',
 'this\n',
 '',
 '',
 '',
 'is',
 'a',
 '#test',
 'that',
 'i',
 'am',
 '#writing.']

に変更するだけでdata.split()問題ありません。

于 2013-10-28T01:23:06.490 に答える
1

ツイートの 2 行目の先頭には、4 つの空白があります。

"""test
    other_test""" == "test\n    other_test"

したがって、その文字列を空白で分割すると、3 つの空の文字列が得られます。

>>> "test\n    other_test".split(" ")
['test\n', '', '', '', 'other_test']

string の最初の文字にアクセスしようとすると''、文字インデックスが範囲外になります。

このエラーを回避するにdata.split()は、現在の文字列が空かどうかを使用またはチェックします。

于 2013-10-28T01:24:02.217 に答える
1

最初に「単語」があることを確認してください。

def highlight(data):
    for word in data.split(" "):
        if word and word[0] == "#":
            print "<FONT COLOR=\"brown\">" + word + "</FONT>",
        else:
            print word,

今後質問する場合は、エラー メッセージの全文を含めると役立ちます。

于 2013-10-28T01:24:39.410 に答える