Seite 1 von 1

Python Primes

Verfasst: Sonntag 18. November 2018, 21:14
von TheErebos
Hey,

bin noch ein kompletter Neuling im progammieren mit Python und bräuchte einmal einen Ratschlag. Irgendwie will dieser Code nicht richtig und mir ist nicht ganz klar weshalb:

Code: Alles auswählen

 #!/usr/bin/python
#Get primes

start=input("All primes bigger than : ");
stop=input("All primes smaller than: ");



def get_primes(start, stop):
    
    if int(start)<=int(stop)+1:
        return();
    
    primes = [2];

    for n in range(3, int(stop), 2):
        for p in primes:
            if n % p == 0:
                break
            else:
                primes.append(n)
    while primes[0] <= int(start):
        del primes[0]
    return(primes);

exprimes = input[get_primes(start,stop)];

print(exprimes);
input();
        

Re: Python Primes

Verfasst: Sonntag 18. November 2018, 22:34
von Sirius3
Alle Strichpunkte sind falsch; in Python benutzt man ; um Anweisungen in einer Zeile zu trennen, aber man sollte nicht mehr als eine Anweisung pro Zeile schreiben.

`start` und `stop` sollten schon Ganzzahlen sein, die Umwandlung macht man einmal beim Einlesen und nicht jedes mal beim Benutzen. Die if-Abfrage am Anfang von `get_primes` liefert ein leeres Tuple zurück, falls start < stop + 2, der Rest des Codes sorgt aber dafür, dass im anderen Fall eine leere Liste zurückgeliefert wird; da vermute ich mal, die if-Abfrage ist falsch.
Warum liefert die Funktion überhaupt einmal ein Tuple und einmal eine Liste zurück? Das sollte doch immer eine Liste sein.
`primes` wird in jedem Durchlauf der äußeren Schleife um so viele n erweitert, wie Teilerfremde Zahlen in primes enthalten sind, die Liste wächst also nahezu faktoriel.
`input` ist eine Funktion und erlaubt keinen Indexzugriff.

Re: Python Primes

Verfasst: Dienstag 20. November 2018, 02:46
von Chr0medome
Ich verstehe nicht so recht was die while-Schleife da zu suchen hat?

Re: Python Primes

Verfasst: Dienstag 20. November 2018, 08:17
von Sirius3
@Chr0medome: der Algorithmus braucht alle Primzahlen ab 3 (benutzt sie aber ab 2) soll aber nur die Zahlen ab `start` zurückliefern, daher muß man irgendwie die zu kleinen Zahlen herausnehmen.

Re: Python Primes

Verfasst: Mittwoch 6. Februar 2019, 14:08
von Chr0medome
Wäre da Slicing nicht sehr viel effizienter als eine while Schleife?

Re: Python Primes

Verfasst: Mittwoch 6. Februar 2019, 14:31
von __blackjack__
@Chr0medome: Ja, wäre es.

Re: Python Primes

Verfasst: Mittwoch 6. Februar 2019, 14:32
von Sirius3
@Chr0medome: das Suchen müßte man aber trotzdem per while-Schleife machen (oder binärer Suche - while-Schleife), spart sich dann aber natürlich die ganze Listenkopiererei.

Re: Python Primes

Verfasst: Mittwoch 6. Februar 2019, 14:40
von __blackjack__
Bei der binären Suche kann das `bisect`-Modul aus der Standardbibliothek behilflich sein, die braucht man also nicht selbst schreiben. :-)