Нахождение конкретной строки в простом списке - PullRequest
1 голос
/ 16 мая 2019

Я новичок в программировании и пытаюсь написать код о ДНК, где пользователь вводит определенную последовательность ДНК.Затем программа должна перевести ДНК, введенную в определенную аминокислоту.

Я попытался преобразовать каждую строку ДНК, введенную пользователем, в список, а затем с помощью функции «in» узнать, какая ДНК введенапользователь соответствует определенной аминокислоте.мой код ниже:

dna = input("please enter the DNA sequence in CAPS: ")

# a variable called codons to convert the entered DNA sequence into a list of 3 characters per element
codons = [dna[start:start+3] for start in range (0,len(dna),3)]

# we now create an if structure which matches each codon to its appropriate amino acid
if "ATA" or "ATC" or "ATT" in codons:
         print("Isoleucine")

if "CTT" or "CTC" or "CTA" or "CTG" or "TTA" or "TTG" in codons:
        print("Leucine")

if "GTT" or "GTC" or "GTA" or "GTG" in codons:
        print("Valine")

if "TTT" or "TTC" in codons:
        print("Phenylalanine")

if "ATG" in codons:
        print("Methionine")

проблема в том, что когда я запускаю код, он печатает большинство типов кодонов вместо определенных аминокислот, например, если пользователь вводит «ATA», он печатает изолейцин, лейцин, Валин и фенилаланин вместо только печатного изолейцина.

Ответы [ 2 ]

4 голосов
/ 16 мая 2019

Попробуйте что-то вроде этого:

if any(i in codons for i in ["ATA" , "ATC", "ATT"]):
    # your prints

вместо того, чтобы писать два больших ор.

0 голосов
/ 16 мая 2019

оператор 'in' имеет более высокий приоритет, чем оператор 'or'.Следовательно, ваши выражения эквивалентны

if "ATA" or "ATC" or "ATT" in codons:
==>
if "ATA" or "ATC" or ("ATT" in codons):

, что соответствует "ATA".

Либо используйте (x в y), либо (z в y) ... или определите функцию, подобную

def any_in(elements, container):
    for element in elements:
        if element in container:
            return True
    return False

и назовите его:

if any_in(["ATA", "ATC", "ATT"], codons):
    ...

https://www.programiz.com/python-programming/precedence-associativity

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...