primitive Pythagoreische Tripel
Hallo,
in Zeile 63 würde ich erwarten, dass die "is_primitive"-Funktion verwendet wird.
Die while-Schleife in Zeile 140 würde ich noch so umstellen, dass das "i += 1" im try-Block steht, die beiden "continue" können dann eingespart werden. Es ginge auch noch ohne doppelten Code, aber wirklich schöner als deine Lösung ist es auch nicht. Der Ersatz von "i" und "numbers[-1]" sind für dich vielleicht aber trotzdem interessant:
Wenn doppelter Code nicht in eine sinnvolle Methode gepackt werden kann, dann würde ich keine Methode daraus machen. Zumindest nicht, wenn er so lokal begrenzt ist wie in diesem Fall.
Noch etwas Geschmackssache in Zeile 201:
Die Bedingungen aus den Zeilen 227 und 230 würde ich, wie in den Zeilen davor auch, in die Bedingung darüber ziehen.
Der "\" in den Zeile 126 ist überflüssig, bei Klammern kann man sich die Kennzeichnung sparen. Das kommt in deinem Code noch etwas öfter vor.
Für Zeile 177 empfehle ich noch einen Blick in Richtung "String Formatting". Das würde ich in einer extra Zeile erledigen und nicht direkt als Parameter.
Vielleicht solltest du noch die ein oder andere Konstante einführen.
Meine Tipps und Hinweise sind aber alles nur Kleinigkeiten, der Code sieht sonst wirklich sauber aus.
in Zeile 63 würde ich erwarten, dass die "is_primitive"-Funktion verwendet wird.
Die while-Schleife in Zeile 140 würde ich noch so umstellen, dass das "i += 1" im try-Block steht, die beiden "continue" können dann eingespart werden. Es ginge auch noch ohne doppelten Code, aber wirklich schöner als deine Lösung ist es auch nicht. Der Ersatz von "i" und "numbers[-1]" sind für dich vielleicht aber trotzdem interessant:
Code: Alles auswählen
while len(numbers) != n:
try:
self.screen.addstr(self.cursory + len(numbers) + 2, self.cursorx, "> ")
numbers += [int(self.screen.getstr())]
if numbers[-1] < 1:
raise NegativeNumber(numbers[-1])
continue
except ValueError:
pass
except NegativeNumber:
numbers.pop()
self.screen.move(self.cursory + len(numbers) + 2, self.cursorx + 8)
self.screen.clrtoeol()
Noch etwas Geschmackssache in Zeile 201:
Code: Alles auswählen
if n < self.height:
height, width = self.height, self.width
else:
height, width = n + 2, self.width + n / 100
pad = curses.newpad(height, width)
Der "\" in den Zeile 126 ist überflüssig, bei Klammern kann man sich die Kennzeichnung sparen. Das kommt in deinem Code noch etwas öfter vor.
Für Zeile 177 empfehle ich noch einen Blick in Richtung "String Formatting". Das würde ich in einer extra Zeile erledigen und nicht direkt als Parameter.
Vielleicht solltest du noch die ein oder andere Konstante einführen.
Meine Tipps und Hinweise sind aber alles nur Kleinigkeiten, der Code sieht sonst wirklich sauber aus.
Das Leben ist wie ein Tennisball.
Hallo
Ich habe `KEY_ENTER` ausprobiert, funktioniert bei mir jedoch nicht.
@birkenfeld: Was soll denn dieser Link: `http://pyside.blogspot.com`?
Die erste und dritte Bedingung wird mit `range(1 + s % 2, s, 2)` erledigt, die zweite mit `euklid_algorithm(s, t) == 1`.
Zeilen 227 und 230 hatte ich schon abgeändert, 2o1 und 140... habe ich von Dir übernommen, 177 sieht jetzt so aus:
Gruß und Dank
JaKlaRo
Wegen:birkenfeld hat geschrieben:Warum muss man im Menü mit Space bestätigen, statt Enter?
Nachzulesen hier: http://docs.python.org/library/curses.htmlKEY_ENTER Enter or send (unreliable)
Ich habe `KEY_ENTER` ausprobiert, funktioniert bei mir jedoch nicht.

@birkenfeld: Was soll denn dieser Link: `http://pyside.blogspot.com`?
Eydu hat geschrieben:in Zeile 63 würde ich erwarten, dass die "is_primitive"-Funktion verwendet wird.
Code: Alles auswählen
# Der hier verwendete Algorithmus zur Erzeugung primitiver PTs
# benutzt die zwei Hilfsvariablen "s" und "t". Für s und t
# gelten drei Bedingungen:
# 1. t < s
# 2. s und t sind teilerfremd.
# 3. Wenn s gerade, dann t ungerade und umgekehrt.
while True:
for t in range(1 + s % 2, s, 2):
if euklid_algorithm(s, t) == 1:
yield (2 * s * t, s**2 - t**2, s**2 + t**2)
s += 1
Zeilen 227 und 230 hatte ich schon abgeändert, 2o1 und 140... habe ich von Dir übernommen, 177 sieht jetzt so aus:
Code: Alles auswählen
string = "%d, %d und %d sind %s Pythagoreisches Tripel%s" % \
(leg_a, leg_b, hypothenuse, message_var[message_key][0], message_var[message_key][1])
self.screen.addstr(self.cursory + 6, self.cursorx -10, string)
JaKlaRo