2016-04-03 14 views
0

Ich bin etwa ein paar Wochen in Python zu lernen.Bitte helfen Sie mir, dieses eine "außer" bedingte Linie besser zu verstehen

Mit der Anleitung von Benutzer: 'Lost' hier auf Stackoverflow konnte ich herausfinden, wie man ein einfaches Decoder-Programm erstellt. Er schlug einen Code vor und ich änderte ein paar Dinge, aber was für mich wichtig war, war, dass ich verstand, was passierte. Ich verstehe 97% dieses Codes außer der except: i += 1 Linie in der decode(). Ab sofort funktioniert der Code, aber ich möchte diese Zeile verstehen.

Also im Grunde entschlüsselt dieser Code ein verschlüsseltes Wort basierend auf einem bestimmten Kriterium. Sie können dieses verschlüsselte Beispielwort eingeben, um es auszuprobieren. "0C1gA2uiT3hj3S" die Antwort sollte "CATS" sein

Ich habe versucht, das zu ersetzen, außer: i += 1 mit einem Fehlerwert, weil ich nie einen Try/außer bedingten haben gesehen, dass hatte nur eine operative und keine Fehler-Klausel. Aber das Ersetzen durch Value Error erzeugte eine nie endende Schleife.

Meine Frage ist, was ist der Zweck des Schreibens der Ausnahme: i += 1 wie es ist.

'Verloren', wenn Sie dort sind, könnten Sie diese Frage beantworten. Sorry, um den alten Thread

def unscramble(elist): 

    answer = [] 
    i = 0 

    while i <= len(elist): 

     try: 
      if int(elist[i]) > -1: 
       i = i + int(elist[i]) + 1 
       answer.append(elist[i]) 
     except: 
      i += 1 

    return "".join(answer) 

def boom(): 
    eword = input("paste in your encrypted message here >> ") 
    elist = list(eword) 
    answer = unscramble(elist) 
    print (answer) 

clear() 
boom() 
+2

Das ist nicht gut Code ist, empfehle ich Ihnen etwas anderes zu lernen zu finden. – jonrsharpe

+0

Beginnen Sie hier: https://docs.python.org/3/tutorial/errors.html –

Antwort

0

Der Zweck ist i durch ein vorzurücken, das aktuelle Zeichen, falls das Überspringen der Cast zu int ausfällt, das heißt, wenn elist[i] keine Ziffer ist.

+0

Danke wonce! Jeder ist hier wirklich hilfreich. – user3564925

0

Es gibt ein paar Fehler, als innerhalb des try-Blocks auftreten:

  1. i aus Index ist, weil die while-Schleife zu weit ein Index läuft.
  2. elist[i] keine Zahl ist, die zu einer Valueerror
  3. i = i + int(elist[i]) + 1 werden zu groß führt, und der Zugang nächste Index führt auch zu einer Indexerror

In beide Weise wird die Ausnahme-Klausel wird die nächste ignorieren Charakter. Und die Schleife geht weiter.

Eine korrekte Implementierung würde keine Ausnahmen benötigen:

def unscramble(elist): 
    answer = [] 
    i = 0 
    while i < len(elist): 
     i += int(elist[i]) + 1 
     answer.append(elist[i]) 
     i += 1 
    return "".join(answer) 
+0

Ich sehe Daniel! Vielen Dank. Dein Code ist viel sauberer. – user3564925

+0

Der Code ist jedoch nicht gleichwertig. Der ursprüngliche Code wird "0CX1gA2uiT3hj3S" in "CATS" entschlüsseln, dieser wird einen Fehler auslösen. – wonce