CS50 (2020) PSET6 DNA IndexError: индекс списка вне диапазона - PullRequest
0 голосов
/ 20 марта 2020

Это была очень сложная проблема для меня, и мне было тяжело даже заставить что-то работать. На данный момент так выглядит мой код; Я даже не могу сказать, выводит ли он что-нибудь, потому что я не могу заставить его работать без ошибок.

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 в списке повторений и списке вхождений? Спасибо.

...