Seite 1 von 1
Fehler beim Primzahlen Programmieren.Bitte um Hilfe . Danke!
Verfasst: Samstag 14. März 2015, 19:19
von Thomas Kießer
Schönen Guten Abend ,
Ich habe gerade erst mit Phyton begonnen zu Programmieren.
Mein erstes kleines " Projekt " war , ein Programm für die Primzahlen zu entwerfen .
Leider kann ich den Fehler nicht finden und dachte mir vielleicht , dass mir einer aus dem Forum helfen könnte.
Code: Alles auswählen
max = int (input("Bis zu welcher Zahl willst du die Primzahlen wissen? : "))
for x in range(2, max + 1):
isPrime = True
for y in range(2 , x):
if x % y == 0:
isPrime = False
if isPrime:
print(x)
input("")
Wenn ich versuche ,dass Programm zu öffnen kommt direkt die Fehlermeldung :
line 9
isPrine=False
Taberror:inconcistens use of tabs and spaces in indentation
Leider weiß ich nicht was damit gemeint ist.
Ich habe einmal den Screenshot von Notepad hier :

Ich hoffe Sie können das Bild anklicken ,
Ich bedanke mich schon einmal im Voraus für eine Antwort.
mfg
Thomas Rießler
Re: Fehler beim Primzahlen Programmieren.Bitte um Hilfe . Da
Verfasst: Samstag 14. März 2015, 19:26
von BlackJack
@Thomas Kießer: Die Fehlermeldung bedeutet das Tabs und Leerzeichen gemischt werden und das zu inkonsistenter Einrückung führt so dass der Compiler nicht mehr weiss welcher Code zu einem Block gehört. Um so etwas zu vermeiden ist die Konvention vier Leerzeichen pro Einrückebene zu verwenden und gar keine Tabulatorzeichen.
Re: Fehler beim Primzahlen Programmieren.Bitte um Hilfe . Da
Verfasst: Samstag 14. März 2015, 19:47
von Thomas Kießer
Dankesehr BlackJacke für die schnelle Antwort.
Leider weiß ich nicht , wo ich Tabulatorzeichen verwendet hatte.
Es klappt mit 4 Einrückungen komischer weise immer noch nicht .
Danke für deine Hilfe !
Re: Fehler beim Primzahlen Programmieren.Bitte um Hilfe . Da
Verfasst: Samstag 14. März 2015, 19:52
von Sirius3
@Thomas Kießer: Dein Editor kann alle Tabs in Leerzeichen umwandeln und Du kannst ihn so einstellen, dass wenn Du die Tab-Taste drückst, 4 Leerzeichen eingefügt werden.
Re: Fehler beim Primzahlen Programmieren.Bitte um Hilfe . Da
Verfasst: Samstag 14. März 2015, 19:57
von Thomas Kießer
Ich weiß halt leider nicht wie ich das genau machen muss mit den Einrückungen .
Wie mir BlackJack ja schon gesagt hat ,dass ich meinen Code falsch eingerückt habe .
Aber irgendwie brauche ich ja noch die zusammenhänge . Gibt es irgendeine Faustregel oder so ?
Oder kann mir mal einer Vormachen wie man richtig Einrückt ?
Ich bin für jede Hilfe unendlich Dankbar .
mfg
Thomas Kießler
Re: Fehler beim Primzahlen Programmieren.Bitte um Hilfe . Da
Verfasst: Samstag 14. März 2015, 20:01
von Thomas Kießer
Ich habe es gerade durch ausprobieren raus bekommen.
Nun weiß ich immer noch nicht die Regel fürs einrücken.
Ich muss ja die verschiedenen Zeilen miteinander verbinden .
Und ich glaube es wird nicht funktionieren wenn ich alle bei jeder Zeile für 4 Leertasten abstand habe .
Dankesehr !
mfg
Thomas Kießler
Re: Fehler beim Primzahlen Programmieren.Bitte um Hilfe . Da
Verfasst: Sonntag 15. März 2015, 13:56
von BlackJack
@Thomas Kießer: Ordentlich und korrekt eingerückt müsste das so aussehen:
Code: Alles auswählen
limit = int(input('Bis zu welcher Zahl willst du die Primzahlen wissen? '))
for x in range(2, limit + 1):
is_prime = True
for y in range(2, x):
if x % y == 0:
is_prime = False
if is_prime:
print(x)
Neben der Einrückung habe ich zwei Namen geändert. `max` ist der Name einer eingebauten Funktion und `isPrime` entsprach in der Schreibweise nicht dem
Style Guide for Python Code.
Der Algorithmus an sich ist sehr ineffizient. Aber auch die Umsetzung dieses Algorithmus lässt sich einfach verbessern: Die innere ``for``-Schleife kann man verlassen sobald man den ersten Teiler gefunden hat. Wenn eine Zahl durch eine andere Teilbar ist braucht man ja nicht mehr nach weiteren Teilern suchen.
Mit der `all()`-Funktion und einem Generatorausdruck lässt sich das `is_prime`-Flag einsparen *und* die Funktion bricht beim ersten gefunden Teiler ab:
Code: Alles auswählen
for x in range(2, limit + 1):
if all(x % y != 0 for y in range(2, x)):
print(x)