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

Python 如何解决程序的计数问题?,python,python-3.x,text-parsing,Python,Python 3.x,Text Parsing,抱歉这是个很长的问题 我只是在我的代码中有一个bug,我已经很长时间没能解决了。如果有人能帮我找出问题所在,我将不胜感激 背景: 我有一长串字母——我们称之为主题——包含像DNA一样的字母a、G、T和C,我的算法的全部要点是正确计算在主题中发现的以下每种STR的数量。可疑交易报告如下: 阿加茨 TTTTTTCT AATG TCTAG 加塔 TATC 砷化镓 TCTG 我必须数一数每门课有多少门课。计数工作是按字母顺序进行,直到找到上述一个STR的开头。如果剩余的STR随后出现,程序应该更新相应S

抱歉这是个很长的问题

我只是在我的代码中有一个bug,我已经很长时间没能解决了。如果有人能帮我找出问题所在,我将不胜感激

背景: 我有一长串字母——我们称之为主题——包含像DNA一样的字母a、G、T和C,我的算法的全部要点是正确计算在主题中发现的以下每种STR的数量。可疑交易报告如下:

阿加茨 TTTTTTCT AATG TCTAG 加塔 TATC 砷化镓 TCTG 我必须数一数每门课有多少门课。计数工作是按字母顺序进行,直到找到上述一个STR的开头。如果剩余的STR随后出现,程序应该更新相应STR的计数器,然后将搜索索引提升到STR的长度,然后继续。当它到达主题末尾时应该停止。 希望它有意义

我的代码:

抱歉,它太长了,复制到单独的python文件可能会有所帮助

正如您将从运行中看到的,我的程序从计数中得到的结果是不正确的。正确的结果在程序的最终打印语句中,但程序与此不匹配是的,我知道这些结果是100%正确的,因为这是在线计算机科学课程的一部分

然而,我似乎找不到导致我的程序计数错误的bug或逻辑错误,我已经尝试了很长一段时间了。有人知道解决方案是什么吗

请随时问我有关该计划的任何问题,谢谢大家。

这有帮助吗

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函数的文档,了解它如何获得不同的输出以及为什么会得到不同的输出,并根据您的需要调整它的功能。

这有帮助吗

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])
试着这样做:

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要么就是字符串,要么不是字符串,这样就不必检查重复项。我不知道你的代码为什么不起作用,但我希望这会对你有所帮助。

上次打印语句中的结果不正确。我使用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次出现,但大多数出现在subject中47次重复的块中[1449:1637]。如果使用文本编辑器突出显示搜索字符串的所有匹配项,这一点会更加明显,因为连续突出显示的188个字符会跳出。47与GAAA的正确结果一致。

您的问题陈述与示例代码中给出的正确结果不一致。要么你误解了问题,要么你从另一个问题中得到了正确的结果。正确的结果似乎是查找每个查询字符串的最大连续重复次数的问题。[后一种可能性是Chris Charley在对原始帖子的评论中提出的观点。]

您可以通过手工解决这个问题来说服自己:在文本编辑器中查看主题字符串,选择一个查询字符串,对其进行搜索,然后逐步完成出现的情况

例如,对于查询字符串GAAA,您将统计约67次出现,但大多数出现在47次重复的块中
主语[1449:1637]。如果使用文本编辑器突出显示搜索字符串的所有匹配项,这一点会更加明显,因为连续突出显示的188个字符会跳出。47与GAAA的正确结果一致。

为什么不使用collections.Counter?然后提高搜索索引,以说明STR的长度-如果它们重叠呢?我们的问题是,问题不明确。GATATC是既算GATA又算TATC,还是我们只取我们看到的第一个。TTTTT CTTTTTCT是否算作一次或两次出现?问题是要获得连续出现的最大重复次数。我的AGATC得到22。部分解决方案在我的帖子中给出。为什么不使用collections.Counter?然后提高搜索索引,以说明STR的长度-如果它们重叠呢?我们的问题是,这个问题是模糊的。GATATC是既算GATA又算TATC,还是我们只取我们看到的第一个。TTTTT CTTTTTCT是否算作一次或两次出现?问题是要获得连续出现的最大重复次数。我的AGATC得到22分。部分解决方案在我的帖子中给出。好吧,我有点明白你和克里斯·查理在说什么?因此,我应该在整个受试者中查找STR的出现情况,而不是在受试者的子集中搜索STR?不确定,但听起来你好像在猜测如何修改代码,以便在不理解给出的问题的情况下获得预期的答案。你必须先理解问题陈述。好吧,我有点明白你和克里斯·查理在说什么?因此,我应该在整个受试者中查找STR的出现情况,而不是在受试者的子集中搜索STR?不确定,但听起来你好像在猜测如何修改代码,以便在不理解给出的问题的情况下获得预期的答案。你必须先理解问题陈述。