这个功能我做错了什么?

时间:2012-10-21 22:54:44

标签: python

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

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)

6 个答案:

答案 0 :(得分: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:]

答案 1 :(得分: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

答案 2 :(得分: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或一般的编程都很陌生,可能来自生物学背景,但你真的不应该迭代来完成这种类型的字符串操作,就像其他人已经表明的那样。

希望这有帮助!

答案 3 :(得分:0)

你永远不会将字符串分开,所以你总是将dna2添加到dna1。

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

答案 4 :(得分:0)

如果索引不在插入点,则不执行任何操作,包括递增索引。您的代码需要其他内容,而且您也在过早打印:

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)

答案 5 :(得分:0)

错误:a)参数索引初始化为0. b)“对于dia1中的sting:”应该是“for dia1_position in range(len(dia1)):”c)打印结果缩进错误且函数isn不应该打印。它应该返回结果。 d)索引现在不需要递增。

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