2016-08-17 2 views
0

Wenn ich dies ausfühle, gibt es keine Antwort. Warum oder was könnte dieses Problem verursachen?Keine Ausgabe beim Auffinden der häufigsten k-mers in Text

Hier ist der Code, den ich ausprobiert habe.

#Frequent Words 

name = raw_input("Enter file:") 
if len(name) < 1 : 
    name = "dataset_2_10.txt" 
handle = open(name,"r") 
Text = handle.read() 
k = raw_input("Enter k:") 
k = int(k) 

def PatternCount(Text,Pattern): 
    count = 0 
    i = 0 
    while i < len(Text)-len(Pattern): 
     if Text[i:i+len(Pattern)] == Pattern : 
      count = count + 1 
     i = i + 1 
    return count 

FrequentPatterns = list() 
i = 0 
Count = list() 
while i < len(Text)-k: 
    Pattern = Text[i:i+k] 
    Count.append(PatternCount(Text,Pattern)) 
    i = i + 1 
maxCount = max(Count) 
#print maxCount 
j = 0 
while j < len(Text)-k: 
    if Count[j] == maxCount: 
     FrequentPatterns.append(Text[j:j+k]) 
     print Count[j] 
     j = j + 1 
print FrequentPatterns 

Jede Hilfe würde sehr geschätzt werden.

+0

Willkommen bei SO. Bitte nehmen Sie sich die Zeit, Ihren Code richtig zu formatieren und geben Sie genügend Informationen darüber, was Sie erreichen möchten. Was erwartest du zu passieren und was stattdessen passiert, etc. Überlege dir, ob du die [how-to-ask-Seite] (http://stackoverflow.com/help/how-to-ask) noch einmal durchlesen musst. – m00am

+0

@ThatAwesomeCoder Beachten Sie beim Bearbeiten von Python-Fragen, dass Python syntaktisch wichtige Leerzeichen verwendet. Ihre Bearbeitung hat dem Code Fehler hinzugefügt. Der Titel bezog sich auf "häufigste k-mers", also war es auch richtig. – m00am

Antwort

0

Sie erhalten keine Ausgabe, da Sie jedes Mal, wenn Sie ein k größer als eins bereitstellen, in eine Endlosschleife geraten.

Dies liegt daran, dass Sie in der zweiten While-Schleife nur j erhöhen, wenn der k-mer gefunden wurde. Aber da die Bedingung if Count[j] == maxCount: nicht immer für k> 1 erfüllt ist, erreichen Sie nicht die j = j + 1 und j bleibt gleich. (Sie können sehen, dass, wenn Sie einen Druck Anweisung der Schleife hinzufügen.)

dies die j = j + 1 aus dem if-Block bewegen zu beheben (wo es jetzt ist) auf der Schleife, wie folgt aus:

j = 0 
while j < len(Text)-k: 
    if Count[j] == maxCount: 
     FrequentPatterns.append(Text[j:j+k]) 
     print Count[j] 
    j = j + 1 

Jetzt wird j jedes Mal inkrementiert, unabhängig davon, ob das k-mer gefunden wurde oder nicht.


Das heißt, in Python gibt es einen besseren Weg, dies zu tun. Sie können eine For-Schleife verwenden, um über alle Indizes zu iterieren, wie Sie es jetzt tun, aber ohne die Gefahr von Endlosschleifen. Betrachten Sie dies:

i = 0 
while i < 10: 
    print i 
    i = i + 1 

for j in range(10): 
    print(j) 

Die zweite Schleife ergibt das gleiche Ergebnis und ist viel weniger anfällig für Fehler. Sie erzeugen eine Liste der Nummern [0, .., 9] mit range(10) und verwenden dann jedes Element aus der Liste.

Verwandte Themen