我试图检查输入是否在一组中。我从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的单词。
'SPOUT\n', 'BLASTOMA\n', 'HINDGUT\n', 'FORGOER\n', 'LEOPARDS\n', 'SPECULUM\n', 'KEROSENES\n', 'CARIED\n', 'SOUBISES\n', 'ANIMALS\n', 'DISSERTS\n', 'OMISSIVE\n', 'VIREMIC\n', 'FLUSTERING\n', 'PLENUMS\n', 'VACUITY\n',
这有点来自words.dat
:
AARDVARK
AARDVARKS
AARDWOLF
AARDWOLVES
AAS
AASVOGEL
AASVOGELS
ABA
ABACA
ABACAS
ABACI
ABACK
ABACUS
ABACUSES
ABAFT
答案 0 :(得分:3)
您正在检查文字字符串'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'
请注意,这取决于"空"文件末尾的行。如果最后一行只是没有换行符的最后一个单词,请改用if raw_input().upper() in set(map(str.strip, f))
。
答案 1 :(得分:1)
您需要从您从文件中检索的行中删除" \n
" s:
for line in fileinput.input(words):
woorden.add(line.strip('\n')) # strip
&安培;变化
if 'input' in woordSet: # check if string in set, wrong
到
if input in woordSet: # check if input in set
&安培;正如下面评论中提到的 @grc ,为了使其正常工作,您需要删除此行
input += "/n"
以获得您想要的整齐元素。
答案 2 :(得分:0)
您正在尝试搜索"输入"作为单词集中的字符串。
请将以下行更改为:
input = krijgInput()
if input in woordSet:
在这里,您将从set中搜索用户输入。