我似乎在比较python中的字符串方面遇到了一个小问题。我是从文本文件中读入,然后一次比较三个字符。似乎总是认为第一个" if"声明是否正确让我感到困惑。 (请注意,输入作为测试打印在循环中,并提供正确的字符串进行比较)。感谢您的任何帮助/建议:)
文本文件输入:
ACATTTGCTTCTGACACAACTGTGTTCACTAGCAACCTCAAACAGACACCATGGTGCATCTGACTCCTGa GGAGAAGTCTGCCGTTACTGCCCTGTGGGGCAAGGTGAACGTGGATGAAGTTGGTGGTGAGGCCCTGGGC AGGCTGCTGGTGGTCTACCCTTGGACCCAGAGGTTCTTTGAGTCCTTTGGGGATCTGTCCACTCCTGATG CTGTTATGGGCAACCCTAAGGTGAAGGCTCATGGCAAGAAAGTGCTCGGTGCCTTTAGTGATGGCCTGGC TCACCTGGACAACCTCAAGGGCACCTTTGCCACACTGAGTGAGCTGCACTGTGACAAGCTGCACGTGGAT CCTGAGAACTTCAGGCTCCTGGGCAACGTGCTGGTCTGTGTGCTGGCCCATCACTTTGGCAAAGAATTCA CCCCACCAGTGCAGGCTGCCTATCAGAAAGTGGTGGCTGGTGTGGCTAATGCCCTGGCCCACAAGTATCA CTAAGCTCGCTTTCTTGCTGTCCAATTTCTATTAAAGGTTCCTTTGTTCCCTAAGTCCAACTACTAAACT GGGGGATATTATGAAGGGCCTTGAGCATCTGGATTCTGCCTAATAAAAAACATTTATTTTCATTGC
infile = open('DNA.txt', 'r')
while True:
line = infile.readline()
if not line: break
a = []
for i in range (0, len(line), 3):
DNA = line[i:i+3]
print DNA
if DNA == 'ATT' or 'ATC' or 'ATA':
a.append('I')
elif DNA == 'CTT' or 'CTC' or 'CTA' or 'CTG' or 'TTA' or 'TTG':
a.append('L')
elif DNA == 'GTT' or 'GTC' or 'GTA' or 'GTG':
a.append('V')
elif DNA == 'TTT' or 'TTC':
a.append('F')
elif DNA == 'ATG':
a.append('M')
else:
a.append('X')
print str(a)
输出:
ACA
TTT
GCT
TCT
GAC
ACA
ACT
GTG
TTC
ACT
AGC
AAC
CTC
AAA
CAG
ACA
CCA
TGG
TGC
ATC
TGA
CTC
CTG
a
['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']
GGA
GAA
GTC
TGC
CGT
TAC
TGC
CCT
GTG
GGG
CAA
GGT
GAA
CGT
GGA
TGA
AGT
TGG
TGG
TGA
GGC
CCT
GGG
C
['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']
AGG
CTG
CTG
GTG
GTC
TAC
CCT
TGG
ACC
CAG
AGG
TTC
TTT
GAG
TCC
TTT
GGG
GAT
CTG
TCC
ACT
CCT
GAT
G
['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']
CTG
TTA
TGG
GCA
ACC
CTA
AGG
TGA
AGG
CTC
ATG
GCA
AGA
AAG
TGC
TCG
GTG
CCT
TTA
GTG
ATG
GCC
TGG
C
['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']
TCA
CCT
GGA
CAA
CCT
CAA
GGG
CAC
CTT
TGC
CAC
ACT
GAG
TGA
GCT
GCA
CTG
TGA
CAA
GCT
GCA
CGT
GGA
T
['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']
CCT
GAG
AAC
TTC
AGG
CTC
CTG
GGC
AAC
GTG
CTG
GTC
TGT
GTG
CTG
GCC
CAT
CAC
TTT
GGC
AAA
GAA
TTC
A
['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']
CCC
CAC
CAG
TGC
AGG
CTG
CCT
ATC
AGA
AAG
TGG
TGG
CTG
GTG
TGG
CTA
ATG
CCC
TGG
CCC
ACA
AGT
ATC
A
['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']
CTA
AGC
TCG
CTT
TCT
TGC
TGT
CCA
ATT
TCT
ATT
AAA
GGT
TCC
TTT
GTT
CCC
TAA
GTC
CAA
CTA
CTA
AAC
T
['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']
GGG
GGA
TAT
TAT
GAA
GGG
CCT
TGA
GCA
TCT
GGA
TTC
TGC
CTA
ATA
AAA
AAC
ATT
TAT
TTT
CAT
TGC
['I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I']
答案 0 :(得分:3)
它始终评估为I
,因为
if DNA == 'ATT' or 'ATC' or 'ATA':
始终评估为True
相当于:
if (DNA == 'ATT') or ('ATC') or ('ATA'):
'ATC'
的真值是总是为真,因此结果。
你可以这样检查:
if DNA in ['ATT', 'ATC', 'ATA']:
其他if
条款也是如此。
另外,请注意所有这些逻辑:
infile = open('DNA.txt', 'r')
while True:
line = infile.readline()
if not line: break
可以替换为
with open('DNA.txt', 'r') as infile:
for line in infile:
另外,另一种方法是使用字典映射和查找。这样,您可以简化所有if
逻辑..示例:
dna_dict = {
'ATT': 'I',
'ATC': 'I',
'ATA': 'I',
....
}
然后:
a.append(dna_dict.get(DNA, 'X'))
答案 1 :(得分:2)
这种方式更具可读性
with open('file.txt') as f:
data = f.readlines()
for line in data:
if not line:
continue
a = []
segment = [line[i:i+3] for i in range(0, len(line), 3)]
for dna in segment:
if dna in ['ATT', 'ATC', 'ATA']:
a.append('I')
elif dna in ['CTT', 'CTC', 'CTA', 'CTG', 'TTA', 'TTG']:
a.append('L')
elif dna in ['GTT', 'GTC', 'GTA', 'GTG']:
a.append('V')
elif dna in ['TTT', 'TTC']:
a.append('F')
elif dna in ['ATG']:
a.append('M')
else:
a.append('X')
print a