Python-查找相交

时间:2019-02-19 21:25:02

标签: python

如果secretWord中的字母也包含在lettersGuessed中,我试图使以下代码返回True。有人可以让我知道我的代码有什么问题吗?它始终返回False。非常感谢。

def isWordGuessed(secretWord, lettersGuessed):
    current = ' '
    for c in secretWord:
        if c in lettersGuessed:
            current += c
            if len(current) == len(secretWord):
                return True
            else:
                return False
print(isWordGuessed(secretWord, lettersGuessed))

5 个答案:

答案 0 :(得分:1)

在完成对if len(current) == len(secretWord)中字母的检查之前,您正在循环内检查secretWord。将其移到外面。 否则,您可能需要使用建议的@stackErr集来解决此问题。

答案 1 :(得分:0)

遍历秘密单词中的每个字母,然后检查第二个单词中是否包含该字母。将所有常见字母存储在out中。检查out的长度,如果大于0,则返回True。

def isWordGuessed(s1, s2):
  out = ""

  for c in s1:
    if c in s2 and not c in out:
      out += c

  if len(out) > 0:
    return True

  return False

同样,您的函数似乎执行了太多操作。您是否还想检查猜词的长度和秘密词的长度是否相同?如果秘密单词或猜测单词重复字母会怎样?

答案 2 :(得分:0)

您当前的变量中已经有一个“空格”。因此,您将永远拥有额外的长度。 其次,不要使用current_length = 0,而是将第5行更改为current + =1。然后,您可以直接将len()与该计数进行比较,而不必为每个单词调用len。 由于您的代码不考虑重复项,因此您可以使用集合编写更加紧凑的函数。

guess = set(lettersGuessed)
secret = set(secretWord)
if secret.intersection(guess) == secret:
    return True
else:
    return False

>>> a = set("abcdefgh")
>>> b = set("efghabcd")
>>> a.intersection(b)
set(['a', 'c', 'b', 'e', 'd', 'g', 'f', 'h'])
>>> a.intersection(b) == a
True

请注意,这里不考虑重复字符等。为此,您应该考虑使用字典并跟踪每个字符的计数。

答案 3 :(得分:0)

这里有两个问题。一种是使代码按原样工作。 删除“”之间的其他空格。现在,if len(..)语句应在“ for”语句下方缩进,因为我们希望检查密码中的所有字母,即整个for循环需要在检查长度之前完成。

def isWordGuessed(secretWord, lettersGuessed):
    current = ''
    for c in secretWord:
        if c in lettersGuessed:
            current += c
    if len(current) == len(secretWord):
        return True
    else:
        return False

要解决的另一个问题是代码中的要求。仅当secretWord中的所有字母都出现在letterGuessed中时,才应该返回True吗?例如,“ newd”和“ ne4wd”。允许重复吗?只是要记住一点。

答案 4 :(得分:0)

您可以在secretWord循环中比较currentfor的长度,但是一旦比较成功,您需要从其中break进行比较,然后比较两者是否相等确实是相同的字符串:

def isWordGuessed(secretWord, lettersGuessed):

    current = ''

    for i in secretWord:
        if i in lettersGuessed:
            current = current + i
            if len(secretWord) == len(current):
                break

    if secretWord == current:
        return True
    return False