замена * аргументов в цикле for - PullRequest
0 голосов
/ 03 мая 2020

Цель состоит в том, чтобы заменить все символы в строке, используя для l oop и replace. Мой код выглядит так:

strand_1 = input("type DNA sequence here: ")
for i in ("a", "t"),("t", "a"),("g", "c"),("c", "g"):
    comp_strand = strand_1.replace(*i)

print(f' the complementary strand is: {comp_strand.upper()}')

Вывод для использования 'agtcagtcagt c' выглядит так:

type DNA sequence here: agtcagtcagtc
 the complementary strand is: AGTGAGTGAGTG

По какой-то причине я не понимаю, только последний Пара ("c", "g") фактически заменяется, а другие нет.

Что может быть причиной этого и как я могу заставить эту работу работать?

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Причина в том, что вы перезаписываете comp_strand каждый l oop, а не сохраняете результат. Однако, даже если вы исправите это, оно все равно не будет работать, как объяснено в комментарии : 0x5453 : оно все равно не будет делать то, что вы хочу, потому что вы делаете перестановки по одному символу за раз. Например, 'atta' станет 'tttt' после первой итерации, а затем 'aaaa' после второй.

Лучшее решение для множественных замен - str.translate() с str.maketrans(). Например:

table = str.maketrans('atgc', 'tacg')
strand = 'agtcagtcagtc'
complementary = strand.translate(table)
print(complementary)  # -> tcagtcagtcag
0 голосов
/ 03 мая 2020

@ 0x5453 объяснил, почему код не работает, я предлагаю как это исправить:

strand_1 = input("type DNA sequence here: ")
comp_strand = strand1.translate(str.maketrans('atcg', 'tagc'))
print(f' the complementary strand is: {comp_strand.upper()}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...