開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Python (プログラミング言語)
初めてのコンピュータサイエンス(Jennifer Campbell、Paul Gries、Jason Montojo、Greg Wilson(著)長尾 高弘(翻訳))の12章(各種ツール)、12.7(練習問題)、12-20.を解いてみる。
12.7(練習問題)、12-20.
コード(BBEdit)
sample.py
#!/usr/bin/env python3.3 #-*- coding: utf-8 -*- import nose def findButNotAfter(source, prefix, pattern): '''sourceの中で最初にpatternが現れた位置(ただし直前がprefixになっていてはなりま せん)の添字をかえします。また、sourceの中でpatternが現れない場合、patternが空文字 の場合、prefixが空文字の場合、patternの直前が常にprefixの場合はNoneを返します。 例えば、findButNotAfter('abcdcd', 'ab', 'cd')は、4を返します。最初のcdは直前に aがあるので条件を満たさないのです。しかし、 findButNotAfter('abxcdcd', 'ab', 'cd')なら3を返します。''' if pattern == '' or prefix == '': return None start = 0 result = source.find(pattern) while result != -1: if source[result - len(prefix):result] != prefix: break else: start = result + 1 result = source.find(pattern, start) if result == -1: return None return result def test_allEmpty(): assert findButNotAfter('', '', '') == None def test_sourceAndPrefixEmpty(): assert findButNotAfter('', '', 'a') == None def test_sourceAndPatternEmpty(): assert findButNotAfter('', 'a', '') == None def test_patternAndPrefixEmpty(): assert findButNotAfter('a', '', '') == None def test_sourceEmpty(): assert findButNotAfter('', 'a', 'b') == None def test_patternEmpty(): assert findButNotAfter('a', '', 'b') == None def test_prefixEmpty(): assert findButNotAfter('a', 'a', '') == None def test_notFind(): assert findButNotAfter('abcd', 'a', 'bc') == None def test_find2(): assert findButNotAfter('abcdcd', 'ab', 'cd') == 4 def test_find2(): assert findButNotAfter('abxcdcd', 'ab', 'cd') == 3 if __name__ == '__main__': nose.runmodule()
入出力結果(Terminal)
$ ./sample.py ......... ---------------------------------------------------------------------- Ran 9 tests in 0.002s OK $
0 コメント:
コメントを投稿