python - 关于 CS50 Pset6 DNA,它超过了 large.cvs 的 STR
问题描述
我正在处理 pset6,DNA 问题。此代码适用于 small.cvs,但当我尝试使用大代码时,它高估了 STR 计数。我想问题出在它尝试比较字符串时。但仍然不知道如何修复它。我检查了“TTTTTTCT”序列的计数是否正确,但对于剩余的 STR,计数在所有情况下都大于应有的值。
import sys
import csv
def main():
while (len(sys.argv) != 3):
print ("ERROR. Usage: python dna.py data.csv sequence.txt")
break
list_str = {}
#load the STRs to analyse
with open(sys.argv[1]) as csvfile:
readcsv = csv.reader (csvfile)
ncol = len(next(readcsv))
csvfile.seek(0)
header = list()
for line in readcsv:
a = sum(1 for line in readcsv)
for i in range(ncol):
list_str[line[i]] = 0
header.insert (i, line [i])
print (f"{header[i]}")
#open an work with the sequence file
sequence = open(sys.argv[2], 'r')
seq_r = sequence.read()
for k in list_str.keys():
#print (f"keu {k}")
p = 0
seq = len(seq_r)
while p < seq:
if seq_r[p:(p + len(k))] == k:
list_str[k] += 1
p += len(k)
else: p += 1
#print (f" sequenci encontrada{list_str[k]} y {k}")
print (f"nro de {k} {list_str[k]}")
with open(sys.argv[1]) as csvfile:
readcsv = csv.reader (csvfile)
next(csvfile)
find = False
for row in readcsv:
for j in range(1,ncol):
#print(f"header :{header[j]}")
if int(row [j]) == int(list_str[header[j]]):
print (f"row {row[j]} list {list_str[header[j]]}")
find = True
else:
find = False
break
if find == True: print (f"{row [0]}")
main()
解决方案
同样的事情发生在我身上,然后我看到了 pset 的规格。
我们需要找到“ STR 的最长连续重复”。不是 STR 的总数。它也适用于 small.csv,就像我的情况一样,因此请尝试搜索特定 STR 的最长连续出现。
推荐阅读
- php - 通用的“stdClass”在 PHP 中代表什么?
- c# - 垂直滚动上的 WPF DataGrid 固定或粘滞标题
- data-structures - 如何解决以下动态规划问题
- unix - java 16 中的 UNIX 域套接字通道是什么?它们如何有用
- php - 在 PHP 中通过邮件发送附件
- javascript - 如何在使用 React 测试库的集成测试中避免“行为”警告
- ios - 如何在一个Viewcontroller下设置xib视图的IBAction(这个xib视图下会有视图A和视图B)
- javascript - 如何在通过拖动角调整 d3 svg 形状的大小时保持纵横比?
- python - 如何使用 Numpy 数组查找给定值的 x 和 y 坐标
- r - 根据条件计算 R 中的平均值