Возникли проблемы при использовании int (), split () и тестов носа с Python - PullRequest
0 голосов
/ 12 декабря 2018

Это мой первый пост.

У меня есть блок кода, на котором я пытаюсь запустить тестирование носа.

Существует очень простое исправление для запуска этого кода, заключающееся в помещении целых чисел в кавычки.

То, что я хочу сделать, - это иметь словарь, который использует строки и целые числа втолковый словарь.Вот мой словарь с функцией сканирования.

lexicon = {
    '1234': 'number',
    3: 'number',
    91234: 'number'
}

def scan(sentence):
    results = []
    words = sentence.split()
    for word in words:
        word_type = lexicon.get(word)
        results.append((word_type, word))
    return results

Приведенный выше код импортирован в мой тестовый файл, который содержит этот блок кода.

from nose.tools import *
from ex48 import lexicon
def test_numbers():
    assert_equal(lexicon.scan('1234'), [('number', '1234')])
    result = lexicon.scan('3 91234')
    assert_equal(result, [('number', 3),
                      ('number', 91234)])

Часть '1234' выполняется простохорошо.

Но есть ли место в коде, где я могу использовать int (), чтобы при выполнении split () на "3 91234" он возвращал два целых числа и правильно использовал мой словарь лексики для обратного вызовасоответствующие значения?

Спасибо за помощь!

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете использовать метод isnumeric (), чтобы проверить, является ли строка числовой, а затем выполнить преобразование в int.

lexicon = {
    '1234': 'number',
    3: 'number',
    91234: 'number'
}

def scan(sentence):
    results = []
    words = sentence.split()
    for word in words:
        if word.isnumeric(): #change
            word = int(word) #change
        word_type = lexicon.get(word)
        results.append((word_type, word))
    return results

Обратите внимание, что после этого изменения вам необходимо сохранить все числовые ключи как intиначе он не будет извлекать цифровые ключи, хранящиеся в виде строки.

...