2017-02-04 4 views
-2

existiert Ich brauche nächsten Algorithmus zu realisieren: wenn ich False mehr als dreimal erhalten, tun continue wenn diese Zahl weniger als 3, versuchen immer wieder.Python: versuchen Sie es erneut einige Blocks, wenn eine Bedingung

list = [1, 2, 3, 4, 5, 6, 6, 8, 8, 64, 4, 5, 6] 
result = False 
for elem in list: 
    trying = 0 
    while not result: 
     print(elem) 
     try: 
      result = elem % 2 == 0 
     except: 
      trying += 1 
      print(trying) 
      if trying == 3: 
       continue 
      else: 
       pass 

geht es nicht zu blockieren except. Kann jemand erklären, was ich ändern sollte, um wünschenswert zu werden?

+2

'result = elem% 2 == 0' weist 'false' oder 'True' zu' result' zu. Es kann keine Ausnahme auslösen. Was erwartest du ? –

+0

Kurz von 'elem' ist eine Liste oder ein String, der keinen'% 'Platzhalter oder etwas enthält, das keine Ausnahme auslöst. – jonrsharpe

+0

@ Jean-FrançoisFabre Stimmt, es gibt wirklich keinen Grund für Ihr "Versuch/außer". Können Sie erklären, was genau Sie erreichen möchten? –

Antwort

1

Ein except Block wird nur ausgeführt, wenn innerhalb des entsprechenden Blocks try eine Ausnahme ausgelöst wird.

Ihr Code erzeugt keine Ausnahmen (außer elem ist ein Objekt, das den Operator % nicht unterstützt, aber da Sie nur ganze Zahlen verwenden, passiert dies nicht).

Sie benötigen keine try-except Anweisung. Eine if Aussage ist besser geeignet:

while not result: 
    print(elem) 
    result = elem % 2 == 0 
    if not result: 
     trying += 1 
     print(trying) 
     if trying == 3: 
      continue 
     else: 
      pass 

Zweitens Die Art und Weise Sie continue verwendet nicht der Code verursacht, etwas anderes zu dem else Zweig zu tun, wie es am Ende der Ausführung Ihrer while Schleife ist. Sie hätten vielleicht break verwenden sollen.

Verwandte Themen