else: invalid syntax

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
Benutzeravatar
Renuschi
User
Beiträge: 6
Registriert: Samstag 17. Oktober 2020, 14:26

Hallo Miteinander,

Ich habe vor kurzem angefangen zu Programmieren. Momentan schreibe ich ein Skript zu einer Aufgabe, welche Primzahlen erkennen soll.
Wenn ich mein Skript jedoch ausführen will kriege ich folgende Fehlermeldung:
File "aufgabe4.py", line 17
else:
^
SyntaxError: invalid syntax

Nun hier noch mein

Code: Alles auswählen


def is_prime(n):
	number = n
	if number == 1:
		print("1 is the multiplicative identity")
	elif number == 2:
		print("2 is prime")
	elif number == 3:
		print("3 is prime")
	elif number == 5:
		print("5 is prime")
	elif number == 7:
		print("7 is prime")

	elif number >= 4:
		if number % 2 == 0 or number % 3 == 0 or number % 5 == 0 or number % 7 == 0:
			print(str(number) + " is not a prime number (a * b = x))"
	else:
		print(str(number) + " is prime")
	
print(is_prime(12))

Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

Dass der Compiler erkennt, dass ein Syntaxfehler vorliegt, passiert oft später. Da hilft es, in der Zeile davor nach dem Fehler zu suchen.

Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs.
Strings setzt man nicht per + zusammen, sondern benutzt Formatstrings.
Warum nennest Du `n` in `number` um, statt gleich `number` zu benutzen?
Die Funktion gibt nichts explizit zurück, das `print` am Schluß ist also nicht sinnvoll.
Auch gibt die Funktion nicht immer etwas aus.
Bei einer Funktion die is_irgendwas heißt, würde die Nutzerin erwarten, dass sie einen Wahrheitswert als Rückgabe bekommt.

Der Test ist nicht sehr zuverlässig.
Zuletzt geändert von Sirius3 am Samstag 17. Oktober 2020, 15:20, insgesamt 1-mal geändert.
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Renuschi: Eingerückt wird vier Leerzeichen pro Ebene, nicht mit Tabs.

Warum heisst das Argument `n` und nicht `number`? Die Umbenennung innerhalb der Funktion ist dann überflüssig.

Die einzelnen ``elif``\s für 2, 4, 5, und 7 sind überflüssig, das könnte man mit *einer* Bedingung prüfen. Mit ``and`` oder kürzer mit ``in`` und einer Sequenz mit dem Zahlen.

`is_prime()` sollte nichts ausgeben, sondern `True` oder `False` an den Aufrufer liefern. Oder einen anderen Namen haben, der nicht nach einer Funktion klingt, die nur einen Test durchführt.

Falls die Funktion die Ausgabe machen soll, ist das `print()` beim Aufruf der Funktion sinnlos, denn das gibt ja den *Rückgabewert* von `is_prime()` aus. Und der ist momentan `None`, weil die Funktion ja gar nicht explizit etwas zurück gibt.

Die Stelle auf die ein Syntaxfehler verweist ist der Punkt im Quelltext an dem der Compiler gemerkt hat, das etwas nicht stimmt. Das heisst der eigentliche Fehler ist nicht immer genau an diesem Punkt sondern oft auch davor. Zähl mal in der davor liegenden Zeile die Klammern. Insbesondere schau mal wo die schliessende Klammer zu dem `print()`-Aufruf ist.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Renuschi
User
Beiträge: 6
Registriert: Samstag 17. Oktober 2020, 14:26

Vieles ist in meiner Aufgabe vorgegeben wie zum Beispiel: Funktionname und Parameter, der Aufruf am Ende und die zurückgegebenen Antworten(diese prints).

Meine Aufgabe ist es den Block so zu ändern, dass der eingegebene Parameter überprüft wird.

Wenn ich euren Einrückungstipp beachte kommt immer noch der selbe Fehler...
Vielleicht könnt ihr mein Code verbessern oder ausprobieren...

Überarbeiteter

Code: Alles auswählen


def is_prime(n):
    if n == 1:
        print("1 is the multiplicative identity")
    elif n == 2:
        print("2 is prime")
    elif n == 3:
        print("3 is prime")
    elif n == 5:
        print("5 is prime")
    elif n == 7:
        print("7 is prime")
    elif n >= 4:
        if n % 2 == 0 or n % 3 == 0 or n % 5 == 0 or n % 7 == 0:
            print(str(n) + " is not a prime number (a * b = x))"
    else:
        print(str(n) + " is prime")
	
print(is_prime(12))
:
Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

Das kann ich kaum glauben, dass sowohl die `print` innerhalb der Funktion als auch das `print` danach so vorgegeben sind.
Der Syntaxfehler hat nichts mit der Einrückung und den ganzen anderen Mängeln zu tun.
Benutzeravatar
Renuschi
User
Beiträge: 6
Registriert: Samstag 17. Oktober 2020, 14:26

Weswegen kommt dann der Syntaxfehler?
Muss ich etwas “returnen” weil die Funktion true or false erwartet?

Tut mir leid, wenn ich dumme Fragen stelle, aber bin erst seit 2 Wochen am programmieren.
Wenn ich zuhause bin kann ich dir gerne meine Aufgabenstellung zukommen lassen.
Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie schon geschrieben, schau Dir die Zeile davor an.
Benutzeravatar
Renuschi
User
Beiträge: 6
Registriert: Samstag 17. Oktober 2020, 14:26

Ich danke dir Sirius3, habs jetzt geschafft.
Mir stand wohl gestern jemand auf der Leitung...
Antworten