首页 > 解决方案 > 我有什么错误:TypeError:字符串索引必须是整数?如果我希望 bt 在函数 back_trans 之外,我该如何解决这个问题?

问题描述

定义主():

pep = 'MEGNCS'
newseqs = []
bt= {'I': ['ATA', 'ATC', 'ATT'], 'M': ['ATG'], 'T': ['ACA', 'ACC', 'ACG', 'ACT'], 'N': ['AAC', 'AAT'], 'K': ['AAA', 'AAG'], 'S': ['AGC', 'AGT', 'TCA', 'TCC', 'TCG', 'TCT'], 'R': ['AGA', 'AGG', 'CGA', 'CGC', 'CGG', 'CGT'], 'L': ['CTA', 'CTC', 'CTG', 'CTT', 'TTA', 'TTG'], 'P': ['CCA', 'CCC', 'CCG', 'CCT'], 'H': ['CAC', 'CAT'], 'Q': ['CAA', 'CAG'], 'V': ['GTA', 'GTC', 'GTG', 'GTT'], 'A': ['GCA', 'GCC', 'GCG', 'GCT'], 'D': ['GAC', 'GAT'], 'E': ['GAA', 'GAG'], 'G': ['GGA', 'GGC', 'GGG', 'GGT'], 'F': ['TTC', 'TTT'], 'Y': ['TAC', 'TAT'], '_': ['TAA', 'TAG', 'TGA'], 'C': ['TGC', 'TGT'], 'W': ['TGG']}
back_trans(pep,bt, 0, newseqs)
print('\n'.join(newseqs))

def back_trans(pep, bt, pos, newseqs,s=''):

if pos == len(pep)-1:

    for codon in bt[pep[pos]]:
        newseqs.append(s+codon)
    return

for codon in bt[pep[pos]]:
    back_trans(pep, pos+1, newseqs, s+codon)

主要的()

标签: python-3.x

解决方案


这就是我执行所需功能的方式:

pep_in = 'MEGNCS'
bt_mstr= {'I': ['ATA', 'ATC', 'ATT'], 'M': ['ATG'], 'T': ['ACA', 'ACC', 'ACG', 'ACT'], 'N': ['AAC', 'AAT'], 
     'K': ['AAA', 'AAG'], 'S': ['AGC', 'AGT', 'TCA', 'TCC', 'TCG', 'TCT'], 'R': ['AGA', 'AGG', 'CGA', 'CGC', 'CGG', 'CGT'], 
     'L': ['CTA', 'CTC', 'CTG', 'CTT', 'TTA', 'TTG'], 'P': ['CCA', 'CCC', 'CCG', 'CCT'], 'H': ['CAC', 'CAT'], 'Q': ['CAA', 'CAG'], 
     'V': ['GTA', 'GTC', 'GTG', 'GTT'], 'A': ['GCA', 'GCC', 'GCG', 'GCT'], 'D': ['GAC', 'GAT'], 'E': ['GAA', 'GAG'], 
     'G': ['GGA', 'GGC', 'GGG', 'GGT'], 'F': ['TTC', 'TTT'], 'Y': ['TAC', 'TAT'], '_': ['TAA', 'TAG', 'TGA'], 'C': ['TGC', 'TGT'], 
     'W': ['TGG']}

def transcribe_seq(pep, bt):
    newseq = []
    for i in range(len(pep)-1,-1,-1):
        if pep[i] in bt:
            sqs = bt[pep[i]]
            addseq = []
            for s  in sqs:
                addseq.append(s)
            if newseq:
                rseq = []
                while newseq:
                    csq = newseq.pop(0)
                    for asq in addseq:
                        rseq.append(asq+csq)
                newseq = rseq           
            else:
                newseq.extend(addseq)
    return ", ".join(newseq)  

transcribe_seq("CS", bt_mstr)

产量:

'TGCAGC, TGTAGC, TGCAGT, TGTAGT, TGCTCA, TGTTCA, TGCTCC, TGTTCC, TGCTCG, TGTTCG, TGCTCT, TGTTCT'

推荐阅读