up循环的dna转录

时间:2017-10-16 15:37:59

标签: python python-3.x for-loop dna-sequence

这是我必须达到标题中所述目标的代码。我现在似乎遇到的问题是第二行代码。我添加它的那一刻,程序停止工作而没有给我一个错误。在此先感谢您的帮助。

seqDNA = input()
seqDNA = seqDNA.upper()
comp = ''
for c in seqDNA:
    if c == 'a':
        comp = comp + 'u'
    elif c == 't':
        comp = comp + 'a'
    elif c == 'g':
        comp = comp + 'c'
    elif c == 'c':
        comp = comp + 'g'
print(comp)

1 个答案:

答案 0 :(得分:0)

这是正确的行为,因为检查大写字母与小写字符

seqDNA = seqDNA.upper()之后,您的字符串包含大写字符。例如:

seqDNA = 'UGCGGCGAATATTT'

如果我们现在使用for c in seqDNA迭代它,c将包含一个大写字符(即'C')。现在,如果您比较c == 'C',则比较'c' == 'C',那些相等。

所以你应该把测试修改为:

seqDNA = input()
seqDNA = seqDNA.upper()
comp = ''
for c in seqDNA:
    if c == 'A':
        comp = comp + 'u'
    elif c == 'T':
        comp = comp + 'a'
    elif c == 'G':
        comp = comp + 'c'
    elif c == 'C':
        comp = comp + 'g'
print(comp)

话虽这么说,你的代码效率很低:首先elif语句的序列很昂贵,而且你执行comp = comp + 'u'操作。字符串追加在 O(n)中运行,使此算法 O( 2

我们可以通过使用字典来改进它,**使用''.join(..)而不是手动追加。

seqDNA = input()
seqDNA = seqDNA.upper()
trans = {
    'A': 'u',
    'T': 'a',
    'G': 'c',
    'C': 'g'
}
comp = ''.join(trans[c] for c in seqDNA)
print(comp)

如果KeyError包含seqDNA'A''T''G'以外的字符,则会引发'C' .get(..,'') 。在我看来这是合理的行为。如果您只想忽略这些字符,则可以[c]使用seqDNA = input() seqDNA = seqDNA.upper() trans = { 'A': 'u', 'T': 'a', 'G': 'c', 'C': 'g' } comp = ''.join(trans.get(c,'') for c in seqDNA) print(comp)

<UserControl
x:Class="Sandbox.FooControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Sandbox"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">

<Grid>
    <TextBox
        x:Name="TheTextBoxIWantToAlignWith"
        x:FieldModifier="public"/>
</Grid>