根本学不完 发表于 2023-9-24 15:06:12

求大神帮忙如何能过了最后的两个test case

本帖最后由 根本学不完 于 2023-9-24 15:25 编辑

python ai wordmaker

陶远航 发表于 2023-9-24 15:06:35

根据给定的代码,你需要通过最后两个测试用例。这两个测试用例是test_letters_remaining()和test_blackbox()。

对于test_letters_remaining()测试用例,它首先创建一个WordMakerAI对象wm,然后使用reset(5)方法将词长设置为5。接下来,它循环迭代字符串to_guess中的每个字母,并调用guess()方法猜测该字母。最后,它断言get_amount_of_valid_words()方法的返回值应为287。

你需要检查以下几点以确保通过此测试用例:
1. 确保你的WordMakerAI类可以正确加载单词文件,并将单词存储在self.words列表中。
2. 确保在调用reset()方法后,word_length属性被正确设置为指定的词长。
3. 在guess()方法中,根据猜测的字母筛选出合法单词,并更新families字典。
4. 在get_amount_of_valid_words()方法中,计算符合指定词长的有效单词数量。

对于test_blackbox()测试用例,它首先创建一个WordMakerAI对象wm,并使用reset(6)方法将词长设置为6。然后,它循环迭代字符串to_guess中的每个字母,并调用guess()方法猜测该字母。最后,它断言get_valid_word()方法的返回值应为['petite', 'peyote', 'piquet', 'putout', 'puttee']中的一个,并且调用guess("e")方法返回的结果应为。

你需要检查以下几点以确保通过此测试用例:
1. 在guess()方法中,根据猜测的字母筛选出合法单词,并更新families字典。
2. 确保sorted(positions)返回出现猜测字母的位置列表。
3. 在get_valid_word()方法中,返回合法单词列表中的一个。

请仔细检查代码,确保所有方法的实现正确,并且属性和变量被正确设置和使用。如果仍然不能通过测试用例,可以提供更具体的问题描述或错误提示,以便我能够提供更准确的帮助。
如果问题已经解决,请设置最佳答案

isdkz 发表于 2023-9-24 15:06:37

这段代码是一个单词猜测的AI,主要是实现了以下几个方法:

1.__init__(self, words_file: str, verbose=False) :初始化单词列表,从文件中读取单词并存储在self.words中;
2.reset(self, word_length: int) -> None :重置单词长度;
3.get_valid_word(self) -> str :获取一个有效的单词;
4.get_amount_of_valid_words(self) -> int :获取有效单词的数量;
5.get_letter_positions_in_word(self, word: str, guess_letter: str) -> tuple :获取一个字母在单词中的位置;
6.guess(self, guess_letter) -> list :猜测一个字母。

现在的问题是如何让代码通过最后两个测试用例。

第一个测试用例是test_blackbox() ,它测试了一个单词长度为6的情况。在这个测试用例中,我们需要找到一个单词,它的字母位置与之前猜测的字母位置匹配。我们可以通过以下方式来实现:

1. 在guess()方法中,我们已经将单词按照字母位置分成了不同的家族,每个家族都有相同的字母位置。我们可以选择最大的家族(即包含单词最多的家族)作为下一步猜测的单词家族;
2. 对于选择的家族,我们可以选择其中的第一个单词作为下一步猜测的单词;
3. 对于猜测的字母,我们可以选择其中出现位置最靠前的一个位置作为返回值。

第二个测试用例是test_letters_remaining() ,它测试了一个单词长度为5的情况。在这个测试用例中,我们需要找到一个单词,它包含给定的五个字母。我们可以通过以下方式来实现:

1. 在初始化时,我们将单词列表存储在self.words中;
2. 在每次猜测时,我们可以根据已经猜测的字母来过滤单词列表,只保留包含这些字母的单词;
3. 最后,我们可以通过get_amount_of_valid_words()方法来获取剩余的单词数量。

综上所述,以下是修改后的代码:

