ich programmiere zurzeit einen Rechner der binäre in dezimale Zahlen umrechnet und umgekehrt.
Meinen Quellcode:
Code: Alles auswählen
#Funktionen
#------------------------------------------------------------------
def calc_bin():
bin_num=input("Geben Sie eine binäre Zahl ein: ") #Eingabe einer beliebig langen Binären Zahl.
solution=0 #Vorbereitung von verwendeten Variablen.
counter=1
add_num=1
i=0
while i < len(bin_num): #Anzahl der Schleifendurchläufe ist gleich Anzahl der Stellen der binären Nummer.
if bin_num[-counter] == "1": #Jede Stelle der Binären Nummer wird angelaufen und geprüft ob diese "1" ist oder nicht.
solution=solution+add_num #Wenn die Stelle "1" ist, wird der entsprechende Wert zu der Lösung addiert.
counter=counter+1 #Counter um die Stelle in der binären Zahl zu bestimmen.
add_num=add_num*2 #Wert, der der Stelle in den binären Nummer entspricht. (Stelle 4 = Wert 8, usw.)
i=i+1 #Counter für die Schleife.
print("|======================\n| Binär: {}\n|----------------------\n| Dezimal: {}\n|======================\n".format(bin_num, solution))
def calc_dec():
dec_num=int(input("Geben Sie eine dezimale Zahl ein: \n")) #Eingabe der dezimalen Zahl.
counter=0 #Vorbereitung der Variablen
i=1
solution=0
dec_num_or=dec_num #Speichern der eingebenen Zahl in einer zweite Variable damit diese im Ergebnismit angezeigt wird.
while dec_num >= i: #In dieser Schleife wird ermittelt, welches der höchte Wert in der binären Tabelle
i=i*2 #ist, welcher noch von der Zahl abgezogen werden kann. Entsprechend dient die
counter=counter+1 #Schleife dazu, die länge der binären Zahl zu ermitteln.
solution="0"*counter #Der Lösungs-String wird generiert und mit "0" befüllt, damit die einzelnen Stellen angesprochen werden können.
o=counter #Zweiter Counter damit die nächste Schleife funktioniert.
while counter > 0: #Ermittlung welche Stellen der binären Zahl mit "1" befüllt werden.
i=i/2 #Wert der Stelle in der binären Zahl.
if dec_num >= i: #Nur ausführen, wenn es bei der dezimalen Zahl noch einen Rest gibt.
solution=solution[:o-counter]+"1"+solution[o-counter+1:]#Eintragung der veränderten Lösung in die Lösungsvariable.
dec_num=dec_num-i #Reduktion der dezimalen Zahl um den ermittelten Wert.
counter=counter-1
print("|======================\n| Dezimal: {}\n|----------------------\n| Binär: {}\n|======================\n".format(dec_num_or, solution))
#Ablauf
#------------------------------------------------------------------
running = "y"
while running == "y":
print("Eingabe von\n a) Dezimaler Zahl\n b) Binärer Zahl\n")
choice=""
while choice not in ("a", "b"):
choice=input("Wählen sie \"a\" oder \"b\" aus: ")
if choice == "a":
calc_dec()
else:
calc_bin()
running=""
while running not in ("y", "n"):
running=input("\nNeue Rechnung? (y/n)")
if running == "y":
print("\n"*50)
Konzentrieren wir uns erstmal auf die Funktion "calc_bin".
Code: Alles auswählen
def calc_bin():
def calc_bin():
bin_num=input("Geben Sie eine binäre Zahl ein: ")
solution=0
counter=1
add_num=1
i=0
while i < len(bin_num):
if bin_num[-counter] == "1":
solution=solution+add_num
counter=counter+1
add_num=add_num*2
i=i+1
print("|======================\n| Binär: {}\n|----------------------\n| Dezimal: {}\n|======================\n".format(bin_num, solution))
Code: Alles auswählen
def calc_bin():
bin_num=input()
if bin_num includes <> "0" or "1":
proceed
else:
calc_bin()
Code: Alles auswählen
def calc_bin():
bin_num=""
while bin_num includes <> "0" or "1":
bin_num=input()
...
...
Bin ich auf dem richtigen Weg oder gibt es einfachere Möglichkeiten? Vielleicht kann mir ja jemand weiterhelfen.
Natürlich kann der Code gerne bewertet und Verbesserungsvorschläge gemacht werden, allerdings bitte ich darum das sich auf mein Problem konzentriert wird.
Vielen dank