有一个类似字典的txt文件,读取后输入一段混乱的字母寻找匹配的单词(Word Jumble)。
并且print在这么多数量的单词中有几个是匹配的
输出结果应该类似
$ python3 jumbler.py trsesi dict.txt
resist
sister
2 matches in 41238 words
$ python3 jumbler.py rayin dict.txt
rainy
1 match in 41238 words
$ python3 jumbler.py tororo dict.txt
No matches
$ python3 jumbler.py taroro dict.txt
orator
1 match in 41238 words
字典的文件类似
a
aardvark
abaci
aback
abacus
abaft
abalone
abandon
abandoned
abandonment
abase
abasement
abash
abashed
abashedly
abashment
abate
abatement
abattoir
abbe
abbess
abbey
abbot
abbreviate
abbreviated
abbreviation
abdicate
abdication
abdomen
abdominal
我写的代码如下
import argparse
def jumbler(jumble, dict_file_name):
"""
supply an excellent docstring here
"""
# first you must open the file
# second you must read each word from the file and perform an
# appropriate comparison of each with 'jumble'; you need to count the
# number of lines read from the file
# if a word matches 'jumble', you are to print the word on a line by itself
# after you have read each word from the file and compared, you need to
# close the file
# assume that there were MATCHES words that matched, and NLINES in the file
# if there was a single match, you need to print
# "1 match in NLINES words", where NLINES is replaced by the value of NLINES
# if there were two or more matches, you need to print
# "MATCHES matches in NLINES words"
# if there were no matches, you need to print
# "No matches"
wordlist = []
dictionary = open(dict_file_name,"r")
for line in dictionary.readlines():
wordlist.extend(line.split(','))#修改后
for word in wordlist:
if sorted(str(jumble))==sorted(str(word)):
print(word+"\n")
else:
print("No matches")
dictionary.close()
def main():
"""
collect command arguments and invoke jumbler()
inputs:
none, fetches arguments using argparse
effects:
calls jumbler()
"""
parser = argparse.ArgumentParser(description="Solve a jumble (anagram)")
parser.add_argument("jumble", type=str, help="Jumbled word (anagram)")
parser.add_argument('wordlist', type=str,
help="A text file containing dictionary words, one word per line.")
args = parser.parse_args() # gets arguments from command line
jumble = args.jumble
wordlist = args.wordlist
jumbler(jumble, wordlist)
if __name__ == "__main__":
main()
但是打出来是一行行no matches....求大神赐教
ps.我们作业都是要求在终端run的所以会有额外的代码
我的output如下
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
No matches
まず、string.split() は文字列をリストに分割し、list.append() はパラメータ全体を要素としてリストに追加します。 したがって、コードでは
になります。 リーリーは wordlist をリストのリストにします。つまり、wordlist の各要素はリストであり、予想されるような単一の単語ではありません。
を使用する必要があります。 リーリーまたは
リーリー次に、次のコードに示すように、
はreadlines()
によって返される文字列には行末に改行文字が含まれています。 リーリーに変更する必要があります。
リーリーline.split(',')
line.split()
参照コードは次のとおりです:理由は簡単ですが、問題はここにあります:
リーリーコードを少し変更できるはずです。
リーリーただし、シソーラス ファイルが特に大きい場合は、すべての単語を
list
に保存すると大量のメモリが消費されます。個人的には、一致する単語のみを
list
に保存することをお勧めします。一致するものに注意を払う必要はありません。