Запутался в переводе функции для учета абстракции данных - PullRequest
0 голосов
/ 02 октября 2019

В настоящее время работает над функцией, описание которой здесь:

Description of problem

Здесь представлены функции доступа и абстракции данных

def word_time(word, elapsed_time):
    """A data abstrction for the elapsed time that a player finished a word."""
    return [word, elapsed_time]


def word(word_time):
    """An accessor function for the word of a word_time."""
    return word_time[0]


def elapsed_time(word_time):
    """An accessor function for the elapsed time of a word_time."""
    return word_time[1]

И закодированная мной функция, которая не учитывает абстракцию данных:

def fastest_words(word_times, margin=1e-5):
    """A list of which words each player typed fastest."""
    n_players = len(word_times)
    n_words = len(word_times[0]) - 1
    assert all(len(times) == n_words + 1 for times in word_times)
    assert margin > 0
    # BEGIN PROBLEM 9
    maxScore = 1000000
    winner = -1
    playersResults = []

    for i in range(n_players):
        playersResults.append([])

    for x in range(n_words):
        bestScore = float ('inf')
        for y in range(n_players):
            timePassed = word_times[y][x+1][1] - word_times[y][x][1]
            if timePassed < bestScore:
                bestScore = timePassed 
                winner = y 
        for z in range(n_players):
            elapsed = word_times[z][x+1][1] - word_times[z][x][1] 
            if elapsed - bestScore <= margin:
                playersResults[z].append(word_times[z][x+1][0])
    return playersResults

Я пытался перевести ее на абстракцию данных, но она не работает, и я не знаю, почему?

def fastest_words(word_times, margin=1e-5):
    """A list of which words each player typed fastest."""
    n_players = len(word_times)
    n_words = len(word_times[0]) - 1
    assert all(len(times) == n_words + 1 for times in word_times)
    assert margin > 0
    # BEGIN PROBLEM 9
    maxScore = 1000000
    winner = -1
    playersResults = []

    for i in range(n_players):
        playersResults.append([])
    tempComparison = 0
    tempElapsed = 0
    for times in word_times:
        bestScore = float ('inf')
        for y in range(n_players):
            timePassed= elapsed_time(times[y]) - tempComparison
            tempComparison = timePassed
            if timePassed < bestScore:
                bestScore = timePassed 
                winner = y 
        for z in range(n_players):
            elapsed =  elapsed_time(times[y]) - tempElapsed
            tempElapsed = elapsed
            if elapsed - bestScore <= margin:
                playersResults[z].append(word(times))

    return playersResults 

Но я действительно не понимаю, как это сделать?

...