2016-06-01 50 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() 
相關問題