Hilfe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SlimE
User
Beiträge: 10
Registriert: Mittwoch 16. November 2016, 17:54

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 :)
Zuletzt geändert von SlimE am Mittwoch 16. November 2016, 18:39, insgesamt 2-mal geändert.
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
:-)
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
SlimE
User
Beiträge: 10
Registriert: Mittwoch 16. November 2016, 17:54

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 :/
SlimE
User
Beiträge: 10
Registriert: Mittwoch 16. November 2016, 17:54

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
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
SlimE
User
Beiträge: 10
Registriert: Mittwoch 16. November 2016, 17:54

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
heiner88
User
Beiträge: 65
Registriert: Donnerstag 20. Oktober 2016, 07:29

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
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.
SlimE
User
Beiträge: 10
Registriert: Mittwoch 16. November 2016, 17:54

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
SlimE
User
Beiträge: 10
Registriert: Mittwoch 16. November 2016, 17:54

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
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
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.
SlimE
User
Beiträge: 10
Registriert: Mittwoch 16. November 2016, 17:54

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
SlimE
User
Beiträge: 10
Registriert: Mittwoch 16. November 2016, 17:54

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
BlackJack

@SlimE: Ich würde sagen falsch ist Deine Einstellung zu dem Thema. :-(
SlimE
User
Beiträge: 10
Registriert: Mittwoch 16. November 2016, 17:54

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...
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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.
the more they change the more they stay the same
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

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)
Antworten