Sage - Primzahl

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
Sagemath
User
Beiträge: 3
Registriert: Dienstag 6. Dezember 2011, 20:34

Hallo Leute,

bin neu hier und weiß nicht, wo Fragen zu Sage hinkommen, deswegen stelle ich es hier mal rein:

Und zwar geht es darum, dass ich eine Prozedur schreiben soll, die mir einmal bestimmt, ob eine natürliche Zahl n eine Primzahl ist und falls nicht, sollen einmal die Anzahl der Teiler und die Primfaktorzerlegung ausgegeben werden.

Habe erstmal eine allegemine Frage und zwar habe ich so begonnen:

Code: Alles auswählen

n=4
is_prime(n)
if(is_prime(n)):
    print('Primzahl')
else:
    divisors(n)
Habe wie man sieht die Zahl 4 mal eingegeben und es passiert einfach nichts, bei 5 gibt er mir "Primzahl" aus, bei 4 hätte ich für den Anfang gerne mal die Teiler.

Was mache ich falsch? Ich nehme an vor der Divisors muss noch etwas, aber leider bin ich relativ am Anfang mit dem Programm und weiß nicht was, kann mir da jemand einen Tipp geben?

Eine weitere Frage ist, wie ich mir denn die Anzahl ausgeben lasse? Ich soll die Teiler selbst nicht ausgeben, sondern nur, wie viele es sind, dafür bräuchte ich irgendeinen Befehl, der sich auf divisors bezieht, gibt es da irgendwas mit Anzahl oder so?

Danke schonmal.

Gruß
Zuletzt geändert von Anonymous am Dienstag 6. Dezember 2011, 21:58, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Sagemath
User
Beiträge: 3
Registriert: Dienstag 6. Dezember 2011, 20:34

Mittlerweile hab ich die erste Frage geknackt, ich muss einfach "print" davor setzen...

Aber die zweite Frage bekomme ich nicht gelöst, wie kann ich dafür sorgen, dass mir die Anzahl der Teiler ausgegeben wird? Also bei 4 z.B. müsste ja die 3 ausgegeben werden, gibt es da nicht irgendeinen Befehl wie "count" oder sowas?
BlackJack

@Sagemath: Ich vermute mal `divisiors()` gibt eine Liste zurück. An der Stelle möchtest Du dann vielleicht mal ein Python-Tutorial durcharbeiten bevor Du mit `Sage` weiter machst, und hier absolute Grundlagen fragst. :-) In der Python-Dokumentation ist zum Beispiel ein Tutorial enthalten.
Sagemath
User
Beiträge: 3
Registriert: Dienstag 6. Dezember 2011, 20:34

Wäre schön, wenn ich die Zeit dazu hätte bei dem ganzen Unistress... Kannst du mir wenigstens sagen unter welchem Kapitel ich da am besten schaue bitte?
BlackJack

@Sagemath: Falls es tatsächlich eine Liste ist, dann natürlich im Tutorial bei Listen. Die kommen im Inhaltsverzeichnis zweimal vor — einmal am Anfang in `An Informal Introduction to Python` und später noch einmal als erstes in `Data Structures`. Aber die Grunddatentypen und Kontrollstrukturen solltest Du Dir wirklich mal von vorne durcharbeiten. So viele sind das nicht, und die werden Dir wirklich ständig begegnen. Bis Abschnitt 9 würde ich empfehlen. Klassen, also Abschnitt 9 selbst brauchst Du vielleicht nicht unbedingt.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Sagemath hat geschrieben:

Code: Alles auswählen

n=4
is_prime(n)
if(is_prime(n)):
    print('Primzahl')
else:
    divisors(n)
Bevor du mit dem Tutorial anfängst gibt es direkt noch einen Tipp. Das if-Statement schreibt und liest sich ohne Klammern viel besser.

Code: Alles auswählen

if is_prime(n):
Ich nehme an, du hast auch schon selber erkannt, dass der erste Aufruf von is_prime() sinnfrei ist. Es wird zwar eine Berechnung durchgeführt, der Rückgabewert der Funktion wird allerdings nirgendwo verwendet.
ProGammler88
User
Beiträge: 13
Registriert: Dienstag 6. Dezember 2011, 15:01

er hat recht ist eigentlich "toter code" wir im studium haben richtig abzug für sowas bekommen =)
ich mach jetz erstmal schön Bed and Breakfast in London :)
Zuletzt geändert von ProGammler88 am Freitag 22. Juni 2012, 13:16, insgesamt 2-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

ProGammler88 hat geschrieben:er hat recht ist eigentlich "toter code" wir im studium haben richtig abzug für sowas bekommen =)
Aber nicht für Grammatik- oder Zeichensetzungsfehler, oder? :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
deets

@Hyperion

Leider auch nicht fuer sinnlose Senfzugabe zu allem, was nicht bei 3 auf den Baeumen ist...
problembär

@deets: Ich finde nicht, daß das "Senf" ist: Wenn man in einer Computersprache nicht jedes Zeichen richtig setzt, läuft meist etwas schief. Wenn man Glück hat, erhält man eine Fehlermeldung, wenn nicht, ein falsches Programmergebnis. Insofern sollte man sich um richtige Rechtschreibung und Grammatik bemühen. Und diese dann auch nicht in den menschlichen Sprachen mit Füßen treten.

@Sagemath: Offenbar hast Du die Funktionen "is_prime()" und "divisors()" noch gar nicht implementiert. Wie sollen sie dann ein Ergebnis liefern?

Ah! Offenbar geht es um Sage. Na, dann mußt Du wohl noch ein Modul einbinden und die Methoden daraus ansprechen. Das heißt, wenn Du den Code nicht doch lieber ohne Sage selbst schreiben willst.

Edit: Hmm, Sage scheint selbst so eine Art Python-Distribution zu sein? Merkwürdig.
BlackJack

@problembär: Ich glaube nicht das sich deets auf den Beitrag von Hyperion bezog.

Und Sagemath muss die nicht selber definieren, denn die gibt es bei Sage schon.
deets

@problembaer

Ich bezog mich auf Hyperions Aussage zu ProGammler88. Und dessen Auftreten hier im Forum - kein Thread, der nicht noch einen sinnlosen Halbsatz abbekommt...
lunar

Dieses Forum entwickelt sich offenbar langsam zum Deppenmagnet;)
Antworten