2013-02-11 4 views
0

У меня есть программа, которая берет строку и преобразует ее в список, который выглядит следующим образом: ['CTTC', 'CGCT', 'TTTA', 'CATG']. (на самом деле это намного дольше, чем это). Теперь мне нужно найти, сколько из этих элементов списка имеет C or A or T or G в качестве его первой буквы. Это необходимо взять с терминала, то есть с помощью функции input.Ошибка ввода данных datatype

Сейчас, насколько я знаю, в Python 3.2 типа данных функции ввода по умолчанию, принятым в виде строки (str), а не как целое (int) (можно увидеть с помощью isinstance). Однако, поскольку я использую сервер колледжа, версия python старше (я думаю, 2.7 или новее, но ниже 3.0). В этом случае, когда я использую функцию ввода, чтобы попросить пользователя выбрать букву initial = input("Choose a letter:"), и когда я ввожу любую букву (A, T, G или C), она дает мне ошибку NameError: name 'C' is not defined. Когда я проверил тип данных с помощью isinstance, я понял, что версия python принимает тип данных ввода как 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' является Python 2 это совершенно другая вещь, чем в Python 3. Используйте' raw_input' вместо этого. –

+0

Я использовал ввод в своей программе и работал без каких-либо проблем. Вы можете видеть, что если вы просматриваете код –

+0

, тем не менее это проблема. –

ответ

1

Использование raw_input, не input. В Python 2.x, input ожидает действительный код Python, где raw_input преобразует вход в строку. В Python 3.x input работает так же, как raw_input.

Чтобы решить фактической проблемы, которая подсчитывает количество первых букв, вы можете использовать либо defaultdict или Counter. Counter доступен только в том случае, если ваша версия Python равна 2,7 и выше. defaultdict был добавлен в 2.5.

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

Вот defaultdict подход:

>>> from collections import defaultdict 
>>> d = defaultdict(int) 
>>> for x in i: 
... d[x[0]] += 1 
... 
>>> d['C'] 
3 
Смежные вопросы