2016-06-01 11 views
0

Ich nahm ein Stück Code, der eine zufällige Gensequenz generiert, und ich möchte n Anzahl der erzeugten Sequenzen in eine Liste einfügen. Das ist, was ich gefunden habe, aber ich bekomme nichts, wenn ich es betreibe. Kann jemand helfen?Generieren einer Liste - nichts passiert

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) 

mein zweiter Versuch, bevor ich Antworten erhalten:

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

das war in der Tat das Problem, danke. Ich suchte nach den falschen Schlüsselwörtern auf Google, so dass der andere Thread nicht auftauchte. Es gibt jedoch ein anderes Problem, das ich habe, also werde ich die ganze Sache bearbeiten, um das Problem hervorzuheben. – grindbert

+0

Wenn Sie ein neues Problem haben, stellen Sie bitte eine neue Frage. Bearbeiten Sie keine vorhandene Frage, um eine neue Frage zu stellen. –

+0

ok, ich werde es zurück bearbeiten, dachte ich über Spam-Frage zu verhindern. Ich wusste das nicht, danke. – grindbert

Antwort

2

Sie vergessen haben, um tatsächlich die Funktion aufrufen.

Zum Beispiel, wenn Sie diese in einer 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) 

gibt mir die folgende Ausgabe genannt Datei setzen, wenn ich laufe es mit python main.py

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

Auch dem Argumente der generateSequence ist nutzlos, weil Sie seinen Wert in der Funktion mit dem Eingangsaufruf zurückgesetzt haben.

Bearbeiten Für die TypeError, Eingabe gibt Ihnen eine str (string). Sie benötigen eine Ganzzahl für die Bereichsfunktion (https://docs.python.org/2/library/functions.html#range), daher müssen Sie zuerst n konvertieren. Zum Beispiel for i in range(int(n))

Beachten Sie, dass diese davon ausgehen, dass n kann auf eine ganze Zahl umgewandelt werden. Wenn nicht, wird int (n) eine Ausnahme auslösen. ValueError: invalid literal for int() with base 10: 'fefw'

+0

Ich möchte fragen, was die "3" in generateSequence (3) tut. Auch mein Code hat sich ein wenig verändert, könntest du darüber nachsehen und mir sagen, welches mehr Sinn macht?Das Argument ist da, weil die Übung, die ich fand, sagte: "Schreibe eine Funktion generateSequences, die eine ganze Zahl n als Parameter erhält und gibt eine Liste zurück, die n zufällige DNA-Sequenzen der Länge 50 enthält." – grindbert

+0

Zweites macht mehr Sinn. Sie erhalten eine Eingabe und rufen die Funktion mit der Eingabe auf. Sie müssen jedoch vorsichtig sein, wie Sie es in der Funktion verwenden. Überprüfe meine Antwort, ich habe das Ende bearbeitet. – SnoozeTime

+0

Konvertieren funktioniert, danke. es läuft wie ich jetzt möchte. Ich bin immer noch ein bisschen neugierig auf die Nummer 3. Es scheint mir egal zu sein, welche Nummer ich dort eingebe (nicht, dass es für die Funktionalität wichtig ist, aber ich bin begierig zu lernen). Eine andere Frage, die ich habe, ist, wenn das tatsächlich "eine Funktion ist, die eine Ganzzahl n als Parameter erhält", weil ich mir darüber nicht sicher bin, nachdem du gesagt hast, dass es nutzlos ist. – grindbert

1

Im Hinblick auf die Funktionsdefinition, die Linie

for i in range(n): 

sollte auf einen String

for i in range(int(n)): 

weil die variable n Standardwerte sein, wenn der Eingang von der Befehlszeile durch die Funktion Eingabe unter .

Da Sie eine Funktion definiert, anstatt einfach ein Skript erstellen (ohne Funktionsdefinition), die folgende ruft die Funktion, die Sie festgelegt haben, wenn Sie die Datei aus dem Zeilenbefehl aufrufen .:

if __name__ == "__main__": 
    generateSequence() 

Auch return(L) kann einfach return L sein, da Sie das Ergebnis eines Ausdrucks (oder eines Tupels) nicht zurückgeben, sondern nur einen Wert.

Um es tragbar zu machen, können Sie eine Shebang-Linie am Anfang setzen.

#! /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() 
Verwandte Themen