В мой список вывода ничего не добавляется. Кто-нибудь может объяснить, почему

#python #komodo

#python #komodo

Вопрос:

   def translateGene(dnaStrand, startPos, stop):
        protein = []
        def aminoAcid(dnaCodon):
            return(dnaCode[dnaCodon])
            maybeCodon = [dnaStrand[i:i  3] for i in range (startPos, stop-1)]
            for j in maybeCodon:
                if j == (dnaCode[dnaCodon]):
                    protein.append(j)
                return protein
 

Эта функция принимает строку, целое число в качестве начального индекса в строке и целое число в качестве конечного индекса в строке. Идея программы состоит в том, чтобы разделить строку на 3 буквенных сокращения с буквами от начальной точки до конечной точки. Затем он должен искать в заданном словаре все сокращения, и если они присутствуют в словаре, добавьте их результаты в список белков, но мой приведенный выше код оставляет белок пустым. Функция Aminoacid была создана для меня, чтобы использовать ее как часть этой функции, но я не уверен, правильно ли я ее вызвал. Мой приведенный выше код оставляет белок пустым.

Кто-нибудь может объяснить, почему. Любая помощь приветствуется.

Комментарии:

1. Во-первых, у вас есть вложенные функции, и вы никогда не вызываете aminoAcid — и даже если бы вы это сделали, вы бы немедленно вернулись, прежде protein.append(j) чем вызывается.

2. Есть return def aminoAcid(...) вход, прежде чем что-либо произойдет. Функция завершится там. Тем не менее, он никогда не будет вызван (за исключением того, что вы только что допустили ошибку отступа здесь, в своем сообщении, и какой-то код отсутствует).

3. мне кажется, что aminoAcid() определен, но никогда не вызывается.

4. Не могли бы вы показать нам пример того, какой ваш ввод и ожидаемый результат, пожалуйста?

5. Да, конечно, что-то вроде этого: translateGene(‘GGGATGCTTTAG’, 3, 9) Затем программа должна разбить строку между индексами 3 и 9, чтобы каждый раз давать трехбуквенные сокращения, начинающиеся со следующей буквы. например, в приведенной выше строке сокращения будут: ATG, TGC,GCT, CTT. Некоторые из этих сокращений хранятся в словаре под названием dnaCode, идея состоит в том, что каждая аббревиатура проверяется по словарю, и если они присутствуют, соответствующая аминокислота будет включена в список белков, в данном случае ‘ATG’: ‘Met и ‘CTT’: ‘Leu’, поэтому Met и Leu должны бытьбыть в списке белков.

Ответ №1:

Во-первых, я думаю, что ваш код должен иметь отступы, скорректированные на:

 def translateGene(dnaStrand, startPos, stop):
    protein = []
    
    def aminoAcid(dnaCodon):
        return (dnaCode[dnaCodon])
    
    maybeCodon = [dnaStrand[i:i   3] for i in range(startPos, stop - 1)]
    for j in maybeCodon:
        if j == (dnaCode[dnaCodon]):
            protein.append(dnaCodon)
    return protein

 

Затем протестируйте его.

и обратите внимание, что, похоже, у вас есть два глобальных dnaCode , dnCodon , которые известны перед вызовом функции.