1

テキスト ファイルから単語リストを作成する必要があります。このリストはハングマン コードで使用される予定であり、リストから次のものを除外する必要があります。

  1. 重複した単語
  2. 5文字未満の単語
  3. 部分文字列として「xx」を含む単語
  4. 大文字を含む単語

次に、すべての単語がそれぞれの行に表示されるように、単語リストをファイルに出力する必要があります。プログラムは、最終リストの単語数も出力する必要があります。

これは私が持っているものですが、正しく機能していません。

def MakeWordList():
    infile=open(('possible.rtf'),'r')
    whole = infile.readlines()
    infile.close()

    L=[]
    for line in whole:
        word= line.split(' ')
        if word not in L:
            L.append(word)
            if len(word) in range(5,100):
                L.append(word)
                if not word.endswith('xx'):
                    L.append(word)
                    if word == word.lower():
                        L.append(word)
    print L

MakeWordList()
4

3 に答える 3

2

このコードで単語を何度も追加しています。
実際には単語をまったく除外していません。渡された の数に応じて異なる数の単語を追加するだけifです。

すべてのif's を結合する必要があります:

if word not in L and len(word) >= 5 and not 'xx' in word and word.islower():
    L.append(word)

または、読みやすくしたい場合は、それらを分割できます。

    if word not in L and len(word) >= 5:
        if not 'xx' in word and word.islower():
            L.append(word)

ただし、それぞれの後に追加しないでください。

于 2013-04-09T01:10:52.057 に答える
0

改善されたコード:

def MakeWordList():
    with open('possible.rtf','r') as f:
        data = f.read()
    return set([word for word in data if len(word) >= 5 and word.islower() and not 'xx' in word])

set(_iterable_)重複のないセット タイプのオブジェクトを返します (すべてのset項目が一意である必要があります)。[word for word...]単純なリストを作成するより短い方法であるリスト内包表記です。「データ」内のすべての単語を反復処理できます (これは、各単語が別の行にあることを前提としています)。if len(word) >= 5 and word.islower() and not 'xx' in word最後の 3 つの要件を満たします (5 文字以上で、小文字のみを使用し、'xx' を含めることはできません)。

于 2013-04-09T01:46:08.923 に答える