【发布时间】:2020-09-08 04:00:13
【问题描述】:
我的问题: 我正在尝试比较来自两个不同数组的两个元素,但运算符不起作用。
有问题的代码片段:
for i in range(row_length):
print(f"ss_record: {ss_record[i]}")
print(f"row: {row[i + 1]}")
#THIS IF STATEMENT IS NOT WORKING
if ss_record[i] == row[i + 1]:
count += 1
#print()
#print(f"row length: {row_length}")
#print(f"count: {count}")
if count == row_length:
print(row[0])
exit(0)
我做了什么:我尝试在 ss_record 和 row 运行之前打印它的值,然后再运行 if 语句,但是当它匹配时,count 不会增加.我尝试将 row 的值存储在一个新数组中,但它出错了,只存储数组长度和行的前 2 个值,并在每个下一个实例重复这些值。
我认为是什么问题:我认为我的代码的问题是从CSV 文件中读取的行并没有被转换为整数,看起来他们相同,但一个是整数,另一个是字符串。
完整代码:
import csv
import sys
import re
from cs50 import get_string
from sys import argv
def main():
line_count = 0
if len(argv) != 3:
print("missing command-line argument")
exit(1)
with open(sys.argv[1], 'r') as database:
sequence = open(sys.argv[2], 'r')
string = sequence.read()
reader = csv.reader(database, delimiter = ',')
for row in reader:
if line_count == 0:
row_length = len(row) - 1
ss_record = [row_length]
for i in range(row_length):
ss_record.append(ss_count(string, row[i + 1], len(row[i + 1])))
ss_record.pop(0)
line_count = 1
else:
count = 0
for i in range(row_length):
print(f"ss_record: {ss_record[i]}")
print(f"row: {row[i + 1]}")
#THIS IF STATEMENT IS NOT WORKING
if ss_record[i] == row[i + 1]:
count += 1
if count == row_length:
print(row[0])
exit(0)
#ss_count mean the # of times the substring appear in the string
def ss_count(string, substring, length):
count = 1
record = 0
pos_array = []
for m in re.finditer(substring, string):
pos_array.append(m.start())
for i in range(len(pos_array) - 1):
if pos_array[i + 1] - pos_array[i] == length:
count += 1
else:
if count > record:
record = count
count = 1
if count > record:
record = count
return record
main()
用于重现问题的值:
序列(这是一个文本文件)= AAGGTAAGTTTAGAATATAAAAGGTGAGTTAAATAGAATAGGTTAAAATTAAAGGAGATCAGATCAGATCAGATCTATCTATCTATCTATCTATCAGAAAAGAGTAAATAGTTAAAGAGTAAGATATTGAATTAATGGAAAATATTGTTGGGGAAAGGGAGGGATAGAAGG
子字符串(这是一个 csv 文件)=
名称,AGATC,AATG,TATC
爱丽丝,2,8,3
鲍勃,4,1,5
查理,3,2,5
CSV 文件的要点: Alice 旁边的数字表示子字符串(STR/Short Tandem Repeat)在字符串(DNA 序列)中连续出现的次数。在这个字符串中,AGATC 连续出现 4 次,AATG 连续出现 1 次,TATC 连续出现 5 次。对于这个 DNA 序列,它与 Bob 匹配并且他作为答案输出。
【问题讨论】: