Seite 1 von 1

Hilfe

Verfasst: Mittwoch 16. November 2016, 18:09
von SlimE
Hallo, ich muss bis zu Freitag einen Code vorstellen, in dem man binär zu dezimal umwandeln kann und andersherum. Das übersetzen von dezimalzahlen zu binärzahlen hat wunderbar geklappt, aber wenn ich es andersherum versuche klappt es nicht. Ich brauche hilfe bei dem Code um mir binäre zahlen in dezimalzahlen anzeigen zu lassen. Und kann mir jemand (wenn jemand möchte) die einzelnen schritte des codes erklären, also was da passiert?

Hier der Code:

Code: Alles auswählen

def dezimal():
    print("Dezimalzahl hier :")
    while 1:
        Ein = input ()
        Rest = []
        F = int (Ein)
        R = 0

        while F != 0:
            R = F % 2
            F = F // 2
            Rest.insert(0, R);

        print("Eingabe : " + str(Ein) + " > " + str(Rest))

def bin():
    print("Binärzahl hier :")
    while 1:
        Ein = input ()
        x = 0
        for y in Ein:
            if y == "1":
                x = x * 2
                x = x + 1

            else:
                x = x + 2

        print("Eingabe: " + str(Ein) + " > " + str(x))

bin()
Danke schonmal im Vorraus :)

Re: binär 2 dezimal Hilfe!

Verfasst: Mittwoch 16. November 2016, 18:22
von BlackJack
Das sieht alles so lang und kompliziert aus:

Code: Alles auswählen

In [32]: '{0:b}'.format(42)
Out[32]: '101010'

In [33]: int('101010', 2)
Out[33]: 42
:-)

Re: binär 2 dezimal Hilfe!

Verfasst: Mittwoch 16. November 2016, 18:23
von Sirius3
@SlimE: was hast Du Dir denn für Gedanken gemacht, als Du das geschrieben hast? Und wo verstehst Du was nicht? Wenn Du die Funktion dezimal kapierst, dann ist ja bin auch nicht komplizierter und man sieht ziemlich schnell, wo der Fehler liegt.

Re: binär 2 dezimal Hilfe!

Verfasst: Mittwoch 16. November 2016, 18:26
von SlimE
Sirius3 hat geschrieben:@SlimE: was hast Du Dir denn für Gedanken gemacht, als Du das geschrieben hast? Und wo verstehst Du was nicht? Wenn Du die Funktion dezimal kapierst, dann ist ja bin auch nicht komplizierter und man sieht ziemlich schnell, wo der Fehler liegt.
Bitte sag mir den Fehler. Ich habe an diesen beiden Stunden im Unterricht gefehlt und weiß nicht wie der Code funktioniert :/

Re: binär 2 dezimal Hilfe!

Verfasst: Mittwoch 16. November 2016, 18:28
von SlimE
BlackJack hat geschrieben:Das sieht alles so lang und kompliziert aus:

Code: Alles auswählen

In [32]: '{0:b}'.format(42)
Out[32]: '101010'

In [33]: int('101010', 2)
Out[33]: 42
:-)
Ich muss den Code beibehalten, da mein lehrer sich schon den ersten teil angeschaut hat und mir gesagt hat, dass bin#r 2 dezimal nicht funktioniert

Re: binär 2 dezimal Hilfe!

Verfasst: Mittwoch 16. November 2016, 18:33
von Sirius3
@SlimE: Du hast gefehlt, als Du diesen Code hier geschrieben hast? Erklär doch einfach mal, was Du davon verstehst, dann sehen wir auch, was Du nicht verstehst.

Re: binär 2 dezimal Hilfe!

Verfasst: Mittwoch 16. November 2016, 18:36
von SlimE
Sirius3 hat geschrieben:@SlimE: Du hast gefehlt, als Du diesen Code hier geschrieben hast? Erklär doch einfach mal, was Du davon verstehst, dann sehen wir auch, was Du nicht verstehst.
Ich verstehe nichts. Ich musste das von einem Freund übernehmen und muss das jetzt vorstellen. Ich will später Informatik studieren, deshalb ist mir schon wichtig die codes auch zu verstehen und brauche jemanden, der mir dabei hilft meine codes zu verbessern

Re: Hilfe

