2014-10-23 2 views
2

Я новичок в мире программирования, изучающий код на Python. Этот тестовый код ниже дал мне проблему, пытаясь закодировать сам модуль. Пожалуйста, любая помощь о том, как его кодировать, будет высоко оценена ,Как создать модуль из тестового файла

from nose.tools import * 
from glass import moviy 


def test_directions(): 
    assert_equal(lexicon.scan("north"), [('direction', 'north')]) 
    result = lexicon.scan("north south east") 
    assert_equal(result, [('direction', 'north'), 
         ('direction', 'south'), 
         ('direction', 'east')]) 

def test_verbs(): 
    assert_equal(lexicon.scan("go"), [('verb', 'go')]) 
    result = lexicon.scan("go kill eat") 
    assert_equal(result, [('verb', 'go'), 
         ('verb', 'kill'), 
         ('verb', 'eat')]) 

def test_stops(): 
    assert_equal(lexicon.scan("the"), [('stop', 'the')]) 
    result = lexicon.scan("the in of") 
    assert_equal(result, [('stop', 'the'), 
         ('stop', 'in'), 
         ('stop', 'of')]) 


def test_nouns(): 
    assert_equal(lexicon.scan("bear"), [('noun', 'bear')]) 
    result = lexicon.scan("bear princess") 
    assert_equal(result, [('noun', 'bear'), 
         ('noun', 'princess')]) 

def test_numbers(): 
    assert_equal(lexicon.scan("1234"), [('number', 1234)]) 
    result = lexicon.scan("3 91234") 
    assert_equal(result, [('number', 3), 
         ('number', 91234)]) 


def test_errors(): 
    assert_equal(lexicon.scan("ASDFADFASDF"), [('error', 'ASDFADFASDF')]) 
    result = lexicon.scan("bear IAS princess") 
    assert_equal(result, [('noun', 'bear'), 
         ('error', 'IAS'), 
         ('noun', 'princess')]) 
+0

Что не так с использованием словаря? –

+0

Вы имеете в виду Python Dictionary? – Rpro

ответ

0

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

Это основная идея TDD

Как Игнасио сказал, вы можете использовать словарь. Он пройдет тест. Но это не очень полезная реализация, поскольку вы не можете иметь ключ для всех чисел, например. Это будет трюк. Но не будет работать в реальной жизни.

Основанный на ваших тестах, у вас есть объект лексикона.

class Lexicon(object): 
    def __init__(self): 
     pass 
    def scan(self, inputStr): 

Обратите внимание, что все возвраты являются векторами кортежей. Каждый кортеж - это слово во входной строке. Итак, вы можете предположить, что оно разбито пространством.

tokens = inputStr.split(" ") 

Создать вектор для сохранения ответов:

answers = [] 

И вы можете начать гадать, от каждого маркера.

for token in tokens: 

Давайте сначала попробуем, если это номер.

try: 
    answers.append(("number", int(token))) 
except: 
    pass 

И в конце концов, вы возвращаетесь ответы

return answers 

После этого вы можете запустить тест номера:

lexicon = Lexicon() 
test_numbers() 

И никакой ошибки не будет.

После этого вы можете проверить строки в списках. Сначала создайте списки в объекте.

class Lexicon(object): 
    directions = [ "north", "south", "east", "west"] 
    def __init__(self): 
    ... 

И в функции проверки вы проверяете, совпадает ли токен в списке направлений.

... 
pass 
if token in self.directions: 
    answers.append(("direction",token)) 

Теперь запустите:

lexicon = Lexicon() 
test_numbers() 
test_directions() 

И никакие erros не будет! Идея похожа на другие значения.

Кстати. Если у вас нет таких понятий, как class, tuple, dict. Я sugest вы посмотрите here

+0

Ответьте на многое, теперь я хочу понять, что в приведенном ниже коде; класс номер (объект): Защиту __init __ (само, название, описание): self.name = имя self.description = описание self.paths = {} \t \t Защиту идти (я, направление): return self.paths.get (direction) def add_paths (self, paths): \t self.paths.update (paths) – Rpro

+0

первый. если это хорошо, проголосуйте! ;) –

+0

Код, который вы запросили, - это определение класса –

Смежные вопросы