Also wenn ich deinen Code ausführen lasse, wird das hier ausgegeben:
Code: Alles auswählen
3 5 5 5 7 7 7 7 7 9 11 11 11 11 11 11 11 11 11 13 13 13 13 13 13 13 13 13 13 13 15 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 19 19 19
19 19 19 19 19 19 19 19 19 19 19 19 19 19 21 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 25 25 25 27 29 29 29 29 29
29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
31 31 31 31 31 31 33 35 35 35 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 39 None
So, da sind jede Menge Primzahlen, aber auch nicht Primzahlen dabei, zB 15 , 25, 33 und am Ende steht da ein None.
Fangen wir mit dem Ende an, in der Funktion gibts du die Zahlen per Print() aus (schlecht) und rufst dann die Funktion mit print() auf.
Eine jede Funktion liefert None zurück wenn ihr nicht per return ein anderer Rückgabewert zugewiesen wird.
Also aus dem print(allePrim(40)) wird ein allePrim(40), dann ist das None weg.
Für jede Zahl i von 2 bis t durchläuft deine innere Schleife die Teiler von 2 bis i, das ist schlecht.
Teste zuerst ob die Zahl durch 2 teilbar ist, wenn ja ist sie keine Primzahl,
des Weiteren reicht es bis zur Wurzel der Zahl i zu testen, alle Tests danach sind überflüssig, also for j in range(3, int(sqrt(i)+1)):
Dann überprüfst du, ob die Zahl i ganzzahlig durch den Teiler j teilbar ist, wenn ja, brichst du die innere Schleife per break ab,
aber das trifft ja auch
nicht zu und in dem Fall gibst du jeweils per print(i) die Zahl aus.
Ich würde den Primzahl-Test in eine Funktion auslagern, die Wahr oder Falsch liefert.
Die Funktion allePrim() erzeugt dann eine Liste mit allen Primzahlen im Bereich 2 bis t
Mit einer for-Schleife kannst du dann alle Elemente dieser Liste ausgeben lassen.
Jetzt musst du dir nur noch die Funktion is_prime() überlegen
Code: Alles auswählen
def is_prime(number):
return False, falls number keine Primzahl
return True, falls number eine Primzahl ist
def allePrim(t):
return [i for i in range(2, t) if is_prime(i)]
for zahl in allePrim(200):
print(zahl)
Edit: für sqrt() musst du math importieren, und dann mit math.sqrt() aufrufen
Suche mal nach der Funktion all(), was die so macht, könnte hilfreich sein