Я преподаю себя Python через OCW MIT за 6.00. (Поэтому, пожалуйста, не комментируйте строки «Вы не должны задавать вопросы о домашнем задании» ... Я даже не в MIT, насколько я бы хотел.) Я сейчас застрял на Problem #3 in Problem Set #5 ,Функция не импортируется должным образом
Вот (отношение) часть ps5.py
:
def update_hand(hand, word):
"""
Uses up all the letters in the given word and returns
the new hand. Does not modify hand.
word: string
hand: dictionary (string -> int)
"""
hand = hand.copy()
for char in word:
hand[char] = hand.get(char,0)-1
return hand
def is_valid_word(word, hand, word_list):
"""
Returns True if word is in the word_list and is entirely
composed of letters in the hand. Otherwise, returns False.
Does not mutate hand or word_list.
word: string
hand: dictionary (string -> int)
word_list: list of lowercase strings
"""
if word not in word_list:
return False
after = update_hand(hand.copy(),word)
for char in after:
if after[char] < 0:
return False
return True
Я побежал код и он возвращает правильный результат.
Loading word list from file...
83667 words loaded.
play_game not implemented.
play_hand not implemented.
>>> word = "python"
>>> hand = {'h':1,'n':1,'o':1,'p':1,'t':1,'y':1}
>>> word_list = load_words()
Loading word list from file...
83667 words loaded.
>>> is_valid_word(word, hand, word_list)
True
>>> word = "cobra"
>>> is_valid_word(word, hand, word_list)
False
>>> hand
{'h': 1,'n': 1,'o': 1,'p': 1,'t': 1,'y': 1}
Моя проблема заключается в том, что, когда функция is_valid_word
импортируется в test_ps5.py
, кажется, просто вернуть False
за все, что означает, что он терпит неудачу половину тестов.
Вот (отношение) часть test_ps5.py
:
from ps5 import *
def test_is_valid_word(word_list):
"""
Unit test for is_valid_word
"""
failure=False
# test 1
word = "hello"
hand = {'h':1, 'e':1, 'l':2, 'o':1}
if not is_valid_word(word, hand, word_list):
print "FAILURE: test_is_valid_word()"
print "\tExpected True, but got False for word: '" + word + "' and hand:", hand
failure = True
# test 2 passes
# test 3
hand = {'n': 1, 'h': 1, 'o': 1, 'y': 1, 'd':1, 'w':1, 'e': 2}
word = "honey"
if not is_valid_word(word, hand, word_list):
print "FAILURE: test_is_valid_word()"
print "\tExpected True, but got False for word: '"+ word +"' and hand:", hand
failure = True
# test 4 passes
# test 5
hand = {'e':1, 'v':2, 'n':1, 'i':1, 'l':2}
word = "evil"
if not is_valid_word(word, hand, word_list):
print "FAILURE: test_is_valid_word()"
print "\tExpected True, but got False for word: '" + word + "' and hand:", hand
failure = True
# test 6 passes
if not failure:
print "SUCCESS: test_is_valid_word()"
word_list = load_words()
И вот результат, когда я запускаю код:
Loading word list from file...
83667 words loaded.
----------------------------------------------------------------------
Testing get_word_score...
SUCCESS: test_get_word_score()
----------------------------------------------------------------------
Testing update_hand...
SUCCESS: test_update_hand()
----------------------------------------------------------------------
Testing is_valid_word...
FAILURE: test_is_valid_word()
Expected True, but got False for word: 'hello' and hand: {'h': 1, 'e': 1, 'l': 2, 'o': 1}
FAILURE: test_is_valid_word()
Expected True, but got False for word: 'honey' and hand: {'e': 2, 'd': 1, 'h': 1, 'o': 1, 'n': 1, 'w': 1, 'y': 1}
FAILURE: test_is_valid_word()
Expected True, but got False for word: 'evil' and hand: {'i': 1, 'n': 1, 'e': 1, 'l': 2, 'v': 2}
----------------------------------------------------------------------
All done!
Я не могу понять, что вызывает проблемы, когда и почему.
Код ps5.py Код, который вы написали? Может быть, поместить некоторые инструкции печати в ваши циклы, чтобы помочь отладить то, что именно происходит, и где это происходит неправильно? – audiodude
Вы пробовали его с тестовыми векторами, которые он фактически использует? –
@ IgnacioVazquez-Abrams - Да, я пробовал каждый из тестовых векторов. Они работают так, как в ps psp. – 2012ssohn