2016-09-14 3 views
-1

Hallo vielen Dank im Voraus.Index außerhalb des Bereichs verstehen Python

Ich kann meinen Code zu arbeiten, aber ich brauche Hilfe zu verstehen, was das Problem ist.

Ich mache einen Test Fragen zu Codingbat und stieß auf diesen.

Geben Sie an, wie oft die Zeichenfolge "code" an einer beliebigen Stelle in der angegebenen Zeichenfolge angezeigt wird. Akzeptieren Sie einen beliebigen Buchstaben für "d", also "cope" und "coee".

count_code ('aaacodebbb') → 1 count_code ('codexxcode') → 2 count_code ('cozexxcope') → 2

jetzt nach ein paar Versuchen ich meinen Code an die Arbeit

def count_code(str): 
    count =0 
    for i in range(len(str)): 
     if str[i:i+2] == 'co' and str[i+3:i+4]=='e': 
      count += 1 
    return count 
print(count_code('codecodecode')) 

^ich verstehe diese (und ich reguläre Ausdrücke getan haben könnte, aber ich kann nicht importieren)

diese

Aber mein erster Versuch war:

def count_code(str): 
    count =0 
    for i in range(len(str)): 
     if str[i:i+2] == 'co' and str[i+3]=='e': 
     count += 1 
    return count 
print(count_code('codecodecode')) 

der Browser (der Browser speichert, kompiliert und ausgeführt wird) gab mir einen Index außerhalb des zulässigen Bereichs Fehler und nach dem Test verstehe ich, warum. wenn i = 9 ... i + 9 = 12 was länger ist als die Saite also außerhalb der Reichweite, bekomme ich es. Aber ich habe den 2. Code in Aptana ausgeführt und es hat gut funktioniert, also ist der zweite schlechte Code oder nicht?

aber der Code, der mit str [i + 3: i + 4] == 'e' funktioniert nicht außerhalb der Reichweite und ich verstehe nicht warum. Wenn ich Zähler 9 erreiche, wäre es str [12:13], das länger ist als die Saite.

danke für die Hilfe immer noch Grundlagen zu lernen und möchte sicherstellen, dass ich eine gute Grundlage habe.

Antwort

0

Wenn Sie sagen mystring[x:y], heißt das schneiden, die integrierte Grenzen Überprüfung hat.

Aber ein einfacher Listenindex wie mystring[99] hat keine integrierten Grenzen, so dass Sie eine IndexError erhalten.

+0

dank beiden Antworten. beide halfen es dem 1. zu geben. – Atropos

0

Dies ist nur eine Funktion zum Aufteilen von Strings in Python. Beachten Sie, dass

stringvar = 'aaacodebbb' 
stringvar[10000:10001] 

gibt einen leeren String-Wert und keinen Fehler zurück.

jedoch

stringvar[10000] 

wird einen Fehler zurück.

Wie in der Antwort von this question:

Python ist eine Art für den Programmierer, wenn es weniger Elemente sind als man sich nur wünschen. Wenn Sie beispielsweise nach einem [: - 2] fragen und nur ein Element enthält, erhalten Sie eine leere Liste anstelle eines Fehlers. Manchmal würden Sie den Fehler bevorzugen, also müssen Sie sich bewusst sein, dass dies passieren kann.

In den Beispielen Ihnen gegeben haben, Python mit nicht Rückkehr eines „Index außerhalb des zulässigen Bereichs“ Fehler sind ideal.

Verwandte Themen