class WordMakerAI():

    def __init__(self, words_file: str, verbose=False):
      self.verbose = verbose
      self.words = []
      with open(words_file) as file_obj:
            for line in file_obj:
                word = line.strip()
                self.words.append(word)

    def reset(self, word_length: int) -> None:
      self.word_length = word_length
      self.words =

    def get_valid_word(self) -> str:
      return self.words if self.words else ""

    def get_amount_of_valid_words(self) -> int:
      return len(self.words)

    def get_letter_positions_in_word(self, word: str, guess_letter: str) -> tuple:
      positions =
      return tuple(positions)

    def guess(self, guess_letter) -> list:
      families = {}
      for word in self.words:
            positions = self.get_letter_positions_in_word(word, guess_letter)
            key = tuple()
            if key not in families:
                families = []
            families.append(word)

      sorted_families = sorted(families.items(), key=lambda x: (len(x), -sum(x)), reverse=True)
      selected_families = sorted_families
      selected_word = selected_families
      self.words =
      positions = self.get_letter_positions_in_word(selected_word, guess_letter)
      return sorted(positions)


希望能对您有所帮助。

Mike_python小 发表于 2023-9-24 15:06:45

我注意到两个测试用例test_letters_remaining和test_blackbox。下面是如何通过这两个测试用例的建议:

## test_letters_remaining 测试用例

该测试用例验证了get_amount_of_valid_words方法是否正确计算了有效单词的数量。你可以按照以下步骤来通过该测试用例:

1. 确保你已经创建了一个WordMakerAI对象并加载了字典文件。
2. 调用reset方法,将word_length设置为5,以重置游戏状态。
3. 使用循环遍历字符串"aeiou"中的每个字母,并调用guess方法猜测该字母。
4. 最后,使用断言语句检查get_amount_of_valid_words方法是否返回了预期的结果287。

## test_blackbox 测试用例

该测试用例对整个游戏进行了更全面的测试,包括猜测字母、获取有效单词等功能。以下是通过该测试用例的步骤:

1. 创建一个新的WordMakerAI对象并加载字典文件。
2. 调用reset方法,将word_length设置为6,以重置游戏状态。
3. 使用循环遍历字符串"asdfghjklzxcvbnmrpw"中的每个字母,并调用guess方法猜测该字母。
4. 使用断言语句检查get_valid_word方法返回的有效单词是否在预期的列表中。
5. 使用断言语句检查guess方法返回的列表是否与预期的位置列表相匹配。
6. 使用断言语句检查get_amount_of_valid_words方法是否返回了预期的结果1。
7. 使用断言语句检查get_valid_word方法是否返回了预期的单词"peyote"。
8. 调用reset方法,将word_length设置为6,以确保reset方法能够正常工作。
9. 使用断言语句检查get_amount_of_valid_words方法是否不等于1。
10. 使用循环遍历字符串"asdfghjklzxcvbnmrpwet"中的每个字母,并调用guess方法猜测该字母。
11. 使用断言语句检查get_amount_of_valid_words方法是否返回了预期的结果1。
12. 使用断言语句检查get_valid_word方法是否返回了预期的单词"peyote"。

请注意,在运行测试用例之前,确保你的代码和测试文件位于同一个目录下,并且字典文件名为"dictionary.txt"。如果字典文件的路径不同,请相应地修改代码中的路径。完成上述步骤后,你应该能够通过这两个测试用例。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
回答可能有误,多多谅解!

根本学不完 发表于 2023-9-24 15:14:32

isdkz 发表于 2023-9-24 15:06
这段代码是一个单词猜测的AI,主要是实现了以下几个方法:

