1

所以我试图解析一个 FastQ 序列,但我是 Python 的初学者,我对我的代码为什么不起作用感到有点困惑。这是程序应该执行的操作:

如果我输入 FASTQ seqname 行...

@EAS139:136:FC706VJ:2:2104:15343:197393

...那么程序应该输出:

Instrument = EAS139
Run ID = 136
Flow Cell ID = FC706VJ
Flow Cell Lane = 2
Tile Number = 2104
X-coord = 15343
Y-coord = 197393 

到目前为止,这是我未完成的代码:

class fastq:
    def __init__(self,str):
        self.str = inStr.replace ('@',' ').split (':')
    def lists (self,parameters):
        self.parameters = ("Instrument","Run ID","Flow Cell ID","Flow Cell Lane","Tile     Number","X-coordinates","y-coordinates")
    def zip (self,myZip,zippedTuple):
        self.Zip = zip(self.parameters,self.transform)
        self.zippedTuple = tuple(myZip)
        print (tuple(myZip))

def main():
    seq = input('Enter FastQ sequence:')
    new_fastq = fastq(str)
    new_fastq.lists()
    new_fastq.zip()

main()
4

1 回答 1

2

您的代码不起作用的原因是它或多或少完全错误。为了解决您在尝试运行程序时遇到的错误的顺序:

  1. main
    1. new_fastq = fastq(str)不传递seq我们刚刚输入的,它传递的是内置的字符串类型;
  2. __init__
    1. 调用参数fastq.__init__ str是一个坏主意,因为它掩盖了我们刚刚尝试传递给它的非常内置的内容;
    2. 但是不管你怎么称呼它,函数定义和它里面的内容要保持一致——你认为inStr是从哪里来的?
  3. lists
    1. 为什么这是分开的,甚至没有被调用__init__
    2. 你为什么不传递任何论点?
    3. 争论到底是parameters为了什么?
  4. zip
    1. 与其定义打印对象的方法,不如定义fastq.__str__返回字符串表示的 Pythonic。然后就可以了print(str(new_fastq))。话虽如此;
    2. 同样,您掩盖了一个内置的。在这种情况下,问题就更大了,因为您实际上尝试在方法中使用内置方法来屏蔽它。叫它别的东西;
    3. 同样,您在定义中添加了不必要的参数,然后无论如何都不要费心传递它们;
    4. 应该是什么self.transform?它从未在其他任何地方提及。你的意思是self.str(再次,应该被称为别的东西,因为掩盖一个内置而不是实际上是一个字符串)?
    5. myZip是您从未通过的论点之一,我认为您确实想要self.Zip;但
    6. 你为什么要x = tuple(y)在下一行创建print(tuple(y))呢?print(x)

解决这些问题,加上一些额外的 PEP-008 整理:

class FastQ:

    def __init__(self, seq):
        self.elements = seq.replace ('@',' ').split (':')
        self.parameters = ("Instrument", "Run ID", "Flow Cell ID",
                           "Flow Cell Lane", "Tile Number",
                           "X-coordinates", "y-coordinates")

    def __str__(self):
        """A rough idea to get you started."""
        return "\n".join(map(str, zip(self.parameters, self.elements)))


def main():
    seq = input('Enter FastQ sequence: ')
    new_fastq = FastQ(seq)
    print(str(new_fastq))

main()
于 2014-04-12T07:44:43.900 回答