開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
Practical Programming: An Introduction to Computer Science Using Python 3.6 (Paul Gries(著)、Jennifer Campbell(著)、Jason Montojo(著)、Pragmatic Bookshelf)のChapter 11(Storing Data Using Other Collection Types)、Exercise 7、8、9の解答を求めてみる。
コード
#!/usr/bin/env python3
from unittest import TestCase, main
from typing import Dict
import random
print('7, 8, 9.')
class TestCountDuplicates(TestCase):
def test_empty_dict(self):
self.assertEqual(count_duplicate({}), 0)
def test_empty(self):
self.assertEqual(count_duplicate({'a': 1, 'b': 2}), 0)
def test_one(self):
self.assertEqual(count_duplicate(dict(a=1, b=1)), 1)
def test_one1(self):
self.assertEqual(count_duplicate(dict(a=1, b=1, c=1)), 1)
def test_one2(self):
self.assertEqual(count_duplicate(dict(a=1, b=2, c=1, d=3, e=1)), 1)
def test_two(self):
self.assertEqual(count_duplicate(
dict(a=1, b=2, c=3, d=2, e=3, f=2, g=4)), 2)
class TestIsBalanced(TestCase):
def test_true(self):
self.assertTrue(is_balanced(dict(R=0.1, G=0.2, B=0.7)))
def test_false(self):
self.assertFalse(is_balanced(dict(R=0.2, G=0.2, B=0.7)))
def test_random(self):
for _ in range(100):
color = {'R': round(random.random(), 1),
'G': round(random.random(), 1),
'B': round(random.random(), 1)}
if color['R'] + color['G'] + color['B'] == 1:
self.assertTrue(is_balanced(color))
else:
self.assertFalse(is_balanced(color))
class TestDictIntersect(TestCase):
def test_empty(self):
self.assertEqual(dict_intersect(dict(a=1, b=2), dict(a=2, b=3)), {})
def test_one(self):
self.assertEqual(
dict_intersect(dict(a=1, b=2), dict(c=3, b=2)), dict(b=2))
def test_two(self):
self.assertEqual(
dict_intersect(dict(a=1, b=2, c=3, d=4),
dict(a=2, b=2, c=3, d=1, e=2, f=5)),
dict(b=2, c=3)
)
def count_duplicate(d: dict) -> int:
s1 = set()
s2 = set()
for value in d.values():
if value in s1:
s2.add(value)
s1.add(value)
return len(s2)
def is_balanced(color: Dict[str, float]) -> bool:
return sum(color.values()) == 1
def dict_intersect(d1: dict, d2: dict) -> dict:
return dict(set(d1.items()) & set(d2.items()))
if __name__ == "__main__":
main()
入出力結果(Zsh、PowerShell、Terminal、Jupyter(IPython))
% ./sample7.py -v
7, 8, 9.
test_empty (__main__.TestCountDuplicates) ... ok
test_empty_dict (__main__.TestCountDuplicates) ... ok
test_one (__main__.TestCountDuplicates) ... ok
test_one1 (__main__.TestCountDuplicates) ... ok
test_one2 (__main__.TestCountDuplicates) ... ok
test_two (__main__.TestCountDuplicates) ... ok
test_empty (__main__.TestDictIntersect) ... ok
test_one (__main__.TestDictIntersect) ... ok
test_two (__main__.TestDictIntersect) ... ok
test_false (__main__.TestIsBalanced) ... ok
test_random (__main__.TestIsBalanced) ... ok
test_true (__main__.TestIsBalanced) ... ok
----------------------------------------------------------------------
Ran 12 tests in 0.002s
OK
%
0 コメント:
コメントを投稿