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