Python if-string-in-set不';行不通
我正在检查输入是否在一个集合中。我从Python if-string-in-set不';行不通,python,python-2.7,search,Python,Python 2.7,Search,我正在检查输入是否在一个集合中。我从words.dat文件中获取集合。集合是正确的,但是总是执行else语句。这是我的代码: import fileinput def words2array(words): woorden = set([]) for line in fileinput.input(words): woorden.add(line) return woorden def krijgInput(): input = raw_input
words.dat
文件中获取集合。集合是正确的,但是总是执行else
语句。这是我的代码:
import fileinput
def words2array(words):
woorden = set([])
for line in fileinput.input(words):
woorden.add(line)
return woorden
def krijgInput():
input = raw_input().upper()
input += "/n"
return input
woordSet = words2array("words.dat")
input = krijgInput()
if 'input' in woordSet:
print "Ja"
else:
print "Nee"
print input
print woordSet
这是一个集合的一部分,我不能发布完整集合,因为它有大约80k-120k个单词。
'spoot\n','BLASTOMA\n','HINDGUT\n','FORGOER\n','LEOPARDS\n','SPECULUM\n','KEROSENES\n','carided\n','SOUBISES\n','ANIMALS\n','DISSERTS\n','missive\n','VIREMIC\n','FLUSTERING\n','presums\n','VACUITY\n',
这是一点来自单词。dat
:
AARDVARK
AARDVARKS
AARDWOLF
AARDWOLVES
AAS
AASVOGEL
AASVOGELS
ABA
ABACA
ABACAS
ABACI
ABACK
ABACUS
ABACUSES
ABAFT
您需要从从文件中检索的行中删除“\n
”s::
for line in fileinput.input(words):
woorden.add(line.strip('\n')) # strip
&改变
if 'input' in woordSet: # check if string in set, wrong
到
&正如@grc在他下面的评论中所提到的,为了使这一点起作用,您需要删除这一行
input += "/n"
以便获得所需的整洁的元素集。您检查的是文本字符串
'input'
,而不是变量input
,您已多次正确使用该字符串
另外,不要将input
用作变量名,因为它会屏蔽内置的
并将/n
与'BLASTOMA\n'
-/
不同于\
。使用\n
这里有一个更简单的方法:
with open('words.dat') as f:
if raw_input().upper()+'\n' in set(f):
print 'Ja'
else:
print 'Nee'
请注意,这取决于文件末尾有一个“空”行。如果最后一行只是最后一个单词,没有换行符,请在集合(map(str.strip,f))中使用If raw_input().upper()
。您正试图在单词集合中将“input”作为字符串搜索
请将以下行更改为:
input = krijgInput()
if input in woordSet:
在这里,您将从集合中搜索用户输入。集合中的所有单词都在末尾添加了一个换行符,请首先使用
strip()
。投票结束,因为这是一个简单的打字错误<代码>如果woordSet中的“输入”:搜索字符串“输入”
。我回滚了一个删除了代码中一个错误的编辑。不知道一开始是怎么被批准的。@grc也是,谢谢你的提示。他在原始输入
包装中添加了一个换行符,所以这不重要。@TigerhawkT3他斜杠错了,所以是matterAh,所以他。。。在这个答案中可能需要提到这一点。在Python2.x中屏蔽输入并不是一个坏主意。:-)
input = krijgInput()
if input in woordSet: