编辑整个帖子,以便更清楚问题:
s = "GATATATGCATATACTT"
t = "ATAT"
for i in range(len(s)):
if t == s[i:i+len(t)]:
print i+1,
因此,上述程序的目的是用DNA(t)的短线扫描长链DNA,以便找到s匹配的位置。上面代码的输出是:
2 4 10#这基本上是字符串t匹配的字符串s的索引号。但是从上面的代码中可以看出,给出基于1的编号输出是i + 1。
我遇到的问题是,当我尝试更改代码时,为了使它通过文件接收s和t的值,readline()函数对我来说不起作用。 motif.txt文件包含两个DNA串,每行一个。
with open('txt/motif.txt', 'r') as f:
s = f.readline()
t = f.readline()
for i in range(len(s)):
if t == s[i:i+len(t)]:
print i+1,
因此,这段代码根本不会输出任何内容。但是当我改变为:
t = f.readline().strip()
然后程序输出与第一个例子相同的结果。
所以我希望这会让事情更清楚。因此,我的问题是,如果readline()返回一个字符串,为什么示例2中的程序与第一个示例中的方式不同?
答案 0 :(得分:0)
您的问题陈述错误,第一个示例中的"equations": [
"$w = F.s\cos\theta$"
]
或s
无法获得比第二个更多的内容(以及t
或len(s) > 0
)。< / p>
基本上用:
len(t) > 0
然后s = f.readline()
将包含类似s
的字符串,因此"foobar \n"
将为len(s)
。
然后用:
9
使用相同的字符串,s = f.readline().strip()
将为len(s)
,因为已删除的字符串为6
。
因此,如果您的行中包含"foobar"
之类的空格,s = " \n"
将是空字符s.strip()
,""
。
然后在这种情况下你的循环将无法启动并且永远不会打印任何东西。
在我能想到的几乎所有其他情况中,你应该得到一个提升,而不是沉默的退出。
但说实话,你的代码很糟糕,因为没有人能够通过阅读它来理解你想做什么(包括你在六个月内)。