Seite 1 von 1

Primzahlen Problem

Verfasst: Montag 15. Oktober 2007, 15:53
von Lennyy
Hallo,
ich habe seit neuestem das fach "mathe am pc".
Wir verwenden python und da ich hier auch schon früher antworten auf viele meiner fragen gefunden habe, habe ich mich nun angemeldet.

Ich habe die forensuche benutzt und habe die threads aufmerksam durchgelesen, bin aber noch anfänger, und beginne gerade erst mich mit python zu beschäftigen. Also sind mir die meisten befehle noch weitgehend unbekannt.

Ich bin auf der suche nach einem möglichst einfachen 9. klasse script!?, mit dem ich herausbekomme, ob eine zahl eine primzahl ist. Ich habe gelesen, das es hier nich gern gesehen wird wenn sich leute ihre hausaufgaben machen lassen, mein problem ist aber keine hausaufgabe, sondern ich habe es in der schule einfach noch nicht richtig verstanden.

Mfg

Lennyy

zu allgemein für Hausaufgabenklausel.

Verfasst: Montag 15. Oktober 2007, 15:59
von Bernhard
Hallo Lennyy,

und herzlich willkommen im Forum. Versuch es mal mit den folgenden beiden Links zum Einstieg. Danach kennst Du auch die nötigen Begriffe für die Suchfunktion.

http://www.python-forum.de/topic-1627.html
http://www.python-forum.de/topic-1311.html

Gruß,
Bernhard

Verfasst: Montag 15. Oktober 2007, 16:25
von Lennyy
Hallo und danke für die zügige antwort,
das eben ist das problem. Ich kenne kaum einen der dort verwendeten befehle. ich kenne if, while und kann quadratwurzeln ausrechnen. :oops:

Lenny

Verfasst: Montag 15. Oktober 2007, 16:35
von Bernhard
Tja, dann solltest Du nicht auf der Suche nach einem Skript sein, sondern auf der Suche nach einer guten Anleitung zum Python-Lernen. Wenn Du gut Englisch kannst, findest Du online eine ganze Menge (1). Ich persönlich glaube ja an Bücher (2).
(1) http://www.python.org/doc/
(2) http://www.python-forum.de/topic-11234.html

Verfasst: Montag 15. Oktober 2007, 17:13
von Leonidas
Was man so zum (optimierten) bestimmen von Primzahlen braucht: Modulo, if, Gleichheit, Quadratwurzel, for.

Eine unoptimierte Variante ist sogar noch einfacher. Ich habe mal ein Benchmark-Skript dafür geschrieben, mit zwei Varianten. Werde es aber jetzt noch nicht posten, weil es dann heißt, dass ich fremde Hausaufgaben mache. Aber ich kann gerne Tipps geben.

Verfasst: Montag 15. Oktober 2007, 18:47
von Lennyy

Code: Alles auswählen

z=123
t=2
while t<z :
    if z%t==0:
        print 'keine Primzahl' 
        t=z+10
    else :t=t+1
if t==z :
    print 'Primzahl'
wo ist der fehler? ich versteh das nich

Verfasst: Montag 15. Oktober 2007, 19:07
von schlangenbeschwörer
Könntest du Zeile 6 näher erläutern?

Verfasst: Montag 15. Oktober 2007, 19:11
von Lennyy
oh


das ist aus meinen unterrrichts"aufzeichnungen"

Code: Alles auswählen

z=123
t=2
while t<z :
    if z%t==0:
        print 'keine Primzahl' 
        t=z+10
    else :t=t+1
if t==z :
    print 'Primzahl'
:?

Verfasst: Montag 15. Oktober 2007, 19:38
von Leonidas
Schmeiß die ``while``-Schleife weg, nimm stattdessen besser ``for`` und ``(x)range``. Mit ``(x)range`` erstellst du eine Liste von Zahlen die zu prüfen sind und wenn die Zahl durch diese Teilbar ist, dann ist es eine Primzahl, also kannst du aus der ``for``-Schleife ausbrechen. Mit der ``while``-Schleife geht es natürlich auch, aber da musst du dich noch um einen externen Zähler kümmern, bei ``for`` bekommst du den geschenkt.

Verfasst: Montag 15. Oktober 2007, 20:57
von Lennyy

Code: Alles auswählen

z=10
t=2
while z>t:
      if z%t==0:
            print 'Keine Primzahl'
soweit so gut das läuft....

Verfasst: Montag 15. Oktober 2007, 21:00
von Leonidas
Lennyy hat geschrieben:soweit so gut das läuft....
Ja, unendlich lang und ohne brauchbare Ergebnisse zu erzielen. Was ist an meinen Tipps so schlecht, dass du keinen einzigen beachtet hast?

Verfasst: Montag 15. Oktober 2007, 21:01
von Lennyy
ich kenne die befehle einfach nich. wie kann ich das denn jetzt mit meinen einfachen mitteln zuende führen? mal angenommen ich habe wie oben die 123 als zahl.

Verfasst: Montag 15. Oktober 2007, 21:20
von Leonidas
Dann brauchst du erstmal alle Zahlen von 2 bis 122 zum testen (jetzt mal unoptimiert):

Code: Alles auswählen

for number in range(2, 123):
    print number
    # stattdessen jetzt auf teilbarkeit prüfen

Verfasst: Dienstag 16. Oktober 2007, 08:28
von Rebecca
Was du auf jeden Fall brauchst, ist der Modulo-Operator, der gibt dir den Rest einer Ganzzahl-Division:

Code: Alles auswählen

>>> 4%3  # Rest von 4/3
1
>>> 15%6 # Rest von 15/6
3

Verfasst: Dienstag 16. Oktober 2007, 09:35
von veers
Rebecca hat geschrieben:Was du auf jeden Fall brauchst, ist der Modulo-Operator, der gibt dir den Rest einer Ganzzahl-Division
Das geht auch ohne *g*

Verfasst: Mittwoch 17. Oktober 2007, 18:31
von Lennyy
ich werde mal versuchen das umzusetzen
danke soweit