gpt4 book ai didi

如果找不到匹配项,Python 2.7 将退出一个只有一行的 while 循环

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:35 24 4
gpt4 key购买 nike

尝试实现 Boyer Moore,不看答案的糟糕字符匹配算法。如果没有找到模式,我想退出我写的只有一行“不匹配”的循环,这是我的代码:

T = 'ATGGGTATGGCTCGGCTCGG'
p = 'ATCG'

skip = 0

while skip + len(p) < len(T):

string = T[skip:skip+len(p)]

if string == p:
print "offset at: ", skip
break


for i in range(len(string), 0, -1):


if (string[i-1] != p[i-1]):

if string[i-1] in p[:i-1]:
skip += (i - p.find(string[i-1]) - 1)
break

elif not string[i-1] in p[:i-1]:
skip += i
break

关于如何修改代码的任何命中。

谢谢,

经验

编辑:Scheme 给了我答案,就这么简单。我一直在 string == p 或 string != p 这行里胡思乱想。感谢您的所有评论。

最佳答案

如果我没理解错的话,如果字符串 p 不包含在 t 中,您希望退出 while 循环并只打印一次“不匹配”。这看起来像是太常见的 DNA 练习。

无论如何,一个简单的方法就是检查 t 中的子字符串 p,如果找不到则中断。答案在这里:How to determine whether a substring is in a different string会有所帮助。

基本上:

T = 'ATGGGTATGGCTCGGCTCGG'
p = 'ATCG'

skip = 0

while skip + len(p) < len(T):

if not p in T:
print "no match"
break

string = T[skip:skip+len(p)]

if string == p:
print "offset at: ", skip
break


for i in range(len(string), 0, -1):


if (string[i-1] != p[i-1]):

if string[i-1] in p[:i-1]:
skip += (i - p.find(string[i-1]) - 1)
break

elif not string[i-1] in p[:i-1]:
skip += i
break

这里的关键是行 if not p in T: 这基本上是在说如果字符串 p 在字符串 T 中不存在,那么就做一些事情。否则,继续。

除此之外,您可能需要考虑查看一些良好做法,例如变量命名和使用函数。

关于如果找不到匹配项,Python 2.7 将退出一个只有一行的 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44687434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com