Seite 1 von 1

Dezimalzahlen in Binärzahlen umwandeln

Verfasst: Sonntag 11. März 2018, 14:28
von hansjürgen
Hallo liebe Forenmitglieder,
Ich habe nach langer Zeit wieder angefangen mir selbst Python beizubringen.
Ich schreibe nun an einem Programm,welches Dezimalzahlen in Binärzahlen umwandeln soll.
Nun habe Ich jedoch das Problem,dass bei der Ausgabe die while Schleife nur einmal durchlaufen wird und somit nur die erste Stelle der Binärzahl angezeigt wird.Meine Frage lautet nun: Wie kann Ich dieses Problem beheben ?



# Funktion,welche Dezimalzahlen in Binärzahlen umwandeln soll
def dezimalzahl_to_binaerzahl(dezimalzahl):
global a
# Schleife,welche dazu da ist die Methode zur Berechnung von Dezimalzahlen in Binärzahlen durchzuführen
while dezimalzahl >= 1:
a = []
b = dezimalzahl%2
a.append(b)
a.reverse()
# Abbruchbedingung,welche dazu da ist,damit die while Schleife nicht endlos iteriert
dezimalzahl = dezimalzahl//2
return a
# dient zur Überprüfung ob die Funktion korrekt Funktioniert
x = dezimalzahl_to_binaerzahl(24)
print(x)
Ausgabe: [1]

Process finished with exit code 0

Re: Dezimalzahlen in Binärzahlen umwandeln

Verfasst: Sonntag 11. März 2018, 14:38
von Sirius3
@hansjürgen: vergiß gleich wieder, dass es »global« gibt. Das ist hier unsinnig und sonst eine potentielle Fehlerquelle. Deine while-Schleife wird so oft, wie Du willst, durchlaufen, Du wirfst aber bei jedem Schleifendurchgang das vorherige Ergebnis weg.

Es gibt keine Dezimalzahlen, sondern nur Ganzzahlen, die man in unterschiedlichen Basen darstellen kann.

Re: Dezimalzahlen in Binärzahlen umwandeln

Verfasst: Sonntag 11. März 2018, 14:55
von Astorek
@hansjürgen: Direkt nach Beginn der While-Schleife weist du an, dass die Variable "a" gleich wieder eine leere Liste sein soll. Damit wirfst du logischerweise wieder das Ergebnis, was zuvor Variable "a" hatte, wieder weg. Die Zuweisung gehört *vor* der While-Schleife gemacht.

Ansonsten Zustimmung zu dem, was Sirius3 sagt: "global" ist in eher seltenen Fällen wirklich hilfreich, ansonsten sorgt es erfahrungsgemäß eher dafür, dass später größere Codestellen sehr unübersichtlich und fehleranfällig werden. Als Tipp für später: Die Variablennamen (a, b, x) mögen für solch kurze Schnippsel noch in Ordnung gehen, aber wenn du mal ein mehrere hundert Zeilen langen Quelltext geschrieben hast und ihn dir ein halbes Jahr später nochmal anschaust, wirst du froh sein, dass die Variablen aussagekräftigere Namen als a, b und x haben ;) .

Re: Dezimalzahlen in Binärzahlen umwandeln

Verfasst: Sonntag 11. März 2018, 21:40
von newbie2018
@hansjürgen: Also ich kann meinen Vorschreibern nur beipflichten, damit man den Code später wieder lesen kann ist es sehr sinnvoll sprechende Variablennamen zu verwenden.

Ich hätte deine Anforderung so gelöst:

Code: Alles auswählen

def f_dez2bin (iZahl):
    sBin = ''
    while iZahl > 0 :
        if iZahl % 2 == 0 :
            sBin = str (0) + sBin
        else :
            sBin = str (1) + sBin
        iZahl = int (iZahl / 2)

    print (sBin)

print ('Bitte die Dezimalzahl eingeben: ')
iZahl = int (input ())

f_dez2bin (iZahl)
Wobei ich sagen muss, dass ich auch noch Anfänger bin ... ich möchte von euch lernen! bitte sagt mir einfach ob dies so ordentlich ist oder ob ich da einen Denkfehler habe .... in Python bin ich Newbie aber einige andere Sprachen wie C, C#, Java, ... kann ich eigentlich ganz gut ...

Schönen Abend, Newbie 2018

Re: Dezimalzahlen in Binärzahlen umwandeln

Verfasst: Sonntag 11. März 2018, 21:52
von Sirius3
@newbie2018: laß die ganzen Typbezeichner in Deinen Variablennamen weg, das macht nur Probleme, falls sich der Typ mal ändert. Niemand schreibt f_ vor Funktionsnamen. Variablen und Funktionen werden komplett klein geschrieben. Vor der öffnenden Klammer von Funktionsaufrufen kommt kein Leerzeichen. Statt eine konstante Zahl in Strings umzuwandeln, schreib doch gleich einen String. Statt Fließkommadivision und anschließendem umwandeln in int, benutzt Ganzzahldivision //.
Funktionen haben normalerweise einen Rückgabewert, anstatt das Ergebnis mit print auszugeben.

Code: Alles auswählen

def dez2bin(number):
    result = ''
    while number > 0:
        result = str(number % 2) + result
        number //= 2
    return result or '0'

print('Bitte die Dezimalzahl eingeben: ')
number = int(input())
print('Binär:', dez2bin(number))

Re: Dezimalzahlen in Binärzahlen umwandeln

Verfasst: Sonntag 11. März 2018, 22:04
von newbie2018
Danke - echt cool von dir, ich freue mich über konstruktive Kritik, werde mir deine Empfehlungen merken und aneignen ...

Re: Dezimalzahlen in Binärzahlen umwandeln

Verfasst: Montag 12. März 2018, 13:04
von Hofei
Nur damit ich es los geworden bin,
das "Projekt" dient nur zur Übung, denn es ist dir/euch bekannt dass es dafür eine fertige Funktion mittels Python gibt?

Re: Dezimalzahlen in Binärzahlen umwandeln

Verfasst: Dienstag 13. März 2018, 23:40
von hansjürgen
Wie kann Ich es schaffen,dass bei der Ausgabe nicht die Liste,sondern nur die Binärzahl an sich ausgegeben wird ?

Code: Alles auswählen

[1, 0, 1, 1, 0, 1, 0, 0]

Re: Dezimalzahlen in Binärzahlen umwandeln

Verfasst: Mittwoch 14. März 2018, 08:05
von Sirius3
@hansjürgen: indem Du die Zahlen in Strings umwandelst und dann per join zusammenfügst.