【问题标题】:if -string- in set doesn't work [closed]如果 -string- in set 不起作用[关闭]
【发布时间】:2016-02-17 06:40:33
【问题描述】:

我正在尝试检查输入是否在集合中。我从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

【问题讨论】:

  • 你在集合中的所有单词都在末尾附加了一个换行符,首先使用strip()将它们删除。
  • 投票结束是一个小错误。 if 'input' in woordSet: 搜索字符串 'input'。你不想这样。
  • 我回滚了删除了代码中的一个错误的编辑。不知道它是如何获得批准的。

标签: python python-2.7 search


【解决方案1】:

您正在检查文字字符串'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))

【讨论】:

  • 在 Python 2.x 中屏蔽 input 并不是一个坏主意。 :-)
【解决方案2】:

您需要从您从文件中检索的行中删除“\n”:

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"

这样才能得到你想要的整齐的元素。

【讨论】:

  • @grc 那也是,谢谢你的留言。
  • 他在 raw_input 包装器中添加了一个换行符,所以这不重要。
  • @TigerhawkT3 他的斜线错了,所以这很重要
  • 啊,所以他确实......可能想在这个答案中提到这一点。
【解决方案3】:

您正在尝试在单词集中搜索“输入”作为字符串。

请将下面的行改为:

input = krijgInput()
if input in woordSet:

在这里您将从集合中搜索用户输入。

【讨论】:

    猜你喜欢
    • 2021-04-26
    • 2015-04-01
    • 2018-08-02
    • 2022-06-15
    • 2016-07-03
    • 2020-05-18
    • 1970-01-01
    • 2023-01-19
    • 2014-05-15
    相关资源
    最近更新 更多