開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考 (Srini Devadas (著)、黒川 利明 (翻訳)、オライリージャパン)の7章(平方根もカッコイイ)、練習問題(問題2)を取り組んでみる。
コード(Emacs)
Python 3
#!/usr/bin/env python3 def bin_search(nums: list, value, interval: int = 0) -> int: ''' >>> bin_search([], 0) -1 >>> bin_search(list(range(10)), 0) 0 >>> bin_search(list(range(10)), 9) 9 >>> bin_search(list(range(10)), 5) 5 >>> bin_search(list(range(10)), 10) -1 >>> bin_search([], 0, 5) -1 >>> bin_search(list(range(10)), 0, 5) 0 >>> bin_search(list(range(10)), 9, 5) 9 >>> bin_search(list(range(10)), 5, 5) 5 >>> bin_search(list(range(10)), 10, 5) -1 ''' low, high = 0, len(nums) - 1 while low <= high and (high - low) >= interval: mid = (low + high) // 2 if nums[mid] < value: low = mid + 1 elif value < nums[mid]: high = mid - 1 else: return mid for i in range(low, high + 1): if nums[i] == value: return i return -1 if __name__ == '__main__': import doctest doctest.testmod()
入出力結果(Terminal, cmd(コマンドプロンプト), Jupyter(IPython))
$ ./sample2.py Trying: bin_search([], 0) Expecting: -1 ok Trying: bin_search(list(range(10)), 0) Expecting: 0 ok Trying: bin_search(list(range(10)), 9) Expecting: 9 ok Trying: bin_search(list(range(10)), 5) Expecting: 5 ok Trying: bin_search(list(range(10)), 10) Expecting: -1 ok Trying: bin_search([], 0, 5) Expecting: -1 ok Trying: bin_search(list(range(10)), 0, 5) Expecting: 0 ok Trying: bin_search(list(range(10)), 9, 5) Expecting: 9 ok Trying: bin_search(list(range(10)), 5, 5) Expecting: 5 ok Trying: bin_search(list(range(10)), 10, 5) Expecting: -1 ok 1 items had no tests: __main__ 1 items passed all tests: 10 tests in __main__.bin_search 10 tests in 2 items. 10 passed and 0 failed. Test passed. $
0 コメント:
コメントを投稿