Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python if-string-in-set不';行不通_Python_Python 2.7_Search - Fatal编程技术网

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: