Python Schleife mit continue/Syntax Fehler

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
HerrWolf
User
Beiträge: 6
Registriert: Mittwoch 4. April 2018, 17:33

Hallo zusammen

Ich lerne gerade Python und habe ein Problem mit einer Schleife mit dem continue Statement.
Hier der Auschnitt:

Code: Alles auswählen

 
try:
    zahl=int(z)

except:
    #Fehler anzeigen wenn Umwandlung nicht erfolgreich
    print("Sie haben keine ganze Zahl eingegeben") 
    #Vortsetzung der schleife
    continue
SyntaxError: 'continue' not properly in loop

Ich habe schon gelesen das continue nur in einer for und while Schleife stehen darf
aber bis jetzt hab ich noch keine andere Lösung gefunden. :K

Hoffe mir kann jemand helfen :(

PS: Ich lerne Python mit einem Buch wo dieser Code enthalten war.
Warum ist er dann Falsch :?: :?: :?: :?:
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@HerrWolf: die Fehlermeldung ist doch eindeutig: Du brauchst eine Schleife, hast aber keine. Was willst Du denn erreichen? Für was brauchst Du eine Lösung?

Nackte Excepts niemals verwenden. Hier erwartest Du ja, dass ein Fehler bei der Umwandlung in eine Zahl auftritt, ergo ein ValueError.
HerrWolf
User
Beiträge: 6
Registriert: Mittwoch 4. April 2018, 17:33

Code: Alles auswählen

while zahl != c:
    versuch=versuch+1

    print("Eine Zahl eingeben:")
    z=input()

 #Versuch einer Umwandlung 
try:
            zahl=int(z)
except:
    #Fehler anzeigen wenn Umwandlung nicht erfolgreich
    print("Sie haben keine ganze Zahl eingegeben") 
    #Vortsetzung der schleife
    continue
Muss ich dann try und except in die while schleife packen??
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@HerrWolf: Einrückungen bestimmen, was zu welchem Block gehört. Das try-except gehört bei Dir nicht zum while-Block, also gibt es auch nicht was man fortsetzen könnte. Bei Dir gibt es auch nichts, was mit `continue` übersprungen werden könnte, so dass das `continue` sowieso überflüssig ist.
HerrWolf
User
Beiträge: 6
Registriert: Mittwoch 4. April 2018, 17:33

Hier mal der ganze code

Code: Alles auswählen

import random
random.seed()

#Variabeln festlegen
a= random.randint(1,10)
b= random.randint(1,10)
c= a+b
print("Die Aufgabe:",a,"+",b)

#Schleife & Anzahl initialisieren
zahl=c+1
versuch=0

#Schleife mit while
while zahl != c:
    versuch=versuch+1

    print("Eine Zahl eingeben:")
    z=input()

 #Versuch einer Umwandlung 
try:
     zahl=int(z)
except:
    #Fehler anzeigen wenn Umwandlung nicht erfolgreich
    print("Sie haben keine ganze Zahl eingegeben") 
    #Vortsetzung der schleife
    continue

#Verzweigung
if zahl == c:
    print(zahl,"ist Richtig")
else:
    print(zahl,"ist falsch")

#Anzahl versuche
print("Ergebnis",c)
print("Anzahl versuche",versuch)
Ich probiers mal mit einrücken und schau ob es geht :?
HerrWolf
User
Beiträge: 6
Registriert: Mittwoch 4. April 2018, 17:33

WOW :roll:

Ich hab nicht richtig eingerückt :roll:
Ich habs nämlich schon mal probiert mit einrücken und es hat trotzdem nicht funktioniert
Danke für deine schnelle Hilfe :)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@HerrWolf: noch ein paar Anmerkungen zum Code: `random.seed` weglöschen. Das aufzurufen vermindert die Zufälligkeit der Zahlen ist also unsinnig. Statt eine Variable `zahl` mit einem Dummy-Wert zu initialisieren, um in die while-Schleife einzusteigen, sollte man ein Endlosschleife `while True:` schreiben und die Abbruchbedingung am Schluß prüfen und mit break aus der Schleife aussteigen. Die if-Abfrage `zahl == c` ist immer wahr, da das ja durch die while-Schleifenbedingung sichergestellt wird.
[codebox=python file=Unbenannt.txt]
import random

# Aufgabe festlegen
a = random.randint(1,10)
b = random.randint(1,10)
c = a + b
print("Die Aufgabe:", a, "+", b)

versuch = 0
while True:
versuch += 1
zahl = input("Eine Zahl eingeben:")

#Versuch einer Umwandlung
try:
zahl = int(zahl)
except ValueError:
#Fehler anzeigen wenn Umwandlung nicht erfolgreich
print("Sie haben keine ganze Zahl eingegeben")
else:
# Abbrechen, wenn Zahl richtig
if zahl == c:
break

print(zahl, "ist Richtig")
print("Ergebnis", c)
print("Anzahl versuche", versuch)[/code]
HerrWolf
User
Beiträge: 6
Registriert: Mittwoch 4. April 2018, 17:33

Danke
Aber da ich noch ein anfänger bin halt ich mich lieber an das Buch.
Vielleicht kommt das ja noch.
Man entwickelt das immer weiter mit den neuen Sachen die man gelernt hat mit jedem Kapitel.
Aber trotzdem Danke für die Tips :)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

HerrWolf hat geschrieben:Aber da ich noch ein anfänger bin halt ich mich lieber an das Buch.
Du siehst ja wo du hinkommst wenn du einfach stur aus "dem Buch" abschreibst. Du hattest einen Fehler und konntest ihn nicht lösen weil du gar nicht verstanden hast worum es ging. Es schadet sicher nicht, mal etwas Eigeninitiative zu zeigen und auch mal Dinge außerhalb "des Buchs" zu lernen und auszuprobieren.

Zudem: wenn das wirklich Code aus dem Buch war, das du zum Lernen nimmst, dann hat besagtes Buch entweder einen didaktisch höchst ungewöhnlichen Ansatz oder es ist Mist. Ein nacktes `except` ohne Angabe des zu erwartenden Fehlers spricht Bände.
HerrWolf
User
Beiträge: 6
Registriert: Mittwoch 4. April 2018, 17:33

Ich hab jetzt noch mal im Buch nachgeschaut und festgestellt das ich einfach zu unfähig war den Code richtig abgeschrieben. Weil der Code über zwei Buchseiten ging habe ich die Einrückung übersehen. :shock:
Im Buch war also alles Richtig :roll:
Antworten