ich bin dabei mir Python beizubringen. Bisher habe ich unter Linux Bash-Skripte programmiert. Hier also mein erstes Programm. Zur Info:http://de.wikipedia.org/wiki/Pythagoreisches_Tripel
Zunächst läuft es schon mal fehlerfrei, aber noch nicht optimal.
An eine grafische Oberfläche habe ich mich noch nicht getraut, das kommt aber später noch. Der Input-Teil soll einfache Anwendungsmöglichkeiten veranschaulichen und ist daher über jede Kritik erhaben (Zeilenlänge etc.).

Daher ein paar Fragen:
Habe ich Funktionen geschrieben, die es schon in irgendwelchen Modulen gibt?
Ist die Funktion pPT so in Ordnung oder wäre ein Listenvergleich der Primfaktoren von a, b und c optimaler?
Wie kann ich das Ganze objektorientiert lösen?
Allgemein: Lob und Kritik?
Schon mal vielen Dank
JaKlaRo
Und hier das Programm:
Code: Alles auswählen
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Ein Pythagoreisches Tripel (PT) ist eine ganzzahlige
# Lösung der Gleichung a^2 + b^2 = c^2.
# Aus einem primitiven PT lassen sich durch Multiplikation
# weitere PTs erzeugen. Bsp.: a = 3, b = 4, c = 5.
# Dann ist auch a = 6, b = 8, c =10 ein PT, aber nicht primitiv.
# Interessant sind daher vor allem die primitiven PTs.
import sys
# Prüfe, ob ein Pythagoreisches Tripel vorliegt.
def IfPythTrip (a, b, c):
if (a**2 + b**2) == (c**2):
return True
else:
return False
# Primfaktorzerlegung von num.
# Bsp.: 8 -> (2, 2, 2), 110 -> (2, 5, 11); 13 -> (13)
def Factor (num):
factorlist = []
i = 2
while i <= num / 2:
if num % i == 0:
factorlist.append(i)
num = num / i
else:
i = i +1
factorlist.append (num)
return factorlist
# Eleminiere doppelte Primfaktoren aus factorlist.
# factorlist ist sortiert!
def DelDupList (factorlist):
if len(factorlist) == 1:
return factorlist
else:
for i in range (0, len(factorlist)-1):
if factorlist[i] == factorlist[i +1]:
del factorlist[i +1]
DelDupList(factorlist)
break
return factorlist
# Prüfe, ob Pythagoreisches Tripel auch primitv ist.
def IfpPT (a, b, c):
factorlist = DelDupList (Factor(a))
for i in factorlist:
if (b % i) == 0 and (c % i) == 0:
return False
return True
def Input_1 ():
try:
print 'Benötigt werden 3 positive Ganzzahlen.'
a = int(raw_input('Gib a ein: '))
b = int(raw_input('Gib b ein: '))
c = int(raw_input('Gib c ein: '))
if a < 1 or b < 1 or c < 1:
print 'Falsche Eingabe'
sys.exit()
if IfPythTrip (a, b, c):
if IfpPT (a, b, c):
print '%d, %d und %d sind ein primitives Pythagoreisches Tripel' % (a, b, c)
print '%d²+%d²=%d²' % (a, b, c)
print '%d+%d=%d' %(a**2, b**2, c**2)
else:
print '%d, %d und %d sind ein Pythagoreisches Tripel, aber kein primitives.' % (a, b, c)
print '%d²+%d²=%d²' % (a, b, c)
print '%d+%d=%d' %(a**2, b**2, c**2)
else:
print '%d, %d und %d sind kein Pythagoreisches Tripel.' % (a, b, c)
except ValueError:
print 'Falsche Eingabe'
sys.exit()
def Input_2 ():
try:
print 'Benötigt wird eine positive Ganzzahl.'
max = int(raw_input('Gib a ein: '))
count=0
for i in range (1, max +1):
for j in range (i +1, i * i):
k = j +1
while (k * k) <= (i * i + j * j):
if IfPythTrip(i, j, k) and IfpPT(i, j, k):
print '%d %d %d %d ' % (i, j, k, k**2)
count = count +1
k = k +1
print 'Insgesamt %d primitive pythagoreische Tripel.' % (count)
except ValueError:
print 'Falsche Eingabe.'
sys.exit()
def Input ():
try:
print 'Möchtest Du'
print '1: Drei Zahlen prüfen.'
print '2: Die Liste aller Tripel bis zu einer Obergrenze von a.'
i = int(raw_input('Auswahl: '))
if i == 1:
Input_1()
elif i == 2:
Input_2()
else:
print 'Unbekannte Option.'
sys.exit ()
except ValueError:
print 'Falsche Eingabe.'
sys.exit()
if __name__ == '__main__':
Input()