2017-08-21 17 views
0

私はこれをやっていますhttp://wiki.openhatch.org/Scrabble_challenge#Step_3:_find_valid_wordsと私は1つの部分で立ち往生しました。私はネストされたループを使用して、単語リスト(開いているテキストファイル)のすべての単語を調べ、その単語のすべての文字について、その文字がユーザー入力に含まれているかどうかを確認しようとしています。私のコードは、これまでのところ期待される出力は、基本的には、このすべての文字が別の単語に含まれているファイル内の単語を検索する

python scrabble.by ZZAAEEI 
size 
ziz 

有効な単語のリストのようになります

import argparse 
import sys 

file=open('sowpods.txt','r')#opens the file of words used in scrabble 
scores = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2, 
     "f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3, 
     "l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1, 
     "r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4, 
     "x": 8, "z": 10}#dictionary for letter values 
parser=argparse.ArgumentParser(description='designed to help in scrabble') 
#command line interface using argparse module 
parser.add_argument("word",help="input your letters",nargs='?')#adds the 
positional argument with description 
args=parser.parse_args() 

if args.word is None: 
    print('error I need letters to work') 
    sys.exit() 
else: 
    print(str.lower(args.word))#converts the the input for argument word 
into lowercase letters 
for letter in file: 
    i=str.lower(letter) 
    for i in args.word: 
     valid=[] 
     valid.append(i) 
     print(valid) 

です。

私はこのリストを持っていればスコア辞書を使って単語の価値を得ることができますが、ネストされたループが最良の方法だと思っていたので私は固執しています。助けてくれてありがとう。

ファイルsowpods.txtは、単語のリストには

AA AAH AAHED AAHING AAHS AAL AALII AALIIS AALS AARDVARK AARDVARKS AARDWOLF AARDWOLVES AARGH AARRGH AARRGHH AARTI AARTIS AAS AASVOGEL AASVOGELS AB ABA ABAC ABACA ABACAS ABACI ABACK ABACS ABACTERIAL ABACTINAL ABACTINALLY a small snippet it's pretty much a file of all valid scrabble words 
+0

あなたは新しいしているので、あなたは[この](https://stackoverflow.com/help/someone-answers)をご覧ください。 –

答えて

2

だけset difference操作を使用して簡単なスニペット含まれています

word = args.word.lower() 
valid = [] 
for line in file: 
    line = line.lower().strip() 
    if not (set(line) - set(word)): 
     valid.append(i) 

print(valid) 

linewordに含まれるすべての文字を持っている場合は、セットをこれらの2つの違いは空集合になるので、not <empty set>Trueです。

ファイル内の各単語が別々の行に含まれていることを期待しています。そうしないと、効果がなくなります。

例:

⇒ word = ZZAAEEI 
    line = zeze 

⇒ set_word = {'z', 'a', 'e', 'i'} 
    set_line = {'z', 'e' } 

⇒ set_line - set_word = {'z', 'e' } - {'z', 'a', 'e', 'i'} 

⇒ set() 
+0

は、それがあまりにもうまく動作didntのことを試してみました validword = []単語リスト中の単語のための S =リスト(args.word) : 作品=単語の文字のための真の : かの手紙ではないので: 作品=偽 ブレーク ELIFピース: s.remove(手紙)s内のiに対する 合計= 0 : 合計=合計+スコア[文字] validword.append([合計、単語]) しかし、私の出力はまだ間違いました ASADEFを私のラックに使用する場合は、 0であり、単語はsab 2であり、単語はea 4であり、単語はaa –

+0

です@ShivamKaushikそれは私のコードではありません。 –

関連する問題