開発環境
- 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 コメント:
コメントを投稿