1.__init__(self, words_file: str, verbos ...

test_word_maker_ai.py::test_letters_remaining FAILED                     
test_word_maker_ai.py:10 (test_letters_remaining)
470 != 287

Expected :287
Actual   :470
<Click to see difference>

def test_letters_remaining():
      wm = WordMakerAI("dictionary.txt")
      wm.reset(5)
      to_guess = "aeiou"
      for letter in list(to_guess):
            wm.guess(letter)
>       assert wm.get_amount_of_valid_words() == 287
E       assert 470 == 287
E      +where 470 = <bound method WordMakerAI.get_amount_of_valid_words of <py_evil_hangman.word_maker.WordMakerAI object at 0x7f88802e4eb0>>()
E      +    where <bound method WordMakerAI.get_amount_of_valid_words of <py_evil_hangman.word_maker.WordMakerAI object at 0x7f88802e4eb0>> = <py_evil_hangman.word_maker.WordMakerAI object at 0x7f88802e4eb0>.get_amount_of_valid_words

test_word_maker_ai.py:17: AssertionError
---------------------------------------------------------------------------------------------------------------------------------------test_word_maker_ai.py::test_blackbox FAILED                              
test_word_maker_ai.py:18 (test_blackbox)
'pitier' != ['petite', 'peyote', 'piquet', 'putout', 'puttee']

Expected :['petite', 'peyote', 'piquet', 'putout', 'puttee']
Actual   :'pitier'
<Click to see difference>

def test_blackbox():
      wm = WordMakerAI("dictionary.txt")
      wm.reset(6)
      to_guess = "asdfghjklzxcvbnmrpw"
      for letter in list(to_guess):
            wm.guess(letter)
>       assert wm.get_valid_word() in ['petite', 'peyote', 'piquet', 'putout', 'puttee']
E       AssertionError: assert 'pitier' in ['petite', 'peyote', 'piquet', 'putout', 'puttee']
E      +where 'pitier' = <bound method WordMakerAI.get_valid_word of <py_evil_hangman.word_maker.WordMakerAI object at 0x7fc4f8144df0>>()
E      +    where <bound method WordMakerAI.get_valid_word of <py_evil_hangman.word_maker.WordMakerAI object at 0x7fc4f8144df0>> = <py_evil_hangman.word_maker.WordMakerAI object at 0x7fc4f8144df0>.get_valid_word

test_word_maker_ai.py:25: AssertionError

根本学不完 发表于 2023-9-24 15:19:46

test_word_maker_ai.py::test_blackbox FAILED                              
test_word_maker_ai.py:18 (test_blackbox)
'pitier' != ['petite', 'peyote', 'piquet', 'putout', 'puttee']

Expected :['petite', 'peyote', 'piquet', 'putout', 'puttee']
Actual   :'pitier'
<Click to see difference>

def test_blackbox():
      wm = WordMakerAI("dictionary.txt")
      wm.reset(6)
      to_guess = "asdfghjklzxcvbnmrpw"
      for letter in list(to_guess):
            wm.guess(letter)
>       assert wm.get_valid_word() in ['petite', 'peyote', 'piquet', 'putout', 'puttee']
E       AssertionError: assert 'pitier' in ['petite', 'peyote', 'piquet', 'putout', 'puttee']
E      +where 'pitier' = <bound method WordMakerAI.get_valid_word of <py_evil_hangman.word_maker.WordMakerAI object at 0x7fc4f8144df0>>()
E      +    where <bound method WordMakerAI.get_valid_word of <py_evil_hangman.word_maker.WordMakerAI object at 0x7fc4f8144df0>> = <py_evil_hangman.word_maker.WordMakerAI object at 0x7fc4f8144df0>.get_valid_word

test_word_maker_ai.py:25: AssertionError
--------------------------------------------------------------------------------------------------
test_word_maker_ai.py::test_letters_remaining FAILED                     
test_word_maker_ai.py:10 (test_letters_remaining)
470 != 287

Expected :287
Actual   :470
<Click to see difference>

def test_letters_remaining():
      wm = WordMakerAI("dictionary.txt")
      wm.reset(5)
      to_guess = "aeiou"
      for letter in list(to_guess):
            wm.guess(letter)
>       assert wm.get_amount_of_valid_words() == 287
E       assert 470 == 287
E      +where 470 = <bound method WordMakerAI.get_amount_of_valid_words of <py_evil_hangman.word_maker.WordMakerAI object at 0x7f88802e4eb0>>()
E      +    where <bound method WordMakerAI.get_amount_of_valid_words of <py_evil_hangman.word_maker.WordMakerAI object at 0x7f88802e4eb0>> = <py_evil_hangman.word_maker.WordMakerAI object at 0x7f88802e4eb0>.get_amount_of_valid_words

test_word_maker_ai.py:17: AssertionError

任何方法能过test就行
页: [1]
查看完整版本: 求大神帮忙如何能过了最后的两个test case