Hallo Python-Profis,
Ich wollte mal fragen, ob es eine Build-in-methode gibt, mit der mal eine Zahl aus dem Dezimalsystem in das Binärsystem umrechnen kann und umgekehrt.
Danke schonmal im Vorraus
Philipp
Binärsystem
soweit ich weis, nein...
aber an sich ist sowas leicht zu schreiben... oder auch im netz zu finden.
das hier habe ich jetzt eben schnell mal gefunden... ist aber nicht getestet:
Quelle: http://aspn.activestate.com/ASPN/Cookbo ... ipe/259112
aber an sich ist sowas leicht zu schreiben... oder auch im netz zu finden.
das hier habe ich jetzt eben schnell mal gefunden... ist aber nicht getestet:
Code: Alles auswählen
def dec2bin(num):
out = []
while(num != 0):
out.append(num % 2)
num = num / 2
out = pad(out)
return out
So nun hab ichs mir nochmal angeschaut...
Musste ein wenig umschreiben. So wird nun 'n Schuh draus:
Musste ein wenig umschreiben. So wird nun 'n Schuh draus:
Code: Alles auswählen
# -*- coding: utf-8 -*-
#http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/259112
def dec2bin(num):
out = []
while(num != 0):
out.append(num % 2)
num = num / 2
return out
def bin2dec(the_list):
sum = 0
i = 0
while(i < len(the_list)):
sum = sum + pow(2,i) * the_list[i]
i = i + 1
return sum
Dann werd ich wohl mit solchen selbstgeschriebenen Methoden vorlieb nehmen müssen.
Vielen Dank pSy für deine Mühe.
EDIT:
Die Methode bin2dec scheint alle Nullen am Ende der Eingabe zu ignorieren und dec2bin gibt das Ergebnis falsch rum aus (anstatt 1011 steht da 1101).
Ich hab jetzt selbst passende Methoden geschrieben:
Vielen Dank pSy für deine Mühe.
EDIT:
Die Methode bin2dec scheint alle Nullen am Ende der Eingabe zu ignorieren und dec2bin gibt das Ergebnis falsch rum aus (anstatt 1011 steht da 1101).
Ich hab jetzt selbst passende Methoden geschrieben:
Code: Alles auswählen
def dec2bin(zahl):
binListe = []
binzahl = ""
while zahl <> 0:
binListe.append(zahl % 2)
zahl = int(zahl / 2)
for i in binListe[::-1]:
binzahl += str(i)
return binzahl
def bin2dec(zahl):
stelle = 0
deczahl = 0
for i in str(zahl)[::-1]:
deczahl += int(i)*2**stelle
stelle += 1
return deczahl
Jupp, das hab ich übersehen... hab ja auch nur schnell geschaut das die überhaupt funktionieren... 
Übrigens: Du zauberst ja ganz schön was mit den Listen zusammen... das mit liste[::-1] kannte ich noch garnicht... danke

Übrigens: Du zauberst ja ganz schön was mit den Listen zusammen... das mit liste[::-1] kannte ich noch garnicht... danke

`bin2dec()` geht kürzer:
Wobei die Namensgebung korrekter `int2bin()`/`bin2int()` wäre. Mit Dezimalzahlen hat das ganze nichts zu tun.
Code: Alles auswählen
def bin2dec(number):
return int(number, 2)
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Dann muss "number" aber ein String sein.BlackJack hat geschrieben:`bin2dec()` geht kürzer:
Code: Alles auswählen
def bin2dec(number): return int(number, 2)
Oder man macht's so:
Code: Alles auswählen
def bin2dec(number):
return int(str(number), 2)
Ich auch nicht 
Also kann man die Basis als zweiten Parameter an int() übergeben? Aber dann wahrscheinlich nur, wenn man unter der 10 bleibt, richtig? Ich schlag gleich mal nach...
EDIT:
Man sollte sich wirklich auch mal über die Standartinformationen informieren *g*

Also kann man die Basis als zweiten Parameter an int() übergeben? Aber dann wahrscheinlich nur, wenn man unter der 10 bleibt, richtig? Ich schlag gleich mal nach...
EDIT:
Man sollte sich wirklich auch mal über die Standartinformationen informieren *g*
[size=x-small]Quelle: http://docs.python.org/lib/built-in-funcs.html[/size]int( [x[, radix]])
Convert a string or number to a plain integer. If the argument is a string, it must contain a possibly signed decimal number representable as a Python integer, possibly embedded in whitespace. The radix parameter gives the base for the conversion and may be any integer in the range [2, 36], or zero. If radix is zero, the proper radix is guessed based on the contents of string; the interpretation is the same as for integer literals. If radix is specified and x is not a string, TypeError is raised. Otherwise, the argument may be a plain or long integer or a floating point number. Conversion of floating point numbers to integers truncates (towards zero). If the argument is outside the integer range a long object will be returned instead. If no arguments are given, returns 0.
Noch eine Möglichkeit:
Code: Alles auswählen
def dec2bin(x):
if x<0:
raise ValueError("Nur positive Zahlen, bitte")
l = []
while True:
x,r = divmod(x,2)
l.insert(0,str(r))
if x == 0:
return "".join(l)
-
- User
- Beiträge: 13
- Registriert: Sonntag 9. Dezember 2007, 19:44
Wieso geht dann nicht?:
Code: Alles auswählen
def dec2bin(number):
return int(str(number), 10)
Das wandelt ein Objekt in eine Zeichenkette und die dann in eine ganze Zahl, wobei die Zeichenkette als Darstellung eine Zahl im Dezimalsystem aufgefasst werden soll. Das "geht" schon, nur kommt da keine Zeichenkette einer Zahl in Binärdarstellung heraus. Warum das so ist, sollte eigentlich klar sein.