Differences between revisions 60 and 61
Revision 60 as of 2006-03-10 10:01:12
Size: 5484
Editor: 211
Comment:
Revision 61 as of 2006-03-13 08:56:17
Size: 5484
Editor: 211
Comment:
Deletions are marked like this. Additions are marked like this.
Line 8: Line 8:
== 2006-03-10 == == 2006-03-13 ==

(<-)

[../2006-02]

[../2006-04]

(->)

2006 / March
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
-1- -2- -3- -4-
공휴일
-5- -6- -7- -8- -9- -10- -11-
-12- -13- -14- -15- -16- -17- -18-
-19- -20- -21- -22- -23- -24- -25-
-26- -27- -28- -29- -30- -31-
리눅스마스타1급1차시험일


2006-03-13


2006-03-06

EightQueenProblem

  • 고전적 퍼즐게임. 체스판위의 Queen은 장기의 차처럼 전후좌우 이동이 가능하며, 대각선으로도 가능하다. 총 8*8 크기의 체스판위에 Queen 8개를 올려놓고 이들이 서로 공격하지 않도록 자리배치하는 문제.


2006-03-03

어제에 이어서...

1. classmethod : single fasta file을 title과 sequence 부분으로 나눠줄때 사용했다.

  • 일반 메쏘드가 첫 인수(self)로 인스턴스 객체를 받는 것에 비해서 클래스 메쏘드는 첫 인수로 클래스 객체를 받는다. 메쏘드를 클래스 메쏘드로 변환하기 위해서 classmethod()를 호출해야 한다. 클래스 메쏘드 호출시 첫 번째 인수로 자동으로 해당 클래스 객체가 전달된다.

@classmethod
    def FastaParsing(klass, aStr):
        fasta = klass()
        lines = aStr.splitlines()
        fasta.title = lines[0][1:]
        fasta.sequence = ''.join(lines[1:])
        return fasta
  • 이 함수는 DNA 클래스 안에 있다. DNA 클래스 밖으로 뺐더니 TypeError: 'classmethod' object is not callable 에러가 발생했다.

2. TypeError: unbound method FastaParsing() must be called with DNA instance as first argument (got str instance instead)

  • FastaParsing()을 classmethod를 사용하지 않고 했더니 이와 같은 에러 메세지가 발생했다.

3. Unbound Class Method : 클래스 객체를 이용하여 메쏘드를 호출하는 것. 예) MyClass.set(c, 'egg'))

4. 질량 리스트를 질량이 작은 순으로 출력하기

  • ', '.join('%.2f'%mass for mass in sorted(masses))


2006-03-02

어제에 이어서...

1. enumerate() : peptide list들의 질량 list값들을 unittest에서 test할때 사용했다. 하나의 int값을 test할때는 assertAlmostEqual을 사용

  • for문을 이용할 때 요소의 값뿐만 아니라 인덱스 값도 함께 필요할 때 사용한다. (인덱스, 요소값)튜플 자료를 반복적으로 넘겨준다.
  • 문제점 발견) Protein() 안에 있는 RestrictionEnzymes를 깔끔하게 하기 위해서 밖으로 뺐더니 NameError: name 'Trypsine' is not defined 가 발생했다.

  • 문제점 해결) class Trypsin 보다 위에 있었기 때문에 에러가 발생했다. 아래에 두면 OK. 왜냐하면 이 녀석이 Trypsine을 호출할 때 위에서부터 검색하기 때문이다.

2. StringIO() : print 출력을 문자열로 저장하는 방법은 StringIO 표준 모듈을 이용하는 것이 간편하다. StringIO 모듈의 StringIO 클래스는 문자열을 파일 객체처럼 입.출력한다.

3. FastaGenerator() : multi fasta file을 받아서 record 단위로 출력해 주는 함수이다.

  • next() : 순차적으로 자료를 넘기고 더 이상 자료를 넘겨줄 수 없는 경우에는 StopIteration 예외를 발생한다. 파일 객체가 라인 단위의 반복자를 지원한다.

def FastaGenerator(aFile):
    lines = [aFile.next()]
    for line in aFile:
        if line.startswith('>'):
            yield ''.join(lines)
            lines = []
        lines.append(line)
    else:
        yield ''.join(lines)
  • 의문) : lines = [aFile.next()]에서 내 생각엔 aFile.next()를 쓰지 않아도 될거 같은데 없으면 AssertionError: '>title1\nATGC\nATGC\n' != " 가 발생한다. ???

 def testFastaGenerator(self):
        input = StringIO('''\
>title1
ATGC
ATGC
>title2
TACG
TACG
''')
        g = FastaGenerator(input)
        expect = '''\
>title1
ATGC
ATGC
'''
        self.assertEquals(expect, g.next())
        expect1 = '''\
>title2
TACG
TACG
'''
        self.assertEquals(expect1, g.next())
  • 의문 : g.next()로 하지 않고, FastaGenerator(input)을 직접 사용했더니 AssertionError: '>title2\nTACG\nTACG\n' != 'TACG\nTACG\n' 에러가 발생했다. 왜 그럴까?

    -> AssertionError는 assert문이 실패할 때 발생한다.

4. lines.splitlines() : 문자열을 라인단위로 분리한다. 결과는 리스트


2006-03-01

오늘의 문제 : 입력으로 multi FASTA format으로 구성된 DNA 서열을 받고, 출력으로 peptide 조각들의 질량을 돌려준다.

  • 1단계 : CRC card를 작성해 보자.
  • 2단계 : unittest로 코드 작성

1. map -> start codon의 인덱스를 찾기 위해서 사용했다. 여러개 있을 수도 있기 때문에 사용

  • map함수의 첫번째 인수는 함수이고, 두번째 인수는 리스트이다. 두번째 인수의 모든 아이템들은 첫 인수인 함수에 적용되고 결과로 리스트를 리턴한다.
  • startcodon = map(sequence.find, StartCodon)

주의) 내가 받는 값의 type을 잘 살펴보자...

2. yield : protein sequence를 받아서 restriction enzyme으로 자를 때 사용했다.

  • 일반 함수와 발생자의 큰 차이점은 일반 함수는 한번 함수가 호출되면 종료할 때까지 모든 일을 마친 결과를 넘겨야 하는 반면에, 발생자는 정보를 생성하는 중간에 결과를 넘길 수 있다.


(<-)

[../2006-02]

[../2006-04]

(->)


CategoryWebLogYong

parkpro/2006-03 (last edited 2011-08-03 11:00:55 by localhost)

web biohackers.net