2014-02-18 10 views
31

ich habe:Python: Finden Sie einen Teil in einem String und Rückführen den Index des Teils

  • eine Funktion: def find_str(s, char)

  • und ein String: "Happy Birthday",

Ich möchte im Wesentlichen "py" eingeben und 3 zurückgeben, aber ich bekomme stattdessen 2 zurückgeben.

Code:

def find_str(s, char): 
    index = 0   
    if char in s: 
     char = char[0] 
     for ch in s: 
      if ch in s: 
       index += 1 
      if ch == char: 
       return index 

    else: 
     return -1 

print(find_str("Happy birthday", "py")) 

nicht sicher, was ist falsch!

Antwort

5

Im Idealfall würden Sie str.find oder str.index wie dementen Igel verwenden sagte. Aber Sie sagen, Sie können nicht ...

Ihr Problem ist der Code nur für das erste Zeichen Ihrer Suchzeichenfolge durchsucht, die (die erste) am Index ist 2.

Sie sagen, im Grunde, wenn char[0] ist in s, Inkrement index bis ch == char[0], die 3 zurückgegeben, wenn ich es getestet habe, aber es war immer noch falsch. Hier ist ein Weg, es zu tun.

def find_str(s, char): 
    index = 0 

    if char in s: 
     c = char[0] 
     for ch in s: 
      if ch == c: 
       if s[index:index+len(char)] == char: 
        return index 

      index += 1 

    return -1 

print(find_str("Happy birthday", "py")) 
print(find_str("Happy birthday", "rth")) 
print(find_str("Happy birthday", "rh")) 

Es erzeugt die folgende Ausgabe:

3 
8 
-1 
+0

Ich muss einen Algorithmus schreiben, der die .find-Funktion ausführt. Ich kann es leider nicht einfach benutzen! – Tyler

+0

@Tyler Bearbeitete meine Antwort, da es keine tatsächliche Antwort auf Ihre Frage gab. –

+0

danke, sehr hilfreich !! – Tyler

115

Es gibt eine eingebaute Methode auf String-Objekte diese Sie wissen, in Python zu tun?

s = "Happy Birthday" 
s2 = "py" 

print s.find(s2) 

Python ist ein „Batterien Sprache enthalten“ gibt es Code geschrieben meisten zu tun, was Sie schon wollen (was auch immer Sie wollen) .. es sei denn, diese Hausaufgaben ist :)

Edit: find -1, wenn Die Zeichenfolge kann nicht gefunden werden.

+8

Dies sollte die angenommene Antwort sein – Kev1n91

+2

nicht basierend auf dem, was gefragt wird – Oliver

+1

Hängt davon ab, wie Sie die Frage interpretieren. Wenn die Frage ist, was im Titel steht, ist es in Ordnung.Auch wenn es nicht so ist, solltest du deine eigene Suchmethode nicht schreiben, außer du machst Hausaufgaben oder für autodidaktische Zwecke. Also "du machst es falsch" ist eine vernünftige Antwort. –

0

spät in die Partei, suchte nach dem gleichen, wie "in" ist nicht gültig, ich hatte gerade folgende erstellt.

def find_str(full, sub): 
    index = 0 
    sub_index = 0 
    position = -1 
    for ch_i,ch_f in enumerate(full) : 
     if ch_f.lower() != sub[sub_index].lower(): 
      position = -1 
      sub_index = 0 
     if ch_f.lower() == sub[sub_index].lower(): 
      if sub_index == 0 : 
       position = ch_i 

      if (len(sub) - 1) <= sub_index : 
       break 
      else: 
       sub_index += 1 

    return position 

print(find_str("Happy birthday", "py")) 
print(find_str("Happy birthday", "rth")) 
print(find_str("Happy birthday", "rh")) 

die

3 
8 
-1 

entfernen produziert niedriger() für den Fall, Groß- und Kleinschreibung nicht erforderlich finden.

Verwandte Themen