2016-06-01 33 views
0

我拿了一段代码产生一个随机基因序列,我想把n个生成的序列放入一个列表中。这是我想出来的,但当我运行它时,我什么都没有得到。有人可以帮忙吗?生成一个列表 - 什么也没有发生

import random 

def generateSequence (n): 

    n = input('Enter # of list entries: ') 
    L = [] 
    dna = ["A","G","C","T"] 
    for i in range(n): 

     random_sequence='' 

     for i in range(50): 
      random_sequence+=random.choice(dna) 

     L.append(random_sequence) 

    print(L) 
    return(L) 

我的第二次尝试之前,我收到的答案:

import random 

def generateSequence (n): 

    L = [] 
    dna = ["A","G","C","T"] 
    for i in range(n): 

     random_sequence='' 

     for i in range(50): 
      random_sequence+=random.choice(dna) 

     L.append(random_sequence) 

    print(L) 
    return(L) 

b = input('Enter # of list entries: ')  
generateSequence(b) 
+0

这确实是问题,谢谢。我在谷歌上查找错误的关键字,所以其他线程没有显示出来。不过,我还有另外一个问题,所以我会编辑整个问题以突出问题。 – grindbert

+0

如果您有新问题,请发布新问题。不要编辑现有的问题来询问新的问题。 –

+0

好吧,我会编辑回来,我正在考虑防止垃圾邮件的问题。我不知道,谢谢。 – grindbert

回答

2

你忘了实际调用该函数。

例如,如果你把这个在一个叫main.py

import random 

def generateSequence (n): 

    n = input('Enter # of list entries: ') 
    L = [] 
    dna = ["A","G","C","T"] 
    for i in range(n): 

     random_sequence='' 

     for i in range(50): 
      random_sequence+=random.choice(dna) 

     L.append(random_sequence) 

    print(L) 
    return(L) 


if __name__ == "__main__": 
    generateSequence(3) 

文件给我下面的输出,当我与python main.py

Enter # of list entries: 2 
['GCTGTCTAAATTCGGCTTCACCTAGAAATGTTCAGATGAAATCCAGATGT', 'ACTAGGCGGTATGTTCAGAGCGAGTCGGCGGTTCCCTGGTGGGACTATCC'] 

而且运行它,generateSequence的说法是无用的,因为你重置它的值在输入调用函数。

编辑 对于TypeError,输入会给你一个str(字符串)。你需要一个整数范围函数(https://docs.python.org/2/library/functions.html#range),所以你需要首先转换n。 例如for i in range(int(n))

请注意,这假定n 可以转换为整数。如果不是,则int(n)将引发异常。 ValueError: invalid literal for int() with base 10: 'fefw'

+0

我想问一下generateSequence(3)中的“3”是做什么的。我的代码也改变了一点,你能不能查看它并告诉我哪一个更有意义?该论据在那里,因为我发现的练习说:“写一个函数generateSequences接收一个整数n作为参数,并返回一个包含n个长度为50的随机DNA序列的列表。” – grindbert

+0

第二个更有意义。你得到一个输入并用输入调用函数。但是,您必须小心在功能中如何使用它。检查我的答案,我编辑了结尾。 – SnoozeTime

+0

转换作品,谢谢。它按照我现在的想法运行。我对数字3仍然有点好奇。似乎并没有什么关系,我输入的数字并不重要(对功能没有影响,但我渴望学习)。我的另一个问题是,如果这实际上是“一个接收整数n作为参数的函数”,因为我不确定你说它没用。 – grindbert

1

在功能定义的术语,线

for i in range(n): 

应该是

for i in range(int(n)): 

因为变量n默认为一个字符串从命令行通过输入函数取输入时。

既然你定义的函数,而不是简单地创建一个脚本(没有函数定义),以下称你当你调用命令行:

if __name__ == "__main__": 
    generateSequence() 

而且文件定义的功能, return(L)可以简单地为return L,因为您没有返回表达式(或元组)的结果,只是一个值。

为了使它便于携带,您可以在开始处放置一个shebang线。

#! /usr/bin/env python 

import random 


def generateSequence(): 

    n = input('Enter # of list entries: ') 
    L = [] 
    dna = ["A", "G", "C", "T"] 
    for i in range(int(n)): 

     random_sequence = '' 

     for i in range(50): 
      random_sequence += random.choice(dna) 

     L.append(random_sequence) 

    print(L) 
    return L 


if __name__ == "__main__": 
    generateSequence() 
相关问题