猜词游戏 - 这个能写得更好吗?

3

这只是游戏的一部分,一个函数,它将秘密单词和猜测的字母作为参数,并告诉您他们是否正确猜出了单词。

说实话,这来自edX课程的一个作业,然而我已经通过了这个作业,这段代码是可行的。我只是想知道它是否可以写得更好。一些人在讨论论坛中谈到他们用一行代码解决了这个问题,这就是我为什么在问的原因。

def isWordGuessed(secretWord, lettersGuessed):
    guessed = []
    l= str(lettersGuessed)
    s= list(secretWord)
    for i in l:
        if i in s:
            guessed.append(i)
            guessed.sort()
            s.sort()
    return guessed == s

以下是一个来自评分者的测试用例示例:

isWordGuessed('durian', ['h', 'a', 'c', 'd', 'i', 'm', 'n', 'r', 't', 'u'])

请注意,以上内容为代码段,请勿翻译其中的英文单词。

1
如果这个问题仅仅是关于代码改进的话,我建议将其迁移到codereview.stackexchange.com。你已经说明了代码是可以工作的,所以除了对现有的、可工作的代码进行改进之外,这里没有什么需要“解决”的问题。 - blacksite
1
@not_a_robot 虽然 Code Review 可能是一个建议去这类问题的好地方,但我们应该摆脱把提问者送到那里的习惯。请阅读 元帖以获取澄清。 - idjaw
没见过,谢谢。我都可以理解。 - blacksite
1个回答

7

像这样的内容非常简短:

def isWordGuessed(secretWord, lettersGuessed):
  return all([c in lettersGuessed for c in secretWord])

对于secretWord中的每个字符,确保它在lettersGuessed中。这基本上创建了一个布尔值列表,并且内置函数all返回True,如果数组中的每个元素都是True

另外,FWIW:惯用的Python写法会使用下划线而不是驼峰式命名法。


哦,我明白了,这是一个很好的解决方案。我尝试过用除此之外的所有方法来做,但我的代码没有通过。我想我只是一直在使用错误的方法。我一直在使用all(x == lettersGuessed for x in secretWord),因为我还是个初学者,这是我唯一知道如何使用all的方法。谢谢你的教训!另外,我通常也使用下划线,但我只是使用作业描述中给出的函数名称、参数和变量,以避免混淆。 - Elliot Tregoning

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接