ex46和ex48——项目骨架和更复杂的用户输入

在这里插入图片描述

**projects/setup.py**

try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

config = {
    'description': 'My project',
    'author': 'My name',
    'url': 'URL to get it at.',
    'download_url': 'Where to download it.',
    'author_email': 'My email.',
    'version': '0.1',
    'install_requires': ['nose'],
    'packages': ['NAME'],
    'scripts': [],
    'name': 'projectnames'
}

setup(**config)
_init_.py均为空
**ex48/lexicon.py**

def convert_number(s):
    """处理异常和数字的函数"""
    try:
        return int(s)
    except ValueError:
        return None

"""
功能介绍:
1. 名称:lexicon
2. 实参:用户输入的字符串
3. 返回值return:语汇元组格式
4. 若单词不在单词语汇表中,返回原单词
5. TOKEN错误标记,标记用户错误的地方
"""


# 初始化,并设置单词语汇表,全局变量
direction = ['north', 'south', 'east', 'west', 'down', 'up', 'left', 'right', 'back']
verb = ['go', 'stop', 'kill', 'eat']
stop = ['the', 'in', 'of', 'from', 'at', 'it']
noun = ['door', 'bear', 'princess', 'cabinet']


def scan(stuff):
    # 定义方法scan
    sentence = []
    words = stuff.split()
    for word in words:
        if word in direction:
            sentence.append(('direction', word))
        elif word in verb:
            sentence.append(('verb', word))
        elif word in stop:
            sentence.append(('stop', word))
        elif word in noun:
            sentence.append(('noun', word))
        elif convert_number(word):
            sentence.append(('numb', int(word)))
        else:
            sentence.append(('error', word))
    return sentence

**tests/lexicon_tests.py**

from nose.tools import *
from ex48 import lexicon #将NAME文件改为ex48,从ex48文件中导入lexicon模块


def test_direction():
    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"), [('numb', 1234)])
    result = lexicon.scan("12 432")
    assert_equal(result, [('numb', 12),
                          ('numb', 432)])


def test_errors():
    assert_equal(lexicon.scan("asdf23"), [('error', 'asdf23')])
    result = lexicon.scan("bear IAS princess 806")
    assert_equal(result, [('noun', 'bear'),
                          ('error', 'IAS'),
                          ('noun', 'princess'),
                          ('numb', 806)])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值