2013-02-11 56 views
0

我有一個程序需要一個字符串並將其轉換爲列表,如下所示 - ['CTTC', 'CGCT', 'TTTA', 'CATG']。 (它實際上比這更長)。現在我需要找出有多少這些列表元素的第一個字母爲C or A or T or G。這需要從終端取得,即使用input功能。輸入數據類型錯誤

現在據我所知,在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'代替。 – 2013-02-11 03:49:39

+0

我在我的程序中使用了輸入,並且沒有任何問題。你可以看到,如果你瀏覽代碼 – 2013-02-11 03:58:55

+0

儘管如此,這是問題。 – 2013-02-11 04:05:12

回答

1

使用raw_input而不是input。在Python 2.x中,input需要有效的Python代碼,其中raw_input將把輸入轉換爲字符串。在Python 3.x中input的作用與raw_input相同。

爲了解決你的實際問題,這是計算的第一個字母的數量,你可以使用一個defaultdictCounterCounter僅在您的Python版本爲2.7及以上版本時可用。在2.5中增加了defaultdict

>>> 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