0

こんにちは、新人である Python について質問があります。

小さな辞書のように、アルファベット順に単語のリスト(約23000)を含むテキストファイルがあります。各行はそのテキストファイルの単語です

ユーザーに9文字を要求するプログラムを作成する必要があり、プログラムはこれらの文字を並べ替えて、この9文字のセットに一致するテキストファイル内のすべての単語を見つけることになっています

私はこのプログラムのコーディングに行き詰まっています。助けてください。

これは私がやったことです

Nian = raw_input ("Type in nine letters :")

filename = "dictionary.txt"
fil = open(filename, "r")

lines = fil.read()

tx4 = lines.strip()

a = Nian[0]    
b = Nian[1]      
c = Nian[2]       
d = Nian[3]       
e = Nian[4]    
f = Nian[5]      
g = Nian[6]    
h = Nian[7]     
i = Nian[8]

for w in lines[0:23005]:
       if a or b or c or d or e or f or g or h or i in lines:
       print w 
4

3 に答える 3

2

したがって、これらの 9 文字が完全に一致する場合、ここでは少し注意が必要です。これらすべての順列を作成してそれぞれをチェックする代わりに、python 組み込みsorted関数 ( doc ) を使用して単語をアルファベット順に並べ替え、結果を比較します。

ここでの「トリック」は、これらの 9 文字のアナグラムを探していることに気付くことです。たとえば、「terse」と「reset」は互いのアナグラムですが、並べ替えると両方とも「eerst」になります。

完全一致を探していない場合でも、このトリックを使用して最適化を行うことができます。

プログラムの残りの部分については、Python でテキスト ファイルを読み取る基本的なチュートリアルを探しれば、残りの部分を理解できると確信しています。幸運を!

于 2011-09-20T19:42:37.870 に答える
0

続行する方法は次のとおりです。

  1. ファイルを set() オブジェクトに読み込みます。オブジェクトのメソッド'\n'を使用する場合は、行末を削除することを忘れないでください。readlines()file
  2. http://docs.python.org/library/itertools.html#itertools.permutationsを使用してすべての順列を反復し、これらの順列のいずれかがセットに含まれているかどうかを確認します。たぶん、タプルを文字列にマップする必要があるかもしれません。joinメソッドを使用するstrと便利です。

9! = 362880順列があることを知っていますか?

于 2011-09-20T19:21:31.520 に答える
0

最初に頭に浮かぶのはセットです。

これは理想的な解決策ではないかもしれませんが、うまくいくはずです:

match_letters = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'}
for line in file:
    line = line.strip()
    line_letters = set(line)
    # test whether any letter from match_letters is in line_letters
    if line_letters & match_letters:
        print(line)

または、私の誤解で、 9 文字すべてを含む単語を探している場合:

    if line_letters >= match_letters:
        print(line)

または、これらの 9 文字のみを含む単語を探している場合:

    if line_letters <= match_letters:
        print(line)
于 2011-09-20T20:37:33.507 に答える