2016-06-01 6 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) 

私の2回目の試行:あなたが実際に関数を呼び出すのを忘れ

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

これは本当に問題であり、感謝しています。私は他のスレッドが表示されなかったので、Googleで間違ったキーワードを探しました。しかし、これには別の問題があるので、問題を浮き彫りにするために全部を編集します。 – grindbert

+0

新しい問題が発生した場合は、新しい質問を投稿してください。既存の質問を編集して新しい質問をしないでください。 –

+0

ok、私はそれを編集します、私はスパミングの質問を防ぐことを考えていました。私はそれを知らなかった、ありがとう。 – 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"が何をしているか尋ねたいと思います。私のコードも少し変わっています。あなたはそれを見渡し、どちらが理にかなっているか教えてください。私が見つけた演習では、「引数として整数nを受け取り、長さ50のn個のランダムなDNA配列を含むリストを返す関数generateSequencesを書く」ため、引数がそこにあります。 – grindbert

+0

もう1つは意味をなさない。あなたは入力を取得し、その入力を使って関数を呼び出します。ただし、関数内での使用方法には注意が必要です。私の答えをチェックし、私は最後を編集しました。 – SnoozeTime

+0

変換作業、ありがとうございます。それは私が今したいと思うように動く。私はまだ番号3について少し興味があります。私がそこに入る数は問題ではないようです(機能には問題はありませんが、私は学びたいと思っています)。私が持っているもう1つの質問は、実際には "パラメータとして整数nを受け取る関数"の場合です。 – grindbert

1

入力機能を介して、コマンドラインから入力をとる場合、

for i in range(n): 

ライン文字列に可変nデフォルトため

for i in range(int(n)): 

なければなりません。

あなたの代わりに、単純に、次のコマンドライン:また

if __name__ == "__main__": 
    generateSequence() 

からファイルを呼び出すときに定義した関数を呼び出し(関数定義なし)スクリプトを作成する機能を定義しているので、 return(L)は、式(またはタプル)の結果を戻すことはなく、単なる値であるため、単にreturn Lになります。

ポータブルにするには、最初にシバン線を置くことができます。

#! /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() 
関連する問題