Это была очень сложная проблема для меня, и мне было тяжело даже заставить что-то работать. На данный момент так выглядит мой код; Я даже не могу сказать, выводит ли он что-нибудь, потому что я не могу заставить его работать без ошибок.
import csv
from cs50 import get_string
from sys import argv
if len(argv) != 3:
print("Usage: python dna.py data.csv sequence.txt")
exit()
# Load Dictionary into the system
with open(argv[1], 'r') as file:
reader = csv.reader(file, delimiter=',')
dna_data = list(reader)
str_names = (dna_data[0][1:])
# Load Text DNA Sequence into system
text = open(argv[2], 'r')
sequence = text.read()
linecount = 0
# occurrences of each str in dna sequence
occurrences = []
for i in range(0,len(str_names)):
start = 0
substr_count = 0
consecutive = 0
while True:
string = sequence
substring = str(dna_data[i])
location = string.find(substring,start)
if location == -1:
break
if location != start:
consecutive = 1
else:
consecutive += 1
if consecutive > substr_count:
substr_count = consecutive
start = location + len(substring)
occurrences.append(substr_count)
substr_count = 0
repeats = []
match = 0
name = 0
for i in range (1, len(dna_data)):
for j in range (1, len(dna_data[i])):
repeats.append(dna_data[i][j])
for k in range(1, len(dna_data)):
if int(repeats[k]) == int(occurrences[k]): # THIS IS WHERE THE ERROR IS
match += 1
nomatch = False
else:
nomatch = True
if match == len(occurrences) and nomatch == False:
print(dna_data[i][0])
name += 1
else:
nomatch = True
match = 0
if nomatch == True and name == 0:
print("No Match")
Я уверен, что ответ, вероятно, что-то простое, но я просто не могу понять это. Я почти уверен, что длина списка как «вхождений», так и «повторов», на самом деле, и «len (dna_data)», но, похоже, ошибка говорит о том, что k увеличивается по сравнению с длиной одного из списков. Здесь есть что-то, что явно вызывает проблемы? Как я мог go сравнить число, присутствующее в позиции k в списке повторений и списке вхождений? Спасибо.