2016-10-24 4 views
1

Ich versuche, die rfind-Funktion in Python zu implementieren, ohne die integrierte rfind-Methode zu verwenden. Es sollte wie folgt funktionieren: Im Gegensatz zur ursprünglichen Methode, nimmt eine Eingabezeichenfolge und ein Zeichen als Parameter und gibt den ersten Index von rechts, wo das Zeichen gefunden wird. Nun steckte ich bin immer auf das, was als nächstes zu tun ..Implementieren von rfind in Python

# main function 
inputString = input("Enter here: ") 
inputChar = input("Which character would you like to find?") 
print(Myrfind(inputString, inputChar)) 

def Myrfind(text,aChar): 
    reverseString = text[::-1] 
    for ch in reverseString: 
     if ch == aChar: 
      print() 
     else: 
      return -1 
+2

warum verwenden Sie 'print()' statt 'return'? – furas

+0

@furas will er den Wert der Variablen sehen, vielleicht? Aber vielleicht gibt es nach der Druckfunktion 'return'. – KeyWeeUsr

Antwort

1

Ihre Funktion sollte wie (in aktuellen Code mit minimalen Änderungen) sein:

def Myrfind(text,aChar): 
    reverseString = text[::-1] 
    for i, c in enumerate(reverseString): # enumerate() to iterate along with index 
     if c == aChar: 
      return len(text) - i - 1 # Return len(char) - i -1 since reverse string 
    else:   # Return -1 if function is not 
     return -1 # exited by for loop 

Probelauf:

>>> Myrfind('Hello', 'o') 
4 
>>> Myrfind('Hello', 'l') 
3 
>>> Myrfind('Hello', 'e') 
1 
>>> Myrfind('Hello', 'a') # 'a' not in string 
-1 
2

Der einfachste Ansatz, IMHO, besteht darin, einfach die Zeichenfolge rückwärts zu durchlaufen und jedes Zeichen zu vergleichen:

def myrfind(text, aChar): 
    for i in range(len(text) - 1, -1, -1): 
     if text[i] == aChar: 
      return i 
    return -1 
0

Also, in ch Sie haben den Charakter, nicht der Index des Zeichens, also auch wenn Sie es finden, werden Sie nicht in der Lage sein, seinen Index zu kennen (Sie wissen nur, dass das Zeichen in Ihre text string, sonst nichts)

auch, wenn Sie einen Zufall finden, Sie drucken ... nichts (in print())

Und da die return -1 (wenn nicht gefunden) befindet sich in der for Schleife, werden Sie Stoppen Sie die Ausführung (Rückgabe -1), sobald ein Zeichen nicht mattiert ch das nachgeschlagene Zeichen (Sie sollten sehr vertraut sein mit der return Anweisung)

Sie kehren die Zeichenfolge um, aber das ist wahrscheinlich nicht sehr ... "raten", weil dann Ihre Indizes umgekehrt werden. Angenommen, Sie möchten die letzte l in Hello finden. Sie erwarten:

 H e l l o 
Index 0 1 2 3 4 

Und das 3 sein sollte, aber da Sie es umgekehrt, und starten Sie es von links nach rechts zu Fuß erhalten Sie:

 o l l e H 
Index 0 1 2 3 4 

Und das erste Spiel ist in 1, Jetzt ... Sie können es immer noch tun ... Sie können diesen Index auf die Gesamtlänge subtrahieren, und Sie sollten es bekommen.

Erstens würde ich empfehlen, lesen Sie, was die enumerate Einbau-tut (nicht nur den Charakter, aber auch der Index)

Ein ziemlich nahe, was zu dem, was Sie haben könnten sein:

inputString = input("Enter here: ") 
inputChar = input("Which character would you like to find?") 


def Myrfind(text,aChar): 
    reverseString = text[::-1] 
    for i, ch in enumerate(reverseString): 
     if ch == aChar: 
      return len(text) - 1 - i 
    return -1 


print(Myrfind(inputString, inputChar)) 

Oder stattdessen das Array invertieren, starten Sie einfach von rechts zu lesen (was range tut)

def Myrfind(text,aChar): 
    for i in range(len(text) - 1, -1, -1): 
     ch = text[i] 
     if ch == aChar: 
      return i 
    return -1 
Verwandte Themen