我需要编写一个简单的hangman函数,它接受一个字符串(正在猜测的单词)和一个字母列表(猜测的字母)。 这是我使用的代码:
$ git config alias.foo '!echo "$1"'
$ git foo bar
bar bar
$ git config alias.foo '!echo "$1" "$2"'
$ git foo bar qux
bar qux bar qux
代码通常有效,但我发现偶尔会输出错误的答案。例如,如果
def WordGuessed(Word, letters):
if letters == []:
return False
else:
for i in letters:
if i not in Word:
return False
else:
if i == letters[-1]:
return True
在应该打印True时打印False。任何人都可以看到我的代码出错了吗?
答案 0 :(得分:1)
一旦找到不在单词中的猜测字母,您就会返回False。在您的示例中,第一个字母不在单词中。
如果您循环浏览Word
并检查每个字母是否在数组letters
中,那么它会起作用:
def WordGuessed(Word, letters):
if letters == []:
return False
else:
for i in Word:
if i not in letters:
return False
else:
if i == Word[-1]:
return True
# prints True
print(WordGuessed('durian', ['h', 'a', 'c', 'd', 'i', 'm', 'n', 'r', 't', 'u']))
# prints False, missing 'u'
print(WordGuessed('durian', ['h', 'a', 'c', 'd', 'i', 'm', 'n', 'r', 't']))
答案 1 :(得分:0)
但是你的代码可以更清晰:
如果您需要use negation检查list
实例是否为空,
如果我们已经else
for
else
阻止了return
,则意味着我们已经达到了break
的可迭代结束或def WordGuessed(Word, letters):
if not letters:
return False
else:
for i in Word:
if i not in letters:
return False
else:
return True
,无需另外检查。
所以解决方案可以写成
def WordGuessed2(Word, letters):
return set(Word).issubset(set(letters))
最后,由于我们只需要检查一次字母,我们就可以处理像set
s
>>> word = 'durian'
>>> guessed_letters = ['h', 'a', 'c', 'd', 'i', 'm', 'n', 'r', 't']
>>> WordGuessed(word, guessed_letters)
False
>>> WordGuessed2(word, guessed_letters)
False
>>> guessed_letters.append('u')
>>> WordGuessed(word, guessed_letters)
True
>>> WordGuessed2(word, guessed_letters)
True
.timers
| with_entries( select(.key|contains("KeywordA") ) )