開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
Python計算機科学新教本 ―新定番問題を解決する探索アルゴリズム、k平均法、ニューラルネットワーク (David Kopec(著)、黒川 利明(翻訳)、オライリージャパン)の1章(簡単な問題)、1.7(練習問題)2の解答を求めてみる。
コード
Python 3
#!/usr/bin/env python3
from unittest import TestCase, main
class CompressedGeneTest(TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_comparess_and_decompress(self):
gene = 'ACGT'
gene_compressed = CompressedGene(gene)
self.assertEqual(gene_compressed.decompress(), gene)
class BitSequence:
def __init__(self) -> None:
self.seq = []
def __getitem__(self, i: int):
return self.seq[i]
class CompressedGene:
def __init__(self, gene: str) -> None:
self.bits = BitSequence()
for nucleotide in gene.upper():
if nucleotide == 'A':
self.bits.seq += [0b0, 0b0]
elif nucleotide == 'C':
self.bits.seq += [0b0, 0b1]
elif nucleotide == 'G':
self.bits.seq += [0b1, 0b0]
elif nucleotide == 'T':
self.bits.seq += [0b1, 0b1]
else:
raise ValueError(f'Invalid Nucleotide: {nucleotide}')
def decompress(self) -> str:
gene: str = ''
for i, b in enumerate(self.bits):
if i % 2 == 0:
if b == 0b0 and self.bits[i + 1] == 0b0:
gene += 'A'
elif b == 0b0 and self.bits[i + 1] == 0b1:
gene += 'C'
elif b == 0b1 and self.bits[i + 1] == 0b0:
gene += 'G'
elif b == 0b1 and self.bits[i + 1] == 0b1:
gene += 'T'
else:
raise ValueError('Invalid bits: {bits}')
return gene
if __name__ == '__main__':
main()
入出力結果(Bash、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))
C:\Users\...>py sample2.py . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK C:\Users\...>
イテレーション可能なビットのシーケンスには出来たものの、int型の使いやすいラッパーにはなってないような。問題の意図を理解できてないかも。
0 コメント:
コメントを投稿