【问题标题】:cs50 Pset 6 DNA - Issue creating listcs50 Pset 6 DNA - 问题创建列表
【发布时间】:2021-03-23 20:06:10
【问题描述】:

我有一个代码可以遍历文本,并告诉我找到每个 dna STR 的最大次数。能够将这些值与 CSV 文件匹配的唯一步骤是将它们存储到列表中,但我无法这样做。当我运行代码时,每个 STR 序列的最大值都是独立打印的。 我试图将这些值“附加”到一个列表中,但我没有成功,因此,我无法将它与 CSV 的 dna 序列(大或小)匹配。 非常感谢任何帮助或建议! 这是我的代码,以及使用“text 1”和“small csv”得到的结果: `

import cs50
import sys
import csv
import os

if len(sys.argv) != 3:
    print("Usage: python dna.py data.csv sequence.txt")
csv_db = sys.argv[1]
file_seq = sys.argv[2]


with open(csv_db, newline='') as csvfile: #with open(csv_db) as csv_file
    csv_reader = csv.reader(csvfile, delimiter=',')
    header = next(csv_reader)
    i = 1
    while i < len(header):
        STR = header[i]
        len_STR = len(STR)
        with open(file_seq, 'r') as my_file:
            file_reader = my_file.read()
            counter = 0
            a = 0
            b = len_STR
            list = []
            for text in file_reader:
                if file_reader[a:b] != STR:
                    a += 1
                    b += 1
                else:
                    counter += 1
                    a += len_STR
                    b += len_STR
        list.append(counter)
        print(list)
        i += 1

`

【问题讨论】:

    标签: python-3.x cs50 dna-sequence


    【解决方案1】:

    问题在于变量“列表”声明的位置。每次您在变量“header”中遍历 STR 时,您都会声明:

    list = []
    

    因此,您创建了一个全新的变量,它只存储当前 STR 的长度。要创建一个附加了所有 STR 的列表,您需要在 while 循环之前声明变量“list”并在 while 循环之后声明运算符“print”:

    list = []
    while i < len(header):
        <your loop code>
    print(list)
    

    这应该可以解决您的问题。

    附:避免使用“列表”作为变量声明。 “list”是一个python内置函数,它是自动声明的。因此,当您重新声明它时,您将无法在代码中使用 list() 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      相关资源
      最近更新 更多