微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决程序的计数问题?

如何解决如何解决程序的计数问题?

(抱歉,这将是一个很长的问题)

我的代码中只有一个错误,很长一段时间都无法解决。如果有人可以帮助我找出问题所在,我将不胜感激。

上下文: 我有一长串字母-叫subject-包含字母A,G,T和C(例如DNA),我算法的重点是正确地计算出以下每个{在STRs中找到{1}}。 STR是:

  • subject
  • AGATC
  • TTTTTTCT
  • AATG
  • TCTAG
  • GATA
  • TATC
  • GAAA

我必须算出TCTG中有多少个。通过逐个字母顺序地进行计数直到找到以上subject中的一个开始为止来进行计数。如果STRs的其余部分紧随其后,则程序应更新各个STR的计数器,然后根据STR的长度增加搜索索引,然后继续进行。当到达STR的结尾时,它应该停止。 (希望有道理。)

我的代码

subject

(很抱歉,将其复制到单独的python文件中可能会很有帮助)。

从运行它将会看到,我的程序从计数中得出的结果是不正确的。正确的结果在程序的最终打印语句中,但是程序与此不符(是的,我知道这些结果100%正确,因为这是在线计算机科学课程中设置的问题的一部分)。

但是,我似乎找不到可能导致程序计数错误错误或逻辑错误,并且我已经尝试了很长时间。有谁知道解决方案是什么?

请随时向我询问有关该计划的任何事情,谢谢大家。

解决方法

有帮助吗?

count_results = dict()
STRs = ['AGATC','TTTTTTCT','AATG','TCTAG','GATA','TATC','GAAA','TCTG']
subject = "loooong string..."

for search_string in STRs:
  count_results[search_string] = subject.count(search_string)

print(count_results)

{'AGATC': 28,'TTTTTTCT': 33,'AATG': 69,'TCTAG': 18,'GATA': 46,'TATC': 36,'GAAA': 67,'TCTG': 60}

我知道结果有时与您的预期计数不同,但是我没有仔细研究您的搜索算法,不知道预期的输出是否有误?如果没有,请查看文档中的str.count()函数,以了解如何以及为何获得不同的输出,并根据需要调整其功能。

,

尝试这样:

import re
# Define STRs and subject here
dic = {}
for x in STRs:
  tv = len([m.start() for m in re.finditer(x,subject)])
  tv += 1
  dic[x] = tv

for y in dic.keys():
  print(y,dic[y])
,

最后一个打印语句中的结果不正确。我使用python的内置方法.count()进行了检查,如果允许您使用此方法,请改用此方法,但如果没有,我建议您执行以下操作:

total = len(subject)
while x < total:
    for STR in STRs:
        limit = len(STR)
        currentString = subject[x:x+limit]
        if STR == currentString: 
            dataSTR[STR] += 1 
    x += 1 

这样,您就可以将限制设置为字符串的长度,这样STR要么就是字符串,要么就不是字符串,因此您不必检查重复项。我不知道为什么您的代码不起作用,但是我希望这会对您有所帮助。

,

您的问题陈述与示例代码中给出的“正确结果”不同。您可能是误解了该问题,或者您已经从另一个问题中获得了正确的结果。 (“正确的结果”似乎是为了找到每个查询字符串的最大连续重复的问题。)[后一种可能性是Chris Charley在原始评论中提出的观点。帖子。]

您可以通过“手工”解决问题,从而说服自己:在文本编辑器中查看主题字符串,选择查询字符串,对其进行搜索,然后逐步进行查找。

例如,对于查询字符串“ GAAA”,您会算出〜67次出现,但其中大多数都出现在主题中47个重复的块中[1449:1637]。 (如果您使用突出显示所有出现的搜索字符串的文本编辑器,这会更加明显,因为连续突出显示的188个字符应该会出现在您面前。)47表示GAAA的“正确结果”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。