2017-10-16 1 views
2

이것은 제목에 명시된대로 내 목표를 달성해야하는 코드입니다. 지금 당장 가지고있는 문제는 두 번째 코드 줄입니다. 프로그램을 추가하자마자 오류없이 프로그램이 작동을 멈췄습니다. 도움에 미리 감사드립니다.for 루프를 사용하여 DNA 전사를 촉진했습니다.

seqDNA = input() 
seqDNA = seqDNA.upper() 
comp = '' 
for c in seqDNA: 
    if c == 'a': 
     comp = comp + 'u' 
    elif c == 't': 
     comp = comp + 'a' 
    elif c == 'g': 
     comp = comp + 'c' 
    elif c == 'c': 
     comp = comp + 'g' 
print(comp) 
+0

당신이 * * 두 번째 줄에 무엇을 의미합니까 : 경우 당신은 단순히 이러한 문자, 당신이 .get(..,'')[c]을 통해 사용할 수 있습니다을 무시 를 원하십니까? 'seqDNA = seqDNA.upper()'? –

답변

0

이 소문자들에 대문자를 확인 때문에 올바른 동작입니다.

seqDNA = seqDNA.upper() 다음에 문자열에 대문자 인자를 포함합니다. 예를 들면 : 우리가 지금 for c in seqDNA으로 반복하면

seqDNA = 'UGCGGCGAATATTT' 

c는 대문자 (즉 'C')를 포함합니다. 이제 c == 'C'을 비교하면 'c' == 'C', 그 외는 이 아니라이됩니다. 첫째 elif 문의 모든 시퀀스의 고가이며, 또한 당신은 comp = comp + 'u' 작업을 수행 :

말했다되고 그건
seqDNA = input() 
seqDNA = seqDNA.upper() 
comp = '' 
for c in seqDNA: 
    if c == 'A': 
     comp = comp + 'u' 
    elif c == 'T': 
     comp = comp + 'a' 
    elif c == 'G': 
     comp = comp + 'c' 
    elif c == 'C': 
     comp = comp + 'g' 
print(comp)

, 코드가 비효율적으로 작동합니다

그래서 당신은 할 시험 항목을 수정해야합니다. 문자열 추가는 O (n)에서 실행되며이 알고리즘은 O()입니다.

사전을 사용하여 으로 개선하고 ** 수동으로 추가하는 경우에는 ''.join(..)을 사용합니다.

seqDNA = input() 
seqDNA = seqDNA.upper() 
trans = { 'A': 'u', 'T': 'a', 'G': 'c', 'C': 'g' } comp = ''.join(trans[c] for c in seqDNA) 
print(comp)

이것은 'A' 이외의 seqDNA이 문자가 포함 된 경우 KeyError, 'T', 'G''C'을 올릴 것이다. 어느 것이 합리적인 행동으로 보입니다.

seqDNA = input() 
seqDNA = seqDNA.upper() 
trans = { 
    'A': 'u', 
    'T': 'a', 
    'G': 'c', 
    'C': 'g' 
} 
comp = ''.join(trans.get(c,'') for c in seqDNA) 
print(comp)
+1

사전에 익숙하지 않은 경우에도 코드 최적화에 대해 이해해 주셔서 감사합니다. 내가해야 할 일은 내가 기억하지 못했던 것입니다. 결국 간단히 말하면 위로 올리는 것입니다. comp = comp.upper() – forsale