首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >巨蟒。尝试编写一个名为one_frame的函数。似乎不起作用。如果您能帮忙,我们将不胜感激

巨蟒。尝试编写一个名为one_frame的函数。似乎不起作用。如果您能帮忙,我们将不胜感激
EN

Stack Overflow用户
提问于 2018-10-17 23:45:24
回答 1查看 100关注 0票数 0

到目前为止,这是我的代码:

代码语言:javascript
复制
def get_orf(DNA):

    codon = ''
    if(DNA[0:3] == 'ATG'):
        codon = DNA[0:3]
        for x in range(3,len(DNA)+1,3):
            if DNA[x:x+3] == "TAG"  or DNA[x:x+3] == "TAA" or DNA[x:x+3] == "TGA":
                return codon
            else: codon = codon + DNA[x:x+3] 

    if codon[-3:] in ["TAG", "TAA", "TGA"]:
        return codon
    else: return 'No ORF'  

def one_frame(DNA):

    x = 0
    ORFlist = []

    while x < len(DNA):
        codon = DNA[x:]
        if DNA.startswith('ATG'):
            get_orf(DNA[x:])
            if codon:
                ORFlist.append(codon)
            x += len(codon)
    return(ORFlist)

get_orf函数工作正常,但我的one_frame函数不工作。one_frame函数应该接受一个DNA字符串作为输入。它从左到右以三个核苷酸的倍数搜索字符串-即在单个阅读框架中。当它遇到一个起始密码子“ATG”时,它会在从这个起始密码子开始(直到最后)的字符串切片上调用get_orf来返回一个开放源码。这个开放源码被添加到一个开放源码列表中,然后函数跳到DNA字符串中我们刚刚找到的开放源码之后的位置,开始寻找下一个开放源码。

EN

回答 1

Stack Overflow用户

发布于 2018-10-18 00:32:27

我可以看到一些明显的问题,但不确定你到底想要什么,所以希望这能有所帮助。首先,除非one_frame以'ATG‘开头,否则你在DNA中的循环永远不会结束。我想你应该检查codon.startswith而不是DNA.startswith。您还需要在if语句之外执行x+=命令,否则当您没有按下'ATG‘时,它将永远不会被更新,因此您的循环将永远继续。您也根本没有使用get_orf的值。

我想这能行得通,

代码语言:javascript
复制
def one_frame(DNA):

    x = 0
    ORFlist = []

    while x < len(DNA):
        codon = DNA[x:]
        # Check codon instead of DNA
        if codon.startswith('ATG'):
            # Record the return value of get_orf
            orf_return_value = get_orf(DNA[x:])

            if orf_return_value:

                ORFlist.append(orf_return_value)

            x += len(orf_return_value)
        # Increment by 3 if we don't hit ATG
        else:
            x += 3

    return(ORFlist)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52858811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档