Seite 1 von 1
else: invalid syntax
Verfasst: Samstag 17. Oktober 2020, 14:41
von Renuschi
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))
Re: else: invalid syntax
Verfasst: Samstag 17. Oktober 2020, 15:16
von Sirius3
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.
Re: else: invalid syntax
Verfasst: Samstag 17. Oktober 2020, 15:19
von __blackjack__
@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.
Re: else: invalid syntax
Verfasst: Samstag 17. Oktober 2020, 15:59
von Renuschi
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))
:
Re: else: invalid syntax
Verfasst: Samstag 17. Oktober 2020, 16:31
von Sirius3
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.
Re: else: invalid syntax
Verfasst: Samstag 17. Oktober 2020, 18:18
von Renuschi
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.
Re: else: invalid syntax
Verfasst: Samstag 17. Oktober 2020, 18:23
von Sirius3
Wie schon geschrieben, schau Dir die Zeile davor an.
Re: else: invalid syntax
Verfasst: Sonntag 18. Oktober 2020, 12:44
von Renuschi
Ich danke dir Sirius3, habs jetzt geschafft.
Mir stand wohl gestern jemand auf der Leitung...