@OSWALD: Die Einrückungstiefe sieht ziemlich willkürlich aus. Das sollten 4 Leerzeichen pro Ebene sein.
Die Funktion `Prim_Test()` wird nirgends verwendet. Und warum im letzten Schritt alle geraden Zahlen zwischen einer Unter- und Obergrenze berechnet werden, ist auch nicht so wirklich klar wenn man Primzahlen ermitteln will.
Alles was nach dem ersten `print()` kommt macht keinen Sinn und führt bei bestimmten Eingabewerten auch zum Programmabbruch weil `i` nicht immer definiert ist, bevor es verwendet wird.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Die ruft man nur auf, wenn das Modul als Programm ausgeführt wird, aber nicht wenn es als Modul importiert wird. Dann kann man beispielsweise einzelne Funktionen in einer Python-Shell ”live” ausprobieren und auch automatisierte Tests schreiben.
Code: Alles auswählen
#!/usr/bin/env python3
import math
def is_prime(n):
if n <= 2:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
def main():
unten = int(input("Untergrenze : "))
oben = int(input("Obergrenze : "))
print(list(filter(is_prime, range(unten, oben))))
if __name__ == "__main__":
main()
Die `is_prime()`-Funktion ist immer noch fehlerhaft, denn 2 ist eine Primzahl, aber die Funktion sagt sie wäre es nicht:
Code: Alles auswählen
$ py forum7.py
Untergrenze : 0
Obergrenze : 50
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]