当前位置: 代码迷 >> python >> 无法证明我的WordSearch游戏列表中有单词
  详细解决方案

无法证明我的WordSearch游戏列表中有单词

热度:58   发布时间:2023-06-13 13:56:25.0

我已经创建了该特定字网格的所有可能结果的列表,同时做对角线,向上,向下以及所有相反的操作):

我将其称为allWords ,但是当我也尝试查找特定单词时,我知道在allWords的循环不会找到Hidden单词。 我知道我的问题,但我确实知道如何解决(很抱歉造成可怕的解释,希望下面的示例可以更好地说明问题):

下面是一个示例:我的wordList是我知道隐藏在wordgrid中某个地方的单词列表。 我的allWordsallWords的行,列,对角线列表,但

WordList = ['HAMMER','....']

allWords = ['ARBHAMMERTYU','...']

HAMMERallWords但之后被其他字符“掩盖”,因此我无法显示HAMMER在wordgrid中。

length = len(allWords)
for i in range(length):
    word = allWords[i]
    if word in wordList:
        print("I have found", word)

allWords找不到任何单词HAMMER

解决这个问题的任何帮助都会很棒

如果我理解正确,那么您正在尝试在allWords中找到一个匹配项,并且想要遍历WordList并确定是否存在子字符串匹配项。

因此,如果这是正确的,那么您的代码就不能完全做到这一点。 要逐步检查代码以纠正正在发生的情况:

length = len(allWords)
for i in range(length):

您上面要做的不一定是遍历所有单词。 您想遍历WordList并查看它是否在allWords内部。 您没有这样做,而是想这样做:

length = len(WordList)
for i in range(length):

考虑到这一点,这意味着现在您要引用WordList而不是allWords,因此现在要更改此内容:

word = allWords[i]

对此:

word = WordList[i]

最后,这里提供了一些新的信息,以确定您实际上在匹配的字符串中是否有子字符串匹配。 一种称为“任何”的方法。 如果找到了至少一个与您要查找的匹配项,则“ any”方法将通过返回True来工作。 看起来像这样:

any(if "something" in word in word for words)

然后,如果单词中包含“ something”,它将返回True,否则将返回False。

因此,将所有这些放在一起,并使用示例输入运行代码,我们得到:

WordList = ['HAMMER','....']

allWords = ['ARBHAMMERTYU','...']

length = len(WordList)
for i in range(length):
    word = WordList[i]
    if any(word in w for w in allWords):
        print("I have found", word)

输出:

I have found HAMMER

你是不是比较每个wordwordList中的单词allWords if word in wordList的单词比较精确的单词, if word in wordList该行。

if word in wordList的单词仅在单词HammerwordList时才返回True。

要匹配子字符串,您需要另一个循环:

for i in range(length):
    word = allWords[i]
    for w in WordList:
        if w in word:
            print("I have found ", word)

您可以尝试这样的事情:

for word in allWords:
    if word in WordList:
        print("I have found", word)

嗯,也许错误是您写了wordList并真正定义了WordList。 希望这可以帮助。

如果我正确理解了您的问题,则可能需要实现一个函数,该函数检查allWords中的任何条目中是否存在令牌(例如'HAMMER' )。 解决方案,我最好的选择是使用正则表达式。

import re

def findWordInWordList(word, allWords):
    pattern = re.compile(".*%s.*" % word)
    for item in allWords:
        match = pattern.search(item)
        if match:
            return match

这将返回第一次出现,如果您想要更多,则很容易将它们收集在列表中。

  相关解决方案