Как я могу идентифицировать действительную последовательность ДНК?

#python #python-3.x #string #loops #dna-sequence

#питон #python-3.x #строка #циклы #днк-последовательность

Вопрос:

Я только начинаю изучать, как писать код на python, применяя его к области биоинформатики. Тем не менее, у меня возникли проблемы со следующей программой:

  • Сначала вы вводите последовательность ДНК (состоящую из g, c, t, a и n) с помощью команды dna=input(«введите свою последовательность: «)
  • Затем я пытаюсь определить, содержит ли последовательность ДНК только символы g, c, t, a и n (не конкретно в таком порядке). Если этого не произойдет, я хочу, чтобы программа сказала что-то вроде: это неправильно, введите последовательность еще раз; а затем позвольте вам ввести новую последовательность (и повторить процесс проверки). Если в нем есть только эти символы, я хочу, чтобы программа продвигалась вперед, но я не в состоянии этого сделать.

Это более или менее то, что я делал до сих пор… Это работает для последовательностей из 3 или более символов, но если вы напишете, например, одну букву (в зависимости от того) после «Неправильно, введите последовательность снова: «, он поймет, что это допустимая последовательность, когда это не так.

 def Start():

dna=input("Enter a sequence:  ")

for i in range(len(dna)):
    if dna[i] not in "actgn":
        dna=input("Not right, enter a sequence again:  ")
    else:
       break
print("here the program will continue")
 

Ответ №1:

Попробуй это:

 dna=input("Enter a sequence:  ")
sequenceCorrect = False
while not sequenceCorrect:
    sequenceCorrect = True
    for i in range(len(dna)):
        if dna[i] not in "actgn":
            sequenceCorrect = False
    if not sequenceCorrect:
        dna=input("Incorrect Sequence Please Try Again:  ")
print("here the program will continue")

 

Ответ №2:

Это хорошее начало, но вы не сделали перерыв (для выхода из цикла) в нужном месте. Вот мое предложение (с комментариями):

 
def is_valid(dna_sequence):
    for nucleotide in dna: # we iterate through the chars of our DNA using a foreach
        if nucleotide not in "actgn":
            return False
    return True # if no nucleotide made us return false, it's valid!

def start():
    dna=input("Enter a sequence:  ")
    while not is_valid(dna):
        dna=input("Wrong squence, please enter a new one:  ")

    print("here the program will continue with a valid dna sequence")
 

Ответ №3:

Я думаю, что это очень хороший вариант использования для ознакомления с Python set . Используя set вы можете выполнять операции набора в одной строке, чисто и элегантно. Ознакомьтесь с этим сообщением для получения дополнительной информации.

И, что касается кода:

 def is_valid_dna(dna):
  dna_ref = set("actgn") # breaks the string and returns: {'a', 'c', 'g', 'n', 't'}
  dna = set(dna)
  # check: characters in your string belongs to the reference group
  #        the input contains at least 1 valid character
  return dna.issubset(dna_ref) and len(dna)>0 


dna=''
while not is_valid_dna(dna):
  dna = input("Enter a sequence:n")
 

После его выполнения он возвращается для разных входных данных:

 Enter a sequence:
1
Enter a sequence:

Enter a sequence:
asdf
Enter a sequence:
actactact