Verfasst: Mittwoch 16. November 2016, 18:43
von heiner88
Dein Fehler liegt in den folgenden Zeilen:

Code: Alles auswählen

        for y in Ein:
            if y == "1":
                x = x * 2
                x = x + 1
            else:
                x = x + 2

Re: binär 2 dezimal Hilfe!

Verfasst: Mittwoch 16. November 2016, 18:44
von BlackJack
@SlimE: Das Du *nichts* verstehst glaube ich nicht. Denn dann ist die Aufgabe schlicht nicht lösbar für Dich und es liefe darauf hinaus das es jemand anders für Dich löst, was sicher nicht Sinn der Hausaufgabe ist.

Und Du *musst* keine Lösungen von anderen übernehmen. Ich habe beispielsweise im Informatikstudium auch hier und da mal aus Zeitdruck Lösungen von anderen übernommen, allerdings nur dann wenn ich die auch verstanden hatte, und nicht 1:1 abgeschrieben, sondern die Idee erfasst und dann selbst formuliert. Alles andere rächt sich später, manchmal schon wenn man ”seine eigene” Lösung im Tutorium vorstellen soll — und das dann nicht kann, oder später in der Klausur und/oder einer mündlichen Prüfung.

Re: Hilfe

Verfasst: Mittwoch 16. November 2016, 18:45
von SlimE
heiner88 hat geschrieben:Dein Fehler liegt in den folgenden Zeilen:

Code: Alles auswählen

        for y in Ein:
            if y == "1":
                x = x * 2
                x = x + 1
            else:
                x = x + 2
Ich weiß es nicht :/

Wie ich mich gerade schäme

Re: binär 2 dezimal Hilfe!

Verfasst: Mittwoch 16. November 2016, 18:46
von SlimE
BlackJack hat geschrieben:@SlimE: Das Du *nichts* verstehst glaube ich nicht. Denn dann ist die Aufgabe schlicht nicht lösbar für Dich und es liefe darauf hinaus das es jemand anders für Dich löst, was sicher nicht Sinn der Hausaufgabe ist.

Und Du *musst* keine Lösungen von anderen übernehmen. Ich habe beispielsweise im Informatikstudium auch hier und da mal aus Zeitdruck Lösungen von anderen übernommen, allerdings nur dann wenn ich die auch verstanden hatte, und nicht 1:1 abgeschrieben, sondern die Idee erfasst und dann selbst formuliert. Alles andere rächt sich später, manchmal schon wenn man ”seine eigene” Lösung im Tutorium vorstellen soll — und das dann nicht kann, oder später in der Klausur und/oder einer mündlichen Prüfung.
Aber kann mir dann nicht jemand den Code erklären Schritt für Schritt? Ich möchte es ja verstehen

Re: Hilfe

Verfasst: Mittwoch 16. November 2016, 18:51
von Sirius3
@SlimE: weißt Du was print macht? Oder input? Ich glaube kaum, dass in 2 Stunden def, while, for und if auf einmal durchgenommen wurden. Irgendetwas muß Euer Lehrer doch erklärt haben und das was Du verpaßt hast, kannst Du Dir doch von Deinem Freund geben lassen.

Re: Hilfe

Verfasst: Mittwoch 16. November 2016, 18:52
von BlackJack
@SlimE: Etwas nicht zu wissen ist grundsätzlich erst einmal kein Grund sich zu schämen. Dann musst Du Dir das Wissen eben erarbeiten. Und das ist mit Hilfe des Internets durchaus möglich. Gerade bei Informatikthemen ist Wikipedia sehr auskunftsfreudig. Der Artikel Binärzahl enthält beispielsweise einen Abschnitt über Umrechnungen.

Re: Hilfe

Verfasst: Mittwoch 16. November 2016, 18:54
von SlimE
Sirius3 hat geschrieben:@SlimE: weißt Du was print macht? Oder input? Ich glaube kaum, dass in 2 Stunden def, while, for und if auf einmal durchgenommen wurden. Irgendetwas muß Euer Lehrer doch erklärt haben und das was Du verpaßt hast, kannst Du Dir doch von Deinem Freund geben lassen.
Print zeigt etwas an. z.b. print ("hier") dann wird hier angezeigt
input und die anderen weiß ich nicht mehr

Re: Hilfe

Verfasst: Mittwoch 16. November 2016, 18:56
von SlimE
Sirius3 hat geschrieben:@SlimE: weißt Du was print macht? Oder input? Ich glaube kaum, dass in 2 Stunden def, while, for und if auf einmal durchgenommen wurden. Irgendetwas muß Euer Lehrer doch erklärt haben und das was Du verpaßt hast, kannst Du Dir doch von Deinem Freund geben lassen.
Kannst du mir bitte sagen, was falsch war? Ich lerne gerade für meine Klausur morgen und habe wenig Zeit

Re: Hilfe

Verfasst: Mittwoch 16. November 2016, 18:59
von BlackJack
@SlimE: Ich würde sagen falsch ist Deine Einstellung zu dem Thema. :-(

Re: Hilfe

Verfasst: Mittwoch 16. November 2016, 19:08
von SlimE
Sirius3 hat geschrieben:@SlimE: weißt Du was print macht? Oder input? Ich glaube kaum, dass in 2 Stunden def, while, for und if auf einmal durchgenommen wurden. Irgendetwas muß Euer Lehrer doch erklärt haben und das was Du verpaßt hast, kannst Du Dir doch von Deinem Freund geben lassen.
Ich möchte doch einfach nur wissen, was falsch ist :/

Rip abitur...

Re: Hilfe

Verfasst: Mittwoch 16. November 2016, 19:44
von Sirius3
@SlimE: wenn Du gerade nicht den Kopf frei hast, etwas zu lernen, dann solltest Du Dich auf die dringlichen Dinge konzentrieren. Es macht keinen Sinn, Dir zu erklären, was falsch ist, solange Du nicht verstehst, was der Rest macht. Die Funktion macht auch zu viel, um das sinnvoll erklären zu können. Zuerst solltest Du sie in Einheiten aufteilen, die genau eine Aufgabe haben:

Code: Alles auswählen

def bin2number(Ein):
    x = 0
    for y in Ein:
        if y == "1":
            x = x * 2
            x = x + 1 
        else:
            x = x + 2
    return x

def bin():
    print("Binärzahl hier :")
    while 1:
        Ein = input ()
        number = bin2number(Ein)
        print("Eingabe: " + str(Ein) + " > " + str(number))
 
bin()
dann sollte man sinnvolle Variablennamen verwenden:

Code: Alles auswählen

def bin2number(binary_number):
    result = 0
    for digit in binary_number:
        if digit == "1":
            result = result * 2 + 1
        else:
            result = result + 2
    return result

def main():
    while True:
        binary_number = input("Binärzahl hier :")
        number = bin2number(binary_number)
        print("Eingabe: {} -> {}".format(binary_number, number))
 
main()
Und jetzt kann man anfangen zu erklären, was passiert, also im wesentlichen Englisch nach Deutsch übersetzen: main ist das Hauptprogramm, wo solange wahr wahr bleibt, also für immer, eine Binärzahl-Zeichenkette abgefragt wird, diese in eine Zahl umgewandelt wird und danach ausgegeben wird.

Re: Hilfe

Verfasst: Mittwoch 16. November 2016, 21:21
von Dav1d
So jetzt geh den Code von Sirius Zeile für Zeile im Kopf oder auf einem Blatt Papier durch, mit dem Input `101`:

Code: Alles auswählen

In [1]: %paste
def bin2number(binary_number):
    result = 0
    for digit in binary_number:
        if digit == "1":
            result = result * 2 + 1
        else:
            result = result + 2
    return result

## -- End pasted text --

In [2]: bin2number("101")
Out[2]: 7

In [3]: int("101", 2)
Out[3]: 5
Das sollte als Abiturient, der Informatik studieren möchte durchaus machbar sein, dann wird dir sehr schnell dein Fehler auffallen.

Re: Hilfe

Verfasst: Donnerstag 17. November 2016, 09:25
von sebastian0202
Ihr müsst das Ganze in der Jugendsprache schreiben.
Wir müssen begeistern.

"In 5min eine Lösung finden??
Unglaublich, dass er so einfach den Fehler finden konnte..."

Bild

Code: Alles auswählen

def main():
    for binary_number in ("0", "1", "10", "11", "100", "101", "110", "111"):
        number = bin2number(binary_number)
        print "Eingabe: %s -> %s" % (binary_number, number)