2013-02-11 2 views
0

문자열을 가져 와서 다음과 같은 목록으로 변환하는 프로그램이 있습니다 - ['CTTC', 'CGCT', 'TTTA', 'CATG']. (실제로는 이것보다 훨씬 길다). 이제이 목록 요소 중 첫 번째 문자로 C or A or T or G이 몇 개 있는지 찾아야합니다. 이것은 단말에서, 즉 input 기능을 사용해야합니다. 파이썬 3.2 입력 기능의 데이터 유형에입력 데이터 유형 오류

지금까지 내가 아는이, 문자열 (str)이 아닌 정수 (int를) 원하는대로 촬영의 기본입니다 (isinstance를 사용하여 볼 수 있습니다). 그러나 대학 서버를 사용하고 있기 때문에 파이썬 버전은 오래되었습니다 (2.7 또는 그 이후지만 3.0 이하). 이 경우 입력 기능을 사용하여 사용자에게 문자 initial = input("Choose a letter:")을 선택하도록 요청하고 문자 (A, T, G 또는 C)를 입력하면 오류 NameError: name 'C' is not defined이 표시됩니다. isinstance을 사용하여 데이터 유형을 검사했을 때, 파이썬 버전이 int으로 입력 데이터 유형을 사용한다는 것을 알게되었습니다. 문자열로 변환하려고하면 같은 오류가 발생합니다. 그것은 버전의 문제인가 아니면 내가 잘못하고있는 것인가입니다. 내 코드는 아래와 같습니다.

import sys 
#import random 

file = open(sys.argv[1], 'r') 
string = '' 
for line in file: 
    if line.startswith(">"): 
     pass 
    else: 
     string = string + line.strip() 


w = input("Please enter window size:") 
test = [string[i:i+w] for i in range (0,len(string),w)] 
#seq = input("Please enter the number of sequences you wish to read:") 
#first = random.sample((test), seq) 
print test 
l = input("Enter letter for which you wish to find the probability:") 
lin = str(l) 
print lin 
+4

'input' 파이썬 2 raw_input' 대신 '파이썬 3.보다 완전히 다른 것입니다 : 여기

>>> from collections import Counter >>> i = ['CTTC','CGCT','TTTA','CATG','ABCD'] >>> c = Counter(x[0] for x in i) >>> c['C'] 3 

defaultdict 방법입니다. –

+0

내 프로그램에서 입력을 사용했지만 문제없이 작동했습니다. 그럼에도 불구하고 코드 –

+0

을 살펴 본다면 그것이 문제라는 것을 알 수 있습니다. –

답변

1

사용 raw_input하지 input. Python 2.x에서 input은 유효한 파이썬 코드를 기대합니다. 여기에서 raw_input은 입력을 문자열로 변환합니다. Python 3.x에서 inputraw_input과 동일하게 작동합니다.

은 첫 글자의 수를 세고 당신의 실제 문제를 해결하려면 중 하나 defaultdict 또는 Counter를 사용할 수 있습니다. Counter은 Python 버전이 2.7 이상인 경우에만 사용할 수 있습니다. defaultdict을 2.5에 첨가 하였다.

>>> from collections import defaultdict 
>>> d = defaultdict(int) 
>>> for x in i: 
... d[x[0]] += 1 
... 
>>> d['C'] 
3