这几天有点时间,想学点Python基础,今天看到了《learn python the hard way》的 Ex48,这篇文章主要记录一些工具的安装,以及scan 函数的实现。
首先与Ex48相关的章节有前面的Ex46, Ex47,故我们需要先安装一些工具,主要是一些包管理和测试框架的软件:
Install the following Python packages:
- pip from http://pypi.python.org/pypi/pip
- distribute from http://pypi.python.org/pypi/distribute
- nose from http://pypi.python.org/pypi/nose/
- virtualenv from http://pypi.python.org/pypi/virtualenv
实际上对于Linux用户来说安装比较简单,首先安装 sudo apt-get install python-pip,接下去的3个都可以使用pip 来安装,即
pip install distribute/nose/virtualenv
模仿Ex46 的描述,新建工程目录为ex47,进而建立以下目录和文件:
setup.py 如下,一些参数可以设置成自己想要的,如NAME 更改为需要测试的多个模块名:
1 |
try:
from setuptools import setup except ImportError: from distutils.core import setup config = { setup(**config) |
在ex47 和 tests 目录下各touch新建一个__init__.py 文件。
测试文件 tests/lexicon_tests.py 摘自网站:
1 |
from nose.tools
import * from ex47 import lexicon def test_directions(): def test_verbs(): def test_stops(): def test_nouns(): def test_numbers(): def test_errors(): |
上面程序中 from ex47 import lexicon 表示从ex47 中 导入lexicon 模块,即现在我们要在ex47 目录下写一个lexicon.py 文件,文件主要是scan 函数的实现,根据网站的提示,自己实现如下:
1 |
#!/usr/bin/env python
#coding=utf-8 import re def convert_number(s): def scan(input_str): words = input_str. pattern = re. direction_list = [ for word elif word elif word |
程序中使用正则表达式来匹配数字字符串,请google re 模块之。
执行测试命令,即使用lexicon_tests.py 去测试lexicon.py 里面的函数,输出如下:
simba@ubuntu:~/Documents/code/python/projects/ex47$ nosetests
.........
----------------------------------------------------------------------
Ran 9 tests in 0.081s
OK
为什么是9个tests 呢,上面只有6个,实际上我在ex47 下还有个game.py,而针对这个模块的测试文件game_tests.py也存在tests 目录下,且里面有3个test, 故这个项目总的测试个数是9个,需要针对一个模块写一个测试文件。