-1

我不知道我做了什么——这是错误的。有人能帮我吗?

def insert_sequence(dna1, dna2, number):

    '''(str, str, int) -> str
    Return the DNA sequence obtained by inserting the second DNA sequence
    at the given index. (You can assume that the index is valid.)  

    >>> insert_sequence('CCGG', 'AT', 2)
    'CCATGG'
    >>> insert_sequence('TTGC', 'GG', 2)
    'TTGGGC'
    '''
    index = 0
    result = '';
    for string in dna1:
        if index == number:
            result = result + dna2

            result = result + string
            index += 1

            print(result)
4

6 回答 6

1

其他答案中已经有正确的工作功能(特别是 Rakesh Pandit 的评论和 JeffS 的答案),但您的实际问题是“为什么我的原始功能不起作用”。

我复制了您的功能的工作版本,评论如下:

def insert_sequence(dna1, dna2, number):

    index = 0
    result = ''

    for character in dna1:
        if index == number:
            result = result + dna2
        result = result + character
        index += 1
    print(result)

Python 考虑缩进,所以你应该只在事情的末尾打印,外部循环和 ifs。当您“增加”结果时,您只能在函数的“if”内执行此操作,而实际上您应该增加“对于 dna1 中的每个字符”,并且只有当/“if index == number”时才应该放在中间里面的字符串。

我相信您对 Python 或一般编程非常陌生,可能来自生物学背景,但您真的不应该像其他人所展示的那样通过迭代来完成这种类型的字符串操作。

希望这可以帮助!

于 2012-10-21T23:21:19.603 回答
1

你需要一个if-else循环:

def insert_sequence(dna1, dna2, number):


    result = '';

    #you can use enumerate() to keep track of index you're on

    for ind,x in enumerate(dna1): 
        if ind == number:            #if index is equal to number then do this
            result = result + dna2 +x
        else:                        #otherwise do this   
            result = result + x 


    print(result)

insert_sequence('CCGG', 'AT', 2)
insert_sequence('TTGC', 'GG', 2)

输出:

CCATGG
TTGGGC
于 2012-10-21T23:08:22.887 回答
1

这是一个解决方案:

def insert_sequence(dna1, dna2, number):

    '''(str, str, int) -> str
    Return the DNA sequence obtained by inserting the second DNA sequence
    at the given index. (You can assume that the index is valid.)  

    >>> insert_sequence('CCGG', 'AT', 2)
    'CCATGG'
    >>> insert_sequence('TTGC', 'GG', 2)
    'TTGGGC'
    '''

    return dna1[:number] + dna2 + dna1[number:]
于 2012-10-21T23:02:05.560 回答
0

如果索引不在插入点,你什么也不做,包括增加索引。您的代码需要一个 else 并且您还过早地打印:

def insert_sequence(dna1, dna2, number):
    index = 0
    result = '';
    for char in dna1:
        if index == number:
            result = result + dna2
            result = result + char
            index += len(dna2) + 1
        else:
            result = result + char
            index += 1
    print(result)
于 2012-10-21T23:09:18.970 回答
0

您永远不会将字符串分开,因此您将始终将 dna2 添加到 dna1。

你可能想要return dna1[:number] + dna2 + dna1[number:]

于 2012-10-21T23:02:01.127 回答
0

所犯错误:a) 参数索引初始化为 0。b)“for sting in dia1:”应该是“for dia1_position in range(len(dia1)):”c) 打印结果缩进错误,功能不只是应该打印。它应该返回结果。d) 现在不需要增加索引。

答案已经有了。上面简要列出了所犯的错误。我猜您没有看到任何错误,因为您从未调用过该函数。第一个错误应该是未定义的“数字”(不再是因为问题已更新且参数已定义数字)。

于 2012-10-21T23:25:26.177 回答