Грейдер не рассчитывает результат правильно - PullRequest
0 голосов
/ 24 сентября 2019

В настоящее время я работаю над проблемой в курсе 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) и т. д. *

У кого-нибудь был этот курс или есть идеи, как его решить?

1 Ответ

1 голос
/ 24 сентября 2019

Похоже, они не ожидают, что вы накапливаете очки за руки.

Я думаю, IDE вызывает playHand несколько раз, вы сохраняете счет руки в переменной Score, которая является глобальной (global score), который устанавливается в 0 только один раз и вне вашей функции.

Вы можете решить проблему, сделав следующее:

print("'"+str(word)+"'"+" earned "+str(word_score)+" points."+" Total: "+str(score)+" points")

this:

print("'"+str(word)+"'"+" earned "+str(word_score)+" points."+" Total: "+str(word_score)+" points")

Или сбросдо 0 score в начале playHand.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...