2017-06-11 9 views
0

私は辞書のテキストを持っており、この辞書のテキストに指定された文字を含む最も長い単語を見つけようとしています。文字はユーザーによって入力されます。例えば、ユーザが「赤」を入力すると、プログラムは「r」、「e」、および「d」を含む最も長い単語を見つけなければならない。私は "r"、 "e"、 "d"のいずれかを含む単語を見つけることができました。 格納されている単語には、入力の順序に関係なく、ユーザーが入力したすべての文字が含まれるように、構内を縮小するにはどうすればよいですか?文字列内で連続していない文字を見つける方法は?

+0

「dictionary.txt」ファイルの内容の形式は何ですか? 'for word in data_file:'は、単語ではなく時間に** line **を読み込んでいます - それは重要ですか? – martineau

答えて

0

内蔵のsetタイプを使用すると、ファイルの各単語にすべての文字が含まれているかどうかを簡単にテストできるため、簡単に処理を高速化できます。 withステートメントを使用して、ファイルが自動的に閉じられることを確認することもお勧めします。

"dictionary.txt"ファイルの形式が1行に1語の場合は、これを高速化することができます。しかし、あなたがそれが何であるかを決して記述していないので、以下はそれを前提とせず、ファイルの各行に1つまたは複数があるかどうかにかかわらず動作するはずです。それは内の単語と同時に測定することができるので、

dict_filename = "dictionary.txt" 
outp_filename = "find_right_words.txt" 

# user's input 
letters = input("Please enter the letters to include: ") 
letters = set(letters) # convert string to set of characters 

print("searching for letters: {}".format(', '.join(sorted(letters)))) 

# find all words in dictionary file that contain all the letters and store them in a file 
with open(dict_filename, "r") as data_file, \ 
    open(outp_filename, "w") as find_right_words: 
    for line in data_file: 
     for word in line.split(): 
      if letters.issubset(word): # all letters in word? 
       find_right_words.write(word+'\n') 

print("file {!r} created".format(outp_filename)) 

しかし、あなたがしたいすべてが、すべての文字で最長の単語を見つけることであるならば、あなたは本当に"find_right_words.txt"ファイルを作成する必要はありませんファイルがチェックされています。すべての文字を含む同じ長さの複数の単語がある場合、これは最初以外のすべてを無視すること

# find longest word in dictionary file that contains all the letters 
with open(dict_filename, "r") as data_file: 
    longest_word_len = 0 
    for line in data_file: 
     for word in line.split(): 
      if(len(word) > longest_word_len # is word longer than longest word... 
       and letters.issubset(word)): # and all letters in it? 
       longest_word, longest_word_len = word, len(word) 

print("longest word found: {!r}".format(longest_word)) 

注:ここでは

は、私が何を意味するかです。

0

あなたはこれを試すことができます。

letter = input("Please enter the letters to include: ") 

data_file = open("dictionary.txt").read().splitlines() 

words = [i for i in data_file if all(b in i for b in letter)] 

print(max(words, key = len)) 

このアルゴリズムは、単語リストをループし、それらにおけるユーザーの入力からすべての文字を持っているすべての単語を含む新しいリストを作成します。次に、コードはフィルタリングされたリストから最長の単語を見つけます。