如果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))
答案 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
循环中比较current
和for
的长度,但是一旦比较成功,您需要从其中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