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)
Prgramm optimieren
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Hallo peddy,
deine `test(bin)' liesse sich stark vereinfachen:
Und so in `trans(bin)' einbinden:
Um mir das noch weiter anzuschaun fehlt mir jetzt leider die Zeit, hoffe du kannst es nützen
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
Code: Alles auswählen
try: test(bin)
except ValueError:
return "Das ist keine Binaerzahl!"
Ich finde die art der Prüfung etwas merkwürdig.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
Warum nicht einfach so:
Code: Alles auswählen
def test(bin):
for digit in bin:
if digit not in [0, 1]:
raise ValueError
@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 ...
Zuletzt geändert von Zap am Dienstag 22. Juli 2008, 11:57, insgesamt 1-mal geändert.
Danke, das ist wirklich einfacher und so naheliegend
Das
geht aber noch einfacher
Das
Code: Alles auswählen
for entry in [x for x in range(2,10)]:
Code: Alles auswählen
for x in range(2, 10):
if str(x) in bin:
-
- User
- Beiträge: 21
- Registriert: Montag 12. November 2007, 15:15
- Wohnort: Stuttgart
So könnte man eventuell auch die Überprüfung gestalten:
oder die Umrechnung:
Code: Alles auswählen
def test(bin):
try:
int(bin,2)
except ValueError:
return 'Das ist keine Binaerzahl!'
Code: Alles auswählen
def trans(bin):
try:
return hex(int(bin,2))[2:].upper()
except ValueError:
return 'Dies ist keine Binaerzahl!'
Da ist ja der Einzeiler auf den ich gewartet hab...Pablo Escobar hat geschrieben:Code: Alles auswählen
return hex(int(bin,2))[2:].upper()
Es gäbe auch noch diese Lösung:
Code: Alles auswählen
"0x%X" % int(bin, 2)
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das ist aber langweilig .. und schlecht zu lesen *g*Zap hat geschrieben:Da ist ja der Einzeiler auf den ich gewartet hab...Pablo Escobar hat geschrieben:Code: Alles auswählen
return hex(int(bin,2))[2:].upper()
@Zap:
Deine Überprüfung ist weit besser, das stimmt .. ich hatte wohl noch zu sehr das ursprüngliche Snippet im Hinterkopf.