0

文字列を取り、それを次のようなリストに変換するプログラムがあります - ['CTTC', 'CGCT', 'TTTA', 'CATG']。(実際にはこれよりもずっと長い)。次に、これらのリスト要素の最初のC or A or T or G文字が a である要素の数を見つける必要があります。これは、関数を使用して端末から取得する必要があり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

1 に答える 1

1

raw_inputではなく、を使用してくださいinput。Python 2.xでは、input有効なPythonコードが必要ですが、asraw_inputは入力を文字列に変換します。Python 3.xではinput、と同じように機能しraw_inputます。

最初の文字の数を数えるという実際の問題を解決するには、adefaultdictまたは。のいずれかを使用できますCounterCounterPythonのバージョンが2.7以降の場合にのみ使用できます。defaultdict2.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
于 2013-02-11T04:14:09.087 に答える