Practical Programming
An Introduction to Computer Science
Using Python 3
(Pragmatic Programmers)
(Pragmatic Bookshelf)
Paul Gries (著) Jennifer Campbell (著)
Jason Montojo (著) Lynn Beighley (編集)
開発環境
- OS X Yosemite - Apple (OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Python 3.4 (プログラミング言語)
Practical Programming: An Introduction to Computer Science Using Python 3 (Pragmatic Programmers) (Paul Gries (著)、Jennifer Campbell (著)、Jason Montojo (著)、Lynn Beighley (編集)、Pragmatic Bookshelf)のChapter 13(Searching and Sorting)、13.7(Exercises), 1.を解いてみる。
13.7(Exercises), 1.
コード(BBEdit)
sample1.py
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
# while loop
def linearSeardh1(lst, value):
'''(list, object) -> int
Return the index of the last occurance of value in lst, or return -1
if value i not in lst.
>>> linearSeardh1([2, 5, 1, -3], 5)
1
>>> linearSeardh1([2, 4, 2], 2)
2
>>> linearSeardh1([2, 5, 1, -3], 4)
-1
>>> linearSeardh1([], 5)
-1
'''
i = len(lst) -1
while i != -1 and lst[i] != value:
i -= 1
if i == -1:
return -1
else:
return i
# for loop
def linearSeardh2(lst, value):
'''(list, object) -> int
Return the index of the last occurance of value in lst, or return -1
if value i not in lst.
>>> linearSeardh2([2, 5, 1, -3], 5)
1
>>> linearSeardh2([2, 4, 2], 2)
2
>>> linearSeardh2([2, 5, 1, -3], 4)
-1
>>> linearSeardh2([], 5)
-1
'''
for i in range(len(lst) - 1, -1, -1):
if lst[i] == value:
return i
return -1
# sentinel search
def linearSeardh3(lst, value):
'''(list, object) -> int
Return the index of the last occurance of value in lst, or return -1
if value i not in lst.
>>> linearSeardh3([2, 5, 1, -3], 5)
1
>>> linearSeardh3([2, 4, 2], 2)
2
>>> linearSeardh3([2, 5, 1, -3], 4)
-1
>>> linearSeardh3([], 5)
-1
'''
lst.insert(0, value)
i = len(lst) - 1
while lst[i] != value:
i -= 1
lst.pop(0)
if i == 0:
return -1
else:
return i - 1
if __name__ == '__main__':
import doctest
doctest.testmod()
入出力結果(Terminal, IPython)
$ ./sample1.py -v
Trying:
linearSeardh1([2, 5, 1, -3], 5)
Expecting:
1
ok
Trying:
linearSeardh1([2, 4, 2], 2)
Expecting:
2
ok
Trying:
linearSeardh1([2, 5, 1, -3], 4)
Expecting:
-1
ok
Trying:
linearSeardh1([], 5)
Expecting:
-1
ok
Trying:
linearSeardh2([2, 5, 1, -3], 5)
Expecting:
1
ok
Trying:
linearSeardh2([2, 4, 2], 2)
Expecting:
2
ok
Trying:
linearSeardh2([2, 5, 1, -3], 4)
Expecting:
-1
ok
Trying:
linearSeardh2([], 5)
Expecting:
-1
ok
Trying:
linearSeardh3([2, 5, 1, -3], 5)
Expecting:
1
ok
Trying:
linearSeardh3([2, 4, 2], 2)
Expecting:
2
ok
Trying:
linearSeardh3([2, 5, 1, -3], 4)
Expecting:
-1
ok
Trying:
linearSeardh3([], 5)
Expecting:
-1
ok
1 items had no tests:
__main__
3 items passed all tests:
4 tests in __main__.linearSeardh1
4 tests in __main__.linearSeardh2
4 tests in __main__.linearSeardh3
12 tests in 4 items.
12 passed and 0 failed.
Test passed.
$
0 コメント:
コメントを投稿