Hallo zusammen,
ich muss ein Programm schreiben, dass Dualzahl in Dezimalzahl umrechnet. Jetzt will ich nach der Eingabe prüfen, ob auch wirklich eine Dualzahl (also nur 0 und/oder 1) eingegeben wurde.
Mein Plan war, es über try, except, else zu lösen. Funktioniert aber noch nicht. Die Schleifenbedingung ist wohl falsch.
Hat jemand eine Idee wie es funktionieren könnte.
Meine Suche im Forum brachte erst mal nichts.
Gruß Sven
eingabe = False
while eingabe == 0 or 1:
try:
# den Wert einlesen
eingabe = int(input("Bitte geben Sie eine Dualzahl ein, die umgerechnet werden soll: "))
except ValueError:
print("Die Eingabe war nicht gültig. Es dürfen nur die 0 und 1 eingegeben werden!")
else:
eingabe = True
prüfen, ob eine Dualzahl eingegeben wurde
Du hast da mehrere Fehler. `eingabe = 0 or 1` ist immer wahr.
Die Prüfung ist hier nicht, ob die Eingabe 0 oder 1 ist, sondern ob eingabe gleich 0 ist oder ob 1 wahr ist. Nun sind für Python alle Zahlen außer 0 wahr. Analoges gilt auch für diverse andere Datentypen. Siehe dazu "Boolean operations" in der Dokumentation.
Die Abfrage müsste also lauten: `while eingabe == 1 or eingabe == 0` oder einfacher `while eingabe in {0, 1}`. Jetzt stehst du aber vor dem nächsten Problem. `False == 0` ist nämlich auch wahr, da `False` nicht nur ein boolean sondern auch ein Integer mit dem Wert 0 ist.
Die beste Lösung ist es, eine Endlosschleife zu verwenden die mit `break` verlassen wird, sobald die Prüfung erfolgreich war.
Das setzt jetzt voraus, dass du wirklich nur eine einzige Ziffer prüfen willst. Möchtest du eine Eingabe wie 101010 prüfen, dann ist ohnehin eine andere Prüfung erforderlich.
Code: Alles auswählen
>>> False or 1
1
>>> bool(False or 1)
True
Die Abfrage müsste also lauten: `while eingabe == 1 or eingabe == 0` oder einfacher `while eingabe in {0, 1}`. Jetzt stehst du aber vor dem nächsten Problem. `False == 0` ist nämlich auch wahr, da `False` nicht nur ein boolean sondern auch ein Integer mit dem Wert 0 ist.
Code: Alles auswählen
>>> False == 0
True
>>> isinstance(False, int)
True
Code: Alles auswählen
while True:
try:
# den Wert einlesen
eingabe = int(input("Bitte geben Sie eine Dualzahl ein, die umgerechnet werden soll: "))
if eingabe in {0, 1}:
break
except ValueError:
print("Die Eingabe war nicht gültig. Es dürfen nur die 0 und 1 eingegeben werden!")
@kingsven: wenn die Aufgabe lautet, eine Dualzahl in eine Dezimalzahl umzuwandeln, dann sind wohl str und int nicht erlaubt, denn damit ist die Aufgabe trivial:
Code: Alles auswählen
dezimalzahl = str(int(dualzahl, 2))
Die Prüfung ist sogar recht einfach. Du testest, wie von /me gezeigt, auf einen ValueError, verwendest aber den gesamten Eingabestring:
Code: Alles auswählen
>>> i = input("Dualzahl eingeben:")
Dualzahl eingeben:1100101
>>> i
'1100101'
>>> int(i, 2)
101
>>> i = input("Dualzahl eingeben:")
Dualzahl eingeben:100201
>>> int(i, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '100201'
> <stdin>(1)<module>()