В настоящее время я работаю над проблемой в курсе edX Python, и цель состоит в том, чтобы создать игру, подобную «Скремблеру».Я нахожусь на этапе «playHand», который в основном представляет собой взаимодействие с игроком / пользователем, который выводит счет после того, как каждое слово задано в качестве ввода.
Я закодировал весь процесс, и онотлично работает в онлайн-компиляторе (Python Tutor).Однако, когда я ввожу тот же код в IDE на сайте курса, который должен оценивать мой ответ и проверять его собственные примеры, правильный результат появляется только при первом тестировании (результат соответствует ожидаемому).Когда второй тест пройден, результат суммируется с результатом предыдущего теста, поэтому он становится больше, чем необходимо.
# some of the helper functions are dropped out from this code (but can be provided if needed)
# worldList is the list of words that are valid
single_period=["."]
score=0
def playHand(hand, wordList, n):
while calculateHandlen(hand) > 0:
global score
if n<calculateHandlen(hand):
print("n should be bigger than number of letters in the hand")
break
print("Current Hand: ",end =" ")
displayHand(hand)
word = input("Enter word, or a " + '"." ' + "to indicate that you are finished: ")
if word in single_period:
print("Goodbye! Total score: "+str(score)+" points")
break
else:
if isValidWord(word, hand, wordList)!=True:
print("Ivalid word, please try again.")
print('')
else:
word_score=getWordScore(word, n)
score=score+getWordScore(word, n)
print("'"+str(word)+"'"+" earned "+str(word_score)+" points."+" Total: "+str(score)+" points")
hand=updateHand(hand, word)
if calculateHandlen(hand)==0:
print("Run out of letters. Total score: "+str(score)+" points.")
Так, например, первый тест:
Function call: playHand({i: 1, k: 1, l: 1, m: 1})'<edX internal wordList>', 4
Мой вывод (ПРАВИЛЬНО):
Current Hand: k i m l
Enter word, or a "." to indicate that you are finished: milk
'milk' earned 90 points. Total: 90 points
Run out of letters. Total score: 90 points.
None
Второй тест:
Function call: playHand({a: 1, z: 1})'<edX internal wordList>', 2
мой вывод (НЕПРАВИЛЬНО переоценен):
Current Hand: z a
Enter word, or a "." to indicate that you are finished: zo
Ivalid word, please try again.
Current Hand: z a
Enter word, or a "." to indicate that you are finished: za
'za' earned 72 points. Total: 162 points
Run out of letters. Total score: 162 points.
None
*** ERROR: Failing on scoring the word.
Expected '" za " earned 72 points. Total: 72 points'
Got ''za' earned 72 points. Total: 162 points' ***
Итак, как видно, тест берет оценку из предыдущего теста (90) и вместо «обнуления»использует его в качестве новой основы для второго теста (90 + 72 = 162) и т. д. *
У кого-нибудь был этот курс или есть идеи, как его решить?