#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