Binär Rechner

Du hast eine Idee für ein Projekt?
Antworten
Cibanes
User
Beiträge: 2
Registriert: Donnerstag 28. Oktober 2010, 19:55

Hallo Zusammen
Bin neu hier im Forum und würde euch gerne was frage.
Habe nun einen Binär in Dezimal rechner programmiert das heisst:
man gibt eine zahl im bin code ein zb 1101 und mein programm gibt dann zb
8
4
1
Aus. wie kann ich jetzt diese Zahlen vom programm speichern lassen und zusammenrechnen lassen? habe ein while loop drin wo ich die werte schreibe. Hättet ihr mir vileicht einen lösungsansatz?

Gruss
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

vielleicht hilft dir das weiter :) :

Code: Alles auswählen

In [1]: int('1101', 2)
Out[1]: 13

In [2]: zahl = int('1101', 2)

In [3]: resultat = zahl + zahl

In [4]: resultat
Out[4]: 26

In [5]: bin(resultat)
Out[5]: '0b11010'

In [6]: bin(resultat)[2:]
Out[6]: '11010'

In [7]: 0b1101
Out[7]: 13
Benutzeravatar
DrFaust
User
Beiträge: 21
Registriert: Freitag 15. Oktober 2010, 23:10

Das ist ohne deinen Code schwer zu sagen. Vor der while-Schleife eine 'sum'-Variable auf 0 initialisieren und in jeder Iteration den Wert addieren? Was meinst du mit speichern? In einer Datei? Dann öffne vorher eine Datei:

Code: Alles auswählen

my_file = open("my_file_name","w")
und schreibe in jeder Iteration die Zahl raus:

Code: Alles auswählen

my_file.write(my_number) #evtl. muss um my_number noch ein str()
und schließlich die Datei schließen:

Code: Alles auswählen

my_file.close()
Etwas eleganter wäre diese Variante:

Code: Alles auswählen

my_list = []
while ...:
    ...
    my_list.append(my_number) #wieder ggf. mit str() drum
my_file = open("my_file_name","w")
my_file.writelines(my_list) 
my_file.close()
Dann kannst du die Liste auch gleich noch zum aufsummieren verwenden:

Code: Alles auswählen

dec = sum([int(n) for n in my_list])
Cibanes
User
Beiträge: 2
Registriert: Donnerstag 28. Oktober 2010, 19:55

Also mein Code sieht so aus, bin kein programiere und hab erst grad angefangen vorner Woche mit python ;) also ned lachen!

Also:

def bin(x):
y=len(str(x))
h=y-1
while h >= 0:
i=x/10**h
if i == 1:
a=2**h
print a
x=x-10**h
h=h-1
y=y-1
if i == 0:
h=h-1
y=y-1
y >=0 #restart the loop
if h == 0:
print 'ende'
pass

am schluss krieg ich
bei bin(1101)
8
4
1
geprintet und ich will nur das das mein programm die 8 und 4 und 1 schnell zusammen rechnet ;) ist sicher einfach aber ich komm nicht weiter.
Benutzeravatar
DrFaust
User
Beiträge: 21
Registriert: Freitag 15. Oktober 2010, 23:10

hab erst grad angefangen vorner Woche mit python ;) also ned lachen!
Würde ich nie. :-) Dennoch ein paar Kommentare dazu:
  • Es gibt ein Python-Code-Environment in diesem Forum. Einfach Code markieren und den 'Python'-Knopf über dem Editorfenster drücken. Achte bitte außerdem darauf, dass die Einrückung erhalten bleibt. Es ist hart zu Raten was noch zur Schleife gehört und was zur if Abfrage etc.
  • Ich hatte erwartet, dass die Eingabe ein string wäre, aber man kann das auch so machen.
  • Könnte man aus h und y nicht eine Variable machen. Das würde den Code lesbarer machen.
  • Zeile y >=0 verstehe ich nicht. Das ist ein boolean-Ausdruck, der aber so keinen Effekt hat. Sollte da vielleicht auch ein if stehen?
  • Was macht das pass am Ende?
Zu deiner Frage: Ich kann das erst mit Sicherheit sagen, wenn ich die reparierte Version des Codes habe, aber auf den ersten Blick würde ich sagen, dass was ich oben geschrieben habe passt.

Code: Alles auswählen

    ...
    h=y-1
    sum = 0
    while h >= 0:
        i=x/10**h
        if i == 1:
            a=2**h
            print a
            sum += a
        x=x-10**h
        ...
sum würde dann am Schleifen-Ende das Ergebnis enthalten.
Antworten