Fehler beim Primzahlen Programmieren.Bitte um Hilfe . Danke!

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
Thomas Kießer
User
Beiträge: 4
Registriert: Samstag 14. März 2015, 18:59

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 : Bild
Ich hoffe Sie können das Bild anklicken ,

Ich bedanke mich schon einmal im Voraus für eine Antwort.


mfg

Thomas Rießler
Zuletzt geändert von Anonymous am Samstag 14. März 2015, 19:24, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
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.
Thomas Kießer
User
Beiträge: 4
Registriert: Samstag 14. März 2015, 18:59

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 !
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Thomas Kießer
User
Beiträge: 4
Registriert: Samstag 14. März 2015, 18:59

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
Thomas Kießer
User
Beiträge: 4
Registriert: Samstag 14. März 2015, 18:59

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
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)
Antworten