Seite 1 von 1
Prgramm optimieren
Verfasst: Dienstag 22. Juli 2008, 10:56
von peddy
Hallo,
ich lerne gerade Python und da dachte ich mir eine gute Übung wäre es, wenn ich ein Programm schreibe das binäre Zahlen nach Hexadezimal umwandelt.
Das ist dabei rausgekommen:
http://paste.pocoo.org/show/80019/
Das Programm lauft zwar aber es gibt bestimmt viele Möglichkeiten wie man den Code mit mehr Wissen über Syntax und Funktionen eleganter lösen könnte.
Was kann ich bei dem Programm verbessern? Mir gefällt vor allem die Überprüfung, ob man eine Binärzahl eingegeben hat nicht (ok, könnte hier viele if durch elif ersetzten)
Verfasst: Dienstag 22. Juli 2008, 11:35
von cofi
Hallo peddy,
deine `test(bin)' liesse sich stark vereinfachen:
Code: Alles auswählen
def test(bin):
for entry in [x for x in range(2,10)]:
if str(entry) in bin:
raise ValueError
Und so in `trans(bin)' einbinden:
Code: Alles auswählen
try: test(bin)
except ValueError:
return "Das ist keine Binaerzahl!"
Um mir das noch weiter anzuschaun fehlt mir jetzt leider die Zeit, hoffe du kannst es nützen

Verfasst: Dienstag 22. Juli 2008, 11:53
von Zap
cofi hat geschrieben:
Code: Alles auswählen
def test(bin):
for entry in [x for x in range(2,10)]:
if str(entry) in bin:
raise ValueError
Ich finde die art der Prüfung etwas merkwürdig.
Warum nicht einfach so:
Code: Alles auswählen
def test(bin):
for digit in bin:
if digit not in [0, 1]:
raise ValueError
Liest sich meiner Meinung nach einfacher..
@peddy
Ich finde die Lösung sehr kreativ

Vielleicht könntest du das ganze ja mal in der Form überarbeiten das es auf mathemtischem Wege gelöst wird.
Dann brauchst du z.B. nicht mehr das Dictionary mit den Zuordnungen.
Edit: Bin mal gespannt wie lange es dauert bis einer dir den Spass verdirbt und einen Einzeiler als Lösung postet ...

Verfasst: Dienstag 22. Juli 2008, 11:56
von peddy
Danke, das ist wirklich einfacher und so naheliegend
Das
geht aber noch einfacher
Verfasst: Dienstag 22. Juli 2008, 12:04
von Pablo Escobar
So könnte man eventuell auch die Überprüfung gestalten:
Code: Alles auswählen
def test(bin):
try:
int(bin,2)
except ValueError:
return 'Das ist keine Binaerzahl!'
oder die Umrechnung:
Code: Alles auswählen
def trans(bin):
try:
return hex(int(bin,2))[2:].upper()
except ValueError:
return 'Dies ist keine Binaerzahl!'
Verfasst: Dienstag 22. Juli 2008, 12:22
von peddy
@zap
Gefällt mir auch sehr gut.
@Pablo Escobar
Die Sache mit int(10101,2) war mir neu.
hex() kannte ich, wollte aber eine Möglichkeit ohne finden.
Verfasst: Dienstag 22. Juli 2008, 12:50
von Zap
Pablo Escobar hat geschrieben:
Da ist ja der Einzeiler auf den ich gewartet hab...
Es gäbe auch noch diese Lösung:
Verfasst: Dienstag 22. Juli 2008, 13:25
von cofi
Zap hat geschrieben:Pablo Escobar hat geschrieben:
Da ist ja der Einzeiler auf den ich gewartet hab...

Das ist aber langweilig .. und schlecht zu lesen *g*
@Zap:
Deine Überprüfung ist weit besser, das stimmt .. ich hatte wohl noch zu sehr das ursprüngliche Snippet im Hinterkopf.