txt-fi字符串输入的Python比较

2024-09-27 18:06:17 发布

您现在位置:Python中文网/ 问答频道 /正文

在比较python中的字符串时,我似乎遇到了一个小问题。我从一个文本文件中读入,然后一次比较三个字符。它似乎总是认为第一个“如果”的陈述是正确的,这让我困惑。(请注意,输入作为测试在循环中打印出来,并给出正确的字符串进行比较)。感谢您的帮助/建议:)

文本文件输入:

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)

输出:

^{pr2}$

Tags: or字符串ifline字符建议infiledna
2条回答

它的计算结果总是I,因为

if DNA == 'ATT' or 'ATC' or 'ATA':

始终计算为True

相当于:

^{pr2}$

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

这种方式更具可读性

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

相关问题 更多 >

    热门问题