2016-07-19 2 views
-3

Meine if-Anweisung sieht seltsam, aber ich kann nicht glauben, wie ich verhindern, dass von -1 Wert von Druck:Wie kann ich meine bedingte Anweisung umschreiben, um nicht -1 zu drucken?

### script counts the number of times that a key string appears in target string 

from string import * 

def countSubStringMatch(target,key): 
    value = target.find(key, 0) 
    print value 

    while value > -1: 
     value = value + 1 
     value = target.find(key, value) 

     if value != -1: 
      print value 
     else: 
      break 

countSubStringMatch("atgacatgcacaagtatgcat","atg") 

Das ist mein Ausgang:

0 
5 
15 
+0

Sie sind Verfahren ist mit ziemlicher Sicherheit nicht der beste Weg, um dieses Problem anzugehen. Aber ich denke, Sie sollten den Druck innerhalb der Funktionsdefinition durch eine Rückkehr ersetzen. Können Sie die Ausgabe der Funktion, die Sie aufrufen, in einer Bearbeitung anzeigen? –

Antwort

2

Sie können den anfänglichen Druck entfernen Anweisung, und drucken Sie stattdessen den Wert am Anfang des Körpers der Schleife, anstatt am Ende.

def countSubStringMatch(target,key): 
    value = target.find(key, 0) 

    while value > -1: 
     print value 

     value = value + 1 
     value = target.find(key, value) 

By the way, wenn Sie nur die Anzahl der Spiele und der Index von Beginn jedes Spiel möchten, können Sie count verwenden:

>>> count("atgacatgcacaagtatgcat","atg") 
# 3 
+0

das sieht viel besser aus :) danke! – scsi

1
def countSubStringMatch(target,key): 
    res = set([ data.find('atg',i) for i in range(len(data)) ]) 
    res.remove(-1) 
    print res 

countSubStringMatch("atgacatgcacaagtatgcat","atg") 

set([0, 5, 15]) 
Verwandte